Revision 10632 trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgPolyline2D.java
DwgPolyline2D.java | ||
---|---|---|
49 | 49 |
import com.iver.cit.jdwglib.dwg.IDwgBlockMember; |
50 | 50 |
import com.iver.cit.jdwglib.dwg.IDwgExtrusionable; |
51 | 51 |
import com.iver.cit.jdwglib.dwg.IDwgPolyline; |
52 |
import com.iver.cit.jdwglib.dwg.IDwgVertex; |
|
52 | 53 |
import com.iver.cit.jdwglib.util.AcadExtrusionCalculator; |
53 | 54 |
import com.iver.cit.jdwglib.util.FMapUtil; |
54 | 55 |
import com.iver.cit.jdwglib.util.GisModelCurveCalculator; |
... | ... | |
62 | 63 |
implements IDwgPolyline, IDwgExtrusionable, IDwg3DTestable, IDwg2FMap, IDwgBlockMember{ |
63 | 64 |
|
64 | 65 |
|
65 |
public DwgPolyline2D(int index) { |
|
66 |
super(index); |
|
67 |
// TODO Auto-generated constructor stub |
|
68 |
} |
|
66 |
|
|
69 | 67 |
private int flags; |
70 | 68 |
private int curveType; |
71 | 69 |
private double initWidth; |
... | ... | |
76 | 74 |
private DwgHandleReference firstVertexHandle = null; |
77 | 75 |
private DwgHandleReference lastVertexHandle = null; |
78 | 76 |
private DwgHandleReference seqendHandle = null; |
79 |
private Point2D[] pts;
|
|
77 |
private List vertices;
|
|
80 | 78 |
private double[] bulges; |
81 | 79 |
|
80 |
public DwgPolyline2D(int index) { |
|
81 |
super(index); |
|
82 |
vertices = new ArrayList(); |
|
83 |
} |
|
82 | 84 |
/** |
83 | 85 |
* @return Returns the firstVertexHandle. |
84 | 86 |
*/ |
... | ... | |
118 | 120 |
/** |
119 | 121 |
* @return Returns the pts. |
120 | 122 |
*/ |
121 |
public Point2D[] getPts() {
|
|
122 |
return pts;
|
|
123 |
public List getPts() {
|
|
124 |
return vertices;
|
|
123 | 125 |
} |
124 | 126 |
/** |
125 | 127 |
* @param pts The pts to set. |
126 | 128 |
*/ |
127 |
public void setPts(Point2D[] pts) {
|
|
128 |
this.pts = pts;
|
|
129 |
public void setPts(List pts) {
|
|
130 |
this.vertices = pts;
|
|
129 | 131 |
} |
130 | 132 |
/** |
131 | 133 |
* @return Returns the bulges. |
... | ... | |
284 | 286 |
}//for |
285 | 287 |
|
286 | 288 |
if (pts.size()>0) { |
287 |
Point2D[] newPts = new Point2D[pts.size()];
|
|
289 |
List newPts = new ArrayList();
|
|
288 | 290 |
if ((flags & 0x1)==0x1) { |
289 |
newPts = new Point2D[pts.size()+1]; |
|
290 | 291 |
for (int j=0;j<pts.size();j++) { |
291 |
newPts[j] = (Point2D)pts.get(j);
|
|
292 |
newPts.add(pts.get(j));
|
|
292 | 293 |
} |
293 |
newPts[pts.size()] = (Point2D)pts.get(0);
|
|
294 |
newPts.add(pts.get(0));
|
|
294 | 295 |
bulges.add(new Double(0)); |
295 | 296 |
} else { |
296 | 297 |
for (int j=0;j<pts.size();j++) { |
297 |
newPts[j] = (Point2D)pts.get(j);
|
|
298 |
newPts.add(pts.get(j));
|
|
298 | 299 |
} |
299 | 300 |
} |
300 | 301 |
double[] bs = new double[bulges.size()]; |
... | ... | |
302 | 303 |
bs[j] = ((Double)bulges.get(j)).doubleValue(); |
303 | 304 |
} |
304 | 305 |
setBulges(bs); |
305 |
Point2D[] points = GisModelCurveCalculator.
|
|
306 |
List points = GisModelCurveCalculator.
|
|
306 | 307 |
calculateGisModelBulge(newPts, bs); |
307 | 308 |
setPts(points); |
308 | 309 |
} else { |
... | ... | |
361 | 362 |
}//for |
362 | 363 |
|
363 | 364 |
if (pts.size()>0) { |
364 |
Point2D[] newPts = new Point2D[pts.size()];
|
|
365 |
List newPts = new ArrayList();
|
|
365 | 366 |
if ((flags & 0x1)==0x1) { |
366 |
newPts = new Point2D[pts.size()+1]; |
|
367 | 367 |
for (int j=0;j<pts.size();j++) { |
368 |
newPts[j] = (Point2D)pts.get(j);
|
|
368 |
newPts.add(pts.get(j));
|
|
369 | 369 |
} |
370 |
newPts[pts.size()] = (Point2D)pts.get(0);
|
|
370 |
newPts.add(pts.get(0));
|
|
371 | 371 |
bulges.add(new Double(0)); |
372 | 372 |
} else { |
373 | 373 |
for (int j=0;j<pts.size();j++) { |
374 |
newPts[j] = (Point2D)pts.get(j);
|
|
374 |
newPts.add(pts.get(j));
|
|
375 | 375 |
} |
376 | 376 |
} |
377 | 377 |
double[] bs = new double[bulges.size()]; |
... | ... | |
379 | 379 |
bs[j] = ((Double)bulges.get(j)).doubleValue(); |
380 | 380 |
} |
381 | 381 |
setBulges(bs); |
382 |
Point2D[] points = GisModelCurveCalculator.
|
|
382 |
List points = GisModelCurveCalculator.
|
|
383 | 383 |
calculateGisModelBulge(newPts, bs); |
384 | 384 |
setPts(points); |
385 | 385 |
} else { |
... | ... | |
394 | 394 |
public void applyExtrussion() { |
395 | 395 |
if(getPts() == null) |
396 | 396 |
return; |
397 |
Point2D[] vertices = getPts();
|
|
397 |
List vertices = getPts();
|
|
398 | 398 |
double[] polyline2DExt = getExtrusion(); |
399 | 399 |
double elev = getElevation(); |
400 |
double[][] polylinePoints3D = new double[vertices.length][3];
|
|
401 |
for (int j=0;j<vertices.length;j++) {
|
|
402 |
polylinePoints3D[j][0] = vertices[j].getX();
|
|
403 |
polylinePoints3D[j][1] = vertices[j].getY();
|
|
400 |
double[][] polylinePoints3D = new double[vertices.size()][3];
|
|
401 |
for (int j = 0;j < vertices.size(); j++) {
|
|
402 |
polylinePoints3D[j][0] = ((double[])vertices.get(j))[0];
|
|
403 |
polylinePoints3D[j][1] = ((double[])vertices.get(j))[1];
|
|
404 | 404 |
polylinePoints3D[j][2] = elev; |
405 | 405 |
polylinePoints3D[j] = AcadExtrusionCalculator.extrude2(polylinePoints3D[j], polyline2DExt); |
406 | 406 |
} |
407 | 407 |
setElevation(elev); |
408 |
for (int j=0;j<vertices.length;j++) {
|
|
409 |
vertices[j] = new Point2D.Double(polylinePoints3D[j][0], polylinePoints3D[j][1]);
|
|
408 |
for (int j=0;j<vertices.size();j++) {
|
|
409 |
vertices.add(new double[]{((double[])polylinePoints3D[j])[0], ((double[])polylinePoints3D[j])[1]});
|
|
410 | 410 |
} |
411 | 411 |
setPts(vertices); |
412 | 412 |
} |
... | ... | |
427 | 427 |
*/ |
428 | 428 |
public FShape toFMapGeometry(boolean is3DFile) { |
429 | 429 |
FPolyline2D pline = null; |
430 |
Point2D[] points = getPts();
|
|
430 |
List points = getPts();
|
|
431 | 431 |
double elev = getElevation(); |
432 | 432 |
|
433 | 433 |
if (points != null) { |
434 | 434 |
if (is3DFile) { |
435 |
double[][] pline3D = new double[points.length][3]; |
|
436 |
for (int j = 0; j < points.length; j++) { |
|
437 |
pline3D[j][0] = points[j].getX(); |
|
438 |
pline3D[j][1] = points[j].getY(); |
|
439 |
pline3D[j][2] = elev; |
|
435 |
List pline3D = new ArrayList(); |
|
436 |
for (int j = 0; j < points.size(); j++) { |
|
437 |
double[] point = new double[3]; |
|
438 |
point[0] = ((double[])vertices.get(j))[0]; |
|
439 |
point[1] = ((double[])vertices.get(j))[1]; |
|
440 |
point[2] = elev; |
|
441 |
pline3D.add(point); |
|
440 | 442 |
} |
441 | 443 |
pline = FMapUtil.points3DToFPolyline3D(pline3D); |
442 | 444 |
} else { |
... | ... | |
462 | 464 |
double[] scale, double rot, |
463 | 465 |
List dwgObjectsWithoutBlocks, |
464 | 466 |
Map handleObjWithoutBlocks, DwgFile callBack) { |
467 |
|
|
465 | 468 |
DwgPolyline2D transformedEntity = null; |
466 |
Point2D[] vertices = this.getPts(); |
|
469 |
List vertices = this.getPts(); |
|
470 |
|
|
467 | 471 |
if (vertices != null) { |
468 |
Point2D[] transformedVertices = new Point2D[vertices.length]; |
|
469 |
for (int i=0;i<vertices.length;i++) { |
|
470 |
Point2D pointAux = new Point2D.Double(vertices[i].getX() - bPoint[0], vertices[i].getY() - bPoint[1]); |
|
471 |
double laX = insPoint.getX() + ((pointAux.getX()*scale[0])*Math.cos(rot) + (pointAux.getY()*scale[1])*(-1)*Math.sin(rot)); |
|
472 |
double laY = insPoint.getY() + ((pointAux.getX()*scale[0])*Math.sin(rot) + (pointAux.getY()*scale[1])*Math.cos(rot)); |
|
473 |
transformedVertices[i] = new Point2D.Double(laX, laY); |
|
474 |
} |
|
472 |
List transformedVertices = new ArrayList(); |
|
473 |
for (int i=0;i < vertices.size();i++) { |
|
474 |
double[] pointAux = null; |
|
475 |
pointAux = new double[]{((double[]) vertices.get(i))[0] - bPoint[0], |
|
476 |
((double[]) vertices.get(i))[1] - bPoint[1]}; |
|
477 |
|
|
478 |
double laX = insPoint.getX() + ((pointAux[0] * scale[0])*Math.cos(rot) + (pointAux[1]*scale[1])*(-1)*Math.sin(rot)); |
|
479 |
double laY = insPoint.getY() + ((pointAux[0]*scale[0])*Math.sin(rot) + (pointAux[1]*scale[1])*Math.cos(rot)); |
|
480 |
transformedVertices.add(new double[]{laX, laY}); |
|
481 |
}//for |
|
475 | 482 |
transformedEntity = (DwgPolyline2D)this.clone(); |
476 | 483 |
transformedEntity.setPts(transformedVertices); |
477 | 484 |
transformedEntity.setElevation((this.getElevation() * scale[2])); |
... | ... | |
501 | 508 |
myObj.setFlags(flags); |
502 | 509 |
myObj.setInitWidth(initWidth); |
503 | 510 |
myObj.setLastVertexHandle(lastVertexHandle); |
504 |
myObj.setPts(pts);
|
|
511 |
myObj.setPts(vertices);
|
|
505 | 512 |
myObj.setSeqendHandle(seqendHandle); |
506 | 513 |
myObj.setThickness(thickness); |
507 | 514 |
|
508 | 515 |
} |
516 |
public void addVertex(IDwgVertex vertex) { |
|
517 |
vertices.add(vertex.getPoint()); |
|
518 |
} |
|
509 | 519 |
|
510 | 520 |
} |
Also available in: Unified diff