Revision 10820 trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgMeshPolyline.java
DwgMeshPolyline.java | ||
---|---|---|
45 | 45 |
* |
46 | 46 |
* $Id$ |
47 | 47 |
* $Log$ |
48 |
* Revision 1.3 2007-03-06 19:39:38 azabala |
|
48 |
* Revision 1.4 2007-03-20 19:57:08 azabala |
|
49 |
* source code cleaning |
|
50 |
* |
|
51 |
* Revision 1.3 2007/03/06 19:39:38 azabala |
|
49 | 52 |
* Changes to adapt dwg 12 to general architecture |
50 | 53 |
* |
51 | 54 |
* Revision 1.2 2007/03/02 20:31:22 azabala |
... | ... | |
68 | 71 |
import java.awt.geom.Point2D; |
69 | 72 |
import java.util.ArrayList; |
70 | 73 |
import java.util.List; |
74 |
import java.util.Map; |
|
71 | 75 |
|
72 |
import com.iver.cit.gvsig.fmap.core.FShape;
|
|
76 |
import com.iver.cit.gvsig.fmap.core.IGeometry;
|
|
73 | 77 |
import com.iver.cit.jdwglib.dwg.DwgFile; |
74 | 78 |
import com.iver.cit.jdwglib.dwg.DwgHandleReference; |
75 | 79 |
import com.iver.cit.jdwglib.dwg.DwgObject; |
76 | 80 |
import com.iver.cit.jdwglib.dwg.IDwg2FMap; |
81 |
import com.iver.cit.jdwglib.dwg.IDwgBlockMember; |
|
77 | 82 |
import com.iver.cit.jdwglib.dwg.IDwgPolyline; |
78 | 83 |
import com.iver.cit.jdwglib.dwg.IDwgVertex; |
79 |
import com.iver.cit.jdwglib.util.GisModelCurveCalculator; |
|
80 | 84 |
|
81 | 85 |
/** |
82 | 86 |
* This class is a Mesh (polyline mesh), what is different of |
... | ... | |
85 | 89 |
* |
86 | 90 |
* */ |
87 | 91 |
public class DwgMeshPolyline extends DwgObject |
88 |
implements IDwgPolyline, IDwg2FMap{ |
|
92 |
implements IDwgPolyline, IDwg2FMap, IDwgBlockMember{
|
|
89 | 93 |
|
90 | 94 |
private int flags; |
91 | 95 |
/** |
... | ... | |
135 | 139 |
* */ |
136 | 140 |
private List vertices; |
137 | 141 |
|
138 |
|
|
139 |
|
|
140 |
|
|
141 | 142 |
/** |
142 | 143 |
* Constructor |
143 | 144 |
* */ |
... | ... | |
223 | 224 |
} |
224 | 225 |
|
225 | 226 |
public void calculateGisModel(DwgFile dwgFile) { |
226 |
/* |
|
227 |
int flags = getFlags(); |
|
228 |
// En estas dos lineas de abajo y en el resto del metodo |
|
229 |
// se mantiene el mecanismo anterior al refactoring. |
|
230 |
// TODO: Pensar si deberiamos coger el handle completo. |
|
231 |
// Tal vez deberiamos tomar el handle completo y evaluar |
|
232 |
// a donde apuntan (pueden haber 2 handles con codigo y offset |
|
233 |
// distintos y que, sin embargo apunten al mismo objeto). |
|
234 |
int firstHandle = getFirstVertexHandle().getOffset(); |
|
235 |
int lastHandle = getLastVertexHandle().getOffset(); |
|
236 |
ArrayList pts = new ArrayList(); |
|
237 |
ArrayList bulges = new ArrayList(); |
|
238 |
double[] pt = new double[3]; |
|
239 |
double bulge = 0d; |
|
240 |
|
|
241 |
DwgObject first = dwgFile.getDwgObjectFromHandle(firstHandle); |
|
242 |
DwgObject last = dwgFile.getDwgObjectFromHandle(lastHandle); |
|
243 |
if(first == null || last == null){ |
|
244 |
System.out.println("Polyline2D con vertices inicial o final a null"); |
|
245 |
return; |
|
246 |
} |
|
247 |
|
|
248 |
if(!(first instanceof DwgVertex2D)){ |
|
249 |
System.out.println("El primer vertice de Polyline2D es "+ |
|
250 |
first.getClass().getName()); |
|
251 |
return; |
|
252 |
} |
|
253 |
|
|
254 |
if(!(last instanceof DwgVertex2D)){ |
|
255 |
System.out.println("El primer vertice de Polyline2D es "+ |
|
256 |
first.getClass().getName()); |
|
257 |
return; |
|
258 |
} |
|
259 |
|
|
260 |
int firstObjIdx = dwgFile.getIndexOf(first); |
|
261 |
int lastObjIdx = dwgFile.getIndexOf(last); |
|
262 |
if(firstObjIdx == -1 || lastObjIdx == -1){ |
|
263 |
System.out.println("Calculate GIS Model: Problemas en la LinkedList: 1?="+firstObjIdx+",Ultimo="+lastObjIdx); |
|
264 |
return; |
|
265 |
} |
|
266 |
|
|
267 |
// pt = ((DwgVertex2D)first).getPoint(); |
|
268 |
// pts.add(new Point2D.Double(pt[0], pt[1])); |
|
269 |
// bulge = ((DwgVertex2D)first).getBulge(); |
|
270 |
// bulges.add(new Double(bulge)); |
|
271 |
|
|
272 |
for(int i = firstObjIdx; i <= lastObjIdx; i++){ |
|
273 |
DwgObject obj = dwgFile.getDwgObject(i); |
|
274 |
if(obj instanceof DwgVertex2D){ |
|
275 |
DwgVertex2D vertex = (DwgVertex2D) obj; |
|
276 |
pt = vertex.getPoint(); |
|
277 |
pts.add(new Point2D.Double(pt[0], pt[1])); |
|
278 |
bulge = vertex.getBulge(); |
|
279 |
bulges.add(new Double(bulge)); |
|
280 |
}else{ |
|
281 |
System.out.println("Encontrado "+obj.getClass().getName()+" en la lista de vertices de Polyline2D"); |
|
282 |
} |
|
283 |
}//for |
|
284 |
|
|
285 |
if (pts.size()>0) { |
|
286 |
Point2D[] newPts = new Point2D[pts.size()]; |
|
287 |
if ((flags & 0x1)==0x1) { |
|
288 |
newPts = new Point2D[pts.size()+1]; |
|
289 |
for (int j=0;j<pts.size();j++) { |
|
290 |
newPts[j] = (Point2D)pts.get(j); |
|
291 |
} |
|
292 |
newPts[pts.size()] = (Point2D)pts.get(0); |
|
293 |
bulges.add(new Double(0)); |
|
294 |
} else { |
|
295 |
for (int j=0;j<pts.size();j++) { |
|
296 |
newPts[j] = (Point2D)pts.get(j); |
|
297 |
} |
|
298 |
} |
|
299 |
double[] bs = new double[bulges.size()]; |
|
300 |
for (int j=0;j<bulges.size();j++) { |
|
301 |
bs[j] = ((Double)bulges.get(j)).doubleValue(); |
|
302 |
} |
|
303 |
setBulges(bs); |
|
304 |
Point2D[] points = GisModelCurveCalculator. |
|
305 |
calculateGisModelBulge(newPts, bs); |
|
306 |
setPts(points); |
|
307 |
} else { |
|
308 |
System.out.println("Encontrada polil?nea sin puntos ..."); |
|
309 |
// TODO: No se debe mandar nunca una polil?nea sin puntos, si esto |
|
310 |
// ocurre es porque existe un error que hay que corregir ... |
|
311 |
} |
|
312 |
|
|
313 |
**/ |
|
314 |
|
|
315 |
|
|
316 |
|
|
317 | 227 |
} |
318 | 228 |
|
319 |
public FShape toFMapGeometry(boolean is3DFile) { |
|
320 |
|
|
229 |
/* |
|
230 |
* By the moment, we consideer that PFacePolyline |
|
231 |
* is a Polyline3D TODO Implement real conversion |
|
232 |
* from a polyface mesh to a FMap geometry |
|
233 |
* */ |
|
234 |
public IGeometry toFMapGeometry(boolean is3DFile) { |
|
235 |
//TODO Implementar la conversion de DWG Mesh a |
|
236 |
//FMap (coleccion de poligonos??) |
|
321 | 237 |
return null; |
322 | 238 |
} |
323 |
|
|
239 |
/* (non-Javadoc) |
|
240 |
* @see com.iver.cit.jdwglib.dwg.IDwg2FMap#toFMapString(boolean) |
|
241 |
*/ |
|
324 | 242 |
public String toFMapString(boolean is3DFile) { |
325 |
return "Polyline MESH"; |
|
243 |
if(is3DFile) |
|
244 |
return "FPolyline3D"; |
|
245 |
else |
|
246 |
return "FPolyline2D"; |
|
326 | 247 |
} |
248 |
|
|
249 |
public String toString(){ |
|
250 |
return "MeshPolyline"; |
|
251 |
} |
|
327 | 252 |
|
328 | 253 |
public List getVertices() { |
329 | 254 |
return vertices; |
... | ... | |
350 | 275 |
} |
351 | 276 |
|
352 | 277 |
public void setMDensity(int density) { |
353 |
// TODO Auto-generated method stub |
|
354 |
|
|
278 |
this.mVerticies = density; |
|
355 | 279 |
} |
356 | 280 |
|
357 | 281 |
public void setNDensity(int density) { |
358 |
// TODO Auto-generated method stub |
|
359 |
|
|
282 |
this.nVerticies = density; |
|
360 | 283 |
} |
361 | 284 |
|
362 | 285 |
public void addVertex(IDwgVertex vertex) { |
... | ... | |
364 | 287 |
|
365 | 288 |
} |
366 | 289 |
|
290 |
public void transform2Block(double[] bPoint, Point2D insPoint, |
|
291 |
double[] scale, double rot, |
|
292 |
List dwgObjectsWithoutBlocks, |
|
293 |
Map handleObjWithoutBlocks, DwgFile callBack) { |
|
294 |
|
|
295 |
DwgPolyline3D transformedEntity = null; |
|
296 |
List vertices = this.getVertices(); |
|
297 |
|
|
298 |
if (vertices != null) { |
|
299 |
List transformedVertices = new ArrayList(); |
|
300 |
for (int i=0;i < vertices.size();i++) { |
|
301 |
double[] pointAux = null; |
|
302 |
pointAux = new double[]{((double[]) vertices.get(i))[0] - bPoint[0], |
|
303 |
((double[]) vertices.get(i))[1] - bPoint[1]}; |
|
304 |
|
|
305 |
double laX = insPoint.getX() + ((pointAux[0] * scale[0])*Math.cos(rot) + (pointAux[1]*scale[1])*(-1)*Math.sin(rot)); |
|
306 |
double laY = insPoint.getY() + ((pointAux[0]*scale[0])*Math.sin(rot) + (pointAux[1]*scale[1])*Math.cos(rot)); |
|
307 |
double laZ = ((double[]) vertices.get(i))[2] - bPoint[2]; |
|
308 |
transformedVertices.add(new double[]{laX, laY, laZ}); |
|
309 |
}//for |
|
310 |
transformedEntity = (DwgPolyline3D)this.clone(); |
|
311 |
transformedEntity.setPts(transformedVertices); |
|
312 |
dwgObjectsWithoutBlocks.add(transformedEntity); |
|
313 |
handleObjWithoutBlocks.put(new Integer(transformedEntity.getHandle().getOffset()), transformedEntity); |
|
314 |
} |
|
315 |
} |
|
367 | 316 |
} |
368 | 317 |
|
Also available in: Unified diff