• R/O
  • SSH
  • HTTPS

marathon: コミット


コミットメタ情報

リビジョン342 (tree)
日時2007-06-21 23:34:42
作者hogepiyo

ログメッセージ

*** empty log message ***

変更サマリ

差分

--- marathon/trunk/MapEditorWX/WXTODOリスト.txt (revision 341)
+++ marathon/trunk/MapEditorWX/WXTODOリスト.txt (revision 342)
@@ -138,7 +138,11 @@
138138 ?P?F?ۑ???
139139 ?Q?F?ҏW????i????????
140140 ?R?F
141+?_??????????????????????̂ŁA
141142
142143 ?\?????͍폜?Ώۂ??X?L?b?v????΂悢?B
143144 Fix???ɏ??Ԑ?????????
144-
145+?ˑ??֌W
146+?_?????̒[?_?i?|???S???̈ꕔ?j
147+?????_?ASide?A?|???S??
148+?|???S???????A?_?A?I?u?W?F?N?g?ASide
\ No newline at end of file
--- marathon/trunk/HPLLib/HPLMapToolModifier.cpp (nonexistent)
+++ marathon/trunk/HPLLib/HPLMapToolModifier.cpp (revision 342)
@@ -0,0 +1,70 @@
1+#include "HPLMapTool.h"
2+#include "HPLMath.h"
3+#include <limits.h>
4+#include "HPLQuickSort.h"
5+#include <fstream>
6+#include "HPLError.h"
7+#include "HPLStringModifier.h"
8+
9+/**
10+ マップアイテム(点・線・Side・ポリゴン・オブジェクト)
11+ を削除します
12+ 手法としては、
13+ 1:線の端点など、参照元が削除対象となっている場合、
14+ ・参照をNONEにする
15+ ・自分自身も削除対象とする
16+ 2:削除対象を削除していく
17+ ・削除番号の列を作る
18+ ・後ろ側から消していく
19+
20+ @param
21+*/
22+bool hpl::aleph::map::deleteMapItems(std::vector<bool>& delPoints, std::vector<bool>& delLines,
23+ std::vector<bool>& delSides,
24+ std::vector<bool>& delPolygons, std::vector<bool>& delObjects)
25+{
26+ if(delPoints.size() != EndpointList.size() ||
27+ delPoints.size() != dynamic_world.endpoint_count ||
28+ delLines.size() != LineList.size() ||
29+ delLines.size() != dynamic_world.line_count ||
30+ delSides.size() != SideList.size() ||
31+ delSides.size() != dynamic_world.side_count ||
32+ delPolygons.size() != PolygonList.size() ||
33+ delPolygons.size() != dynamic_world.polygon_count ||
34+ delObjects.size() != SavedObjectList.size())
35+ {
36+ hpl::error::halt("数があっていない");
37+ return false;
38+ }
39+
40+
41+
42+ /////////////////
43+ //実際に削除する
44+ std::map<int, int> indexMapPoints;
45+ std::map<int, int> indexMapLines;
46+ std::map<int, int> indexMapSides;
47+ std::map<int, int> indexMapPolygons;
48+ std::map<int, int> indexMapObjects;
49+ //対応表を作る
50+ int counter = 0;
51+ for(int i = 0; i < (int)delPoints.size(); i ++){
52+ if(!delPoints[i]){ indexMapPoints[i] = counter; counter ++;}
53+ }
54+ counter = 0;
55+ for(int i = 0; i < (int)delLines.size(); i ++){
56+ if(!delLines[i]){ indexMapLines[i] = counter; counter ++;}
57+ }
58+ counter = 0;
59+ for(int i = 0; i < (int)delSides.size(); i ++){
60+ if(!delSides[i]){ indexMapSides[i] = counter; counter ++;}
61+ }
62+ counter = 0;
63+ for(int i = 0; i < (int)delPolygons.size(); i ++){
64+ if(!delPolygons[i]){ indexMapPolygons[i] = counter; counter ++;}
65+ }
66+ counter = 0;
67+ for(int i = 0; i < (int)delObjects.size(); i ++){
68+ if(!delObjects[i]){ indexMapObjects[i] = counter; counter ++;}
69+ }
70+}
--- marathon/trunk/HPLLib/HPLStockManager.cpp (revision 341)
+++ marathon/trunk/HPLLib/HPLStockManager.cpp (revision 342)
@@ -44,13 +44,127 @@
4444 削除情報を更新します。
4545 具体的にはdynamic_worldの値に合わせて要素数を増加させます
4646 増加分は削除対象ではないのですべてfalseです。
47+ 次に、実際のデータを調べて関連性があるものをさらに削除します。
48+ ・点削除→
49+ 端点になっている線を消す
50+ (ポリゴンを消す←線の部分で行う)
51+ (Side、Objectは無関係)
52+
53+ 依存項目はない
54+
55+ ・線削除→
56+ Sideも削除
57+ ポリゴンを消す
58+ (点はこれ以上消さない。オブジェクトは無関係)
59+
60+ 依存項目なし
61+
62+ ・Side削除→
63+ 存在としては他と独立しているので、他に消すものはない
64+
65+ 線のSideをNONEに
66+ ポリゴンのside_indexesの該当部分をNONEに
67+
68+ ・ポリゴン削除→
69+ 空間になるので、Sideも削除(line_data::clockwise_polygon_ownerなどで調べる)
70+ 乗っているオブジェクトを削除
71+
72+ 点、線、Sideのポリゴン番号をNONEに
73+
4774 */
4875 void hpl::aleph::HPLStockManager::updateDeletes()
4976 {
5077 //points
5178 for(int i = delPoints.size(); i < dynamic_world->endpoint_count; i ++){
79+ delPoints.push_back(false);
80+ }
81+ for(int i = delLines.size(); i < dynamic_world->line_count; i ++){
82+ delLines.push_back(false);
83+ }
84+ for(int i = delSides.size(); i < dynamic_world->side_count; i ++){
85+ delSides.push_back(false);
86+ }
87+ for(int i = delPolygons.size(); i < dynamic_world->polygon_count; i ++){
88+ delPolygons.push_back(false);
89+ }
90+ for(int i = delObjects.size(); i < SavedObjectList.size(); i ++){
91+ delObjects.push_back(false);
92+ }
5293
94+ //点関連の削除対象整理
95+ for(int i = 0; i < (int)delPoints.size(); i ++){
96+ if(delPoints[i]){
97+ //削除対象
98+ //所有している線も削除する
99+ std::vector<int> lineIndexes = hpl::aleph::map::getLineIndexesIncludePoint(i);
100+ for(int j = 0; j < (int)lineIndexes.size(); j ++){
101+ delLines[lineIndexes[i]] = true;
102+ }
103+ }else{
104+ //残る
105+ endpoint_data* ep = get_endpoint_data(i);
106+ if(ep->supporting_polygon_index != NONE &&
107+ get_polygon_data(ep->supporting_polygon_index) != NULL &&
108+ delPolygon[ep->supporting_polygon_index])
109+ {
110+ //関連ポリゴンが消されるならば対応を切っておく
111+ ep->supporting_polygon_index = NONE;
112+ }
113+ }
53114 }
115+ for(int i = 0; i < (int)delLines.size(); i ++){
116+ line_data* line = get_line_data(i);
117+ if(delLine[i]){
118+ //関連するポリゴンを削除する
119+ if(line->clockwise_polygon_owner != NONE){
120+ delPolygons[line->clockwise_polygon_owner] = true;
121+ }
122+ if(line->counterclockwise_polygon_owner != NONE){
123+ delPolygons[line->counterclockwise_polygon_owner] = true;
124+ }
125+ }else{
126+ //残る
127+ //点が消えていたら残っているわけがないので考慮しなくてよい
128+ //Sideが消えていたら関連を切る
129+ if(delSides.at(line->clockwise_polygon_side_index)){
130+ line->clockwise_polygon_side_index = NONE;
131+ }
132+ if(delSides[line->counterclockwise_polygon_side_index]){
133+ line->counterclockwise_polygon_side_index = NONE;
134+ }
135+ }
136+ }
137+
138+ //Side
139+ for(int i = 0; i < (int)delSides.size(); i ++){
140+ side_data* side = get_side_data(i);
141+ if(delSides[i]){
142+ //消す
143+ //線からリンクを外させる
144+ //…のはすでに終わっている
145+ }else{
146+ //残る
147+ //関連するインデックスをNONEにする
148+ if(delLines[side->line_index]){
149+ side->line_index = NONE;
150+ }
151+ if(delPolygon[side->polygon_index]){
152+ //自身も削除する
153+ side->polygon_index = NONE;
154+ }
155+ }
156+ }
157+ //ポリゴン
158+ for(int i = 0; i < (int)delPolygons.size(); i ++){
159+ polygon_data* poly = get_polygon_data(i);
160+ if(delPolygons[i]){
161+ //削除対象
162+ //オブジェクトも消す
163+
164+ }else{
165+ //残る
166+ }
167+ }
54168 }
55169
56170 /**
--- marathon/trunk/HPLLib/HPLMapTool.h (revision 341)
+++ marathon/trunk/HPLLib/HPLMapTool.h (revision 342)
@@ -221,6 +221,12 @@
221221 点を共有するポリゴンのリストを取得します
222222 */
223223 std::vector<int> getPolygonIndexesIncludePoint(int endpointIndex);
224+
225+ /**
226+ ポリゴンに乗っているオブジェクトのインデックスを取得します
227+ */
228+ std::vector<int> getObjectIndexesOnPolygon(int polygonIndex);
229+
224230 ////////////////////////////////////////////////////////////////////////
225231 /////////// Sides ////////////////////////////////////////////////////
226232
@@ -367,12 +373,15 @@
367373 1:線の端点など、参照元が削除対象となっている場合、
368374 ・参照をNONEにする
369375 ・自分自身も削除対象とする
370- 2:
376+ 2:削除対象を削除していく
377+ ・削除番号の列を作る
378+ ・後ろ側から消していく
371379
372380 @param
373381 */
374- bool deleteMapItems(std::vector<bool>* delPoints, std::vector<bool>* delLines, std::vector<bool>* delSides,
375- std::vector<bool>* delPolygons, std::vector<bool>* delObjects);
382+ bool deleteMapItems(std::vector<bool>& delPoints, std::vector<bool>& delLines,
383+ std::vector<bool>& delSides,
384+ std::vector<bool>& delPolygons, std::vector<bool>& delObjects);
376385
377386 /**
378387 ポリゴン情報を修正します
旧リポジトリブラウザで表示