Revision 2326

View differences:

branches/CqCMSDvp/libraries/libCq CMS for java.old/src/org/cresques/px/dxf/DxfFeatureMaker.java
211 211
				LineString3D lineString3D = (LineString3D)feaBordes.getGeometry();
212 212
				Polygon3D polygon3D = (Polygon3D)feaFondos.getGeometry();
213 213
				lineString3D.add(firstPt);
214
				if (bulge!=0) {
215
					
214
				if (bulge!=0 && !(lineString3D.get(lineString3D.pointNr()-2).getX()==lineString3D.get(lineString3D.pointNr()-1).getX()) && lineString3D.get(lineString3D.pointNr()-2).getY()==lineString3D.get(lineString3D.pointNr()-1).getY()) {
216 215
					// 041122: Correcci?n del bug en los bulges de FIXT3.DXF
217 216
					Vector arc = createArc(new Point2D.Double(lineString3D.get(lineString3D.pointNr()-2).getX(), lineString3D.get(lineString3D.pointNr()-2).getY()), new Point2D.Double(lineString3D.get(lineString3D.pointNr()-1).getX(), lineString3D.get(lineString3D.pointNr()-1).getY()), bulge);
218 217
					lineString3D.remove(lineString3D.pointNr()-1);
......
241 240
						}					
242 241
					}
243 242
					// 041122
244
					
245 243
					bulge = 0.0;
246 244
				}
247 245
				
......
328 326
			if (lastFeaBordes.getGeometry() instanceof LineString3D) {
329 327
				Feature feaBordes = lastFeaBordes;
330 328
				LineString3D lineString3D = (LineString3D)feaBordes.getGeometry();
331
				if (bulge!=0) {
332
					
329
				if (bulge!=0 && !(lineString3D.get(lineString3D.pointNr()-2).getX()==lineString3D.get(lineString3D.pointNr()-1).getX()) && lineString3D.get(lineString3D.pointNr()-2).getY()==lineString3D.get(lineString3D.pointNr()-1).getY()) {
333 330
					// 041122: Correcci?n del bug en los bulges de FIXT3.DXF
334 331
					Vector arc = createArc(new Point2D.Double(lineString3D.get(lineString3D.pointNr()-2).getX(), lineString3D.get(lineString3D.pointNr()-2).getY()), new Point2D.Double(lineString3D.get(lineString3D.pointNr()-1).getX(), lineString3D.get(lineString3D.pointNr()-1).getY()), bulge);
335 332
					lineString3D.remove(lineString3D.pointNr()-1);
......
354 351
						}					
355 352
					}
356 353
					// 041122
357
					
358 354
					bulge = 0.0;
359 355
				}
360 356
				
......
499 495
						bulge_aux = grp.getDataAsDouble(42);
500 496
					} else { bulge_aux = 0.0; }
501 497
					//int cnt = lineString.pointNr();
502
					lineString3D.remove(lineString3D.pointNr()-1);
503
					lineString3D.remove(lineString3D.pointNr()-1);
504
					polygon3D.remove(polygon3D.pointNr()-1);
505
					polygon3D.remove(polygon3D.pointNr()-1);
506
					Vector arc = createArc(ptAnterior, pt, bulge);
507
					if (bulge>0) {
508
						for (int i=0; i<arc.size(); i++) {
509
							Point2D ptAux = new Point2D.Double();
510
							ptAux = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
511
							Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), z);
512
							lineString3D.add(ptAux3D);
513
							polygon3D.add(ptAux3D);
514
							if (lineString3D.pointNr() == 1) firstPt = ptAux3D;
498
					if (ptAnterior.getX()==pt.getX() && ptAnterior.getY()==pt.getY()) {
499
					    // no se construye el arco
500
					} else {
501
						lineString3D.remove(lineString3D.pointNr()-1);
502
						lineString3D.remove(lineString3D.pointNr()-1);
503
						polygon3D.remove(polygon3D.pointNr()-1);
504
						polygon3D.remove(polygon3D.pointNr()-1);
505
						Vector arc = createArc(ptAnterior, pt, bulge);
506
						if (bulge>0) {
507
							for (int i=0; i<arc.size(); i++) {
508
								Point2D ptAux = new Point2D.Double();
509
								ptAux = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
510
								Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), z);
511
								lineString3D.add(ptAux3D);
512
								polygon3D.add(ptAux3D);
513
								if (lineString3D.pointNr() == 1) firstPt = ptAux3D;
514
							}
515
						} else {
516
							for (int i=arc.size()-1; i>=0; i--) {
517
								Point2D ptAux = new Point2D.Double();
518
								ptAux = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
519
								Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), z);
520
								lineString3D.add(ptAux3D);
521
								polygon3D.add(ptAux3D);
522
								if (lineString3D.pointNr() == 1 || polygon3D.pointNr() == 1) firstPt = ptAux3D;
523
							}			
515 524
						}
516
					} else {
517
						for (int i=arc.size()-1; i>=0; i--) {
518
							Point2D ptAux = new Point2D.Double();
519
							ptAux = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
520
							Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), z);
521
							lineString3D.add(ptAux3D);
522
							polygon3D.add(ptAux3D);
523
							if (lineString3D.pointNr() == 1 || polygon3D.pointNr() == 1) firstPt = ptAux3D;
524
						}			
525 525
					}
526 526
					bulge = bulge_aux;
527 527
				}
......
575 575
					if (grp.hasCode(42)) {
576 576
						bulge_aux = grp.getDataAsDouble(42);
577 577
					} else { bulge_aux = 0.0; }
578
					// Borro los puntos inicio y final del arco.
579
					lineString3D.remove(lineString3D.pointNr()-1);
580
					lineString3D.remove(lineString3D.pointNr()-1);
581
					Vector arc = createArc(ptAnterior, pt, bulge);
582
					if (bulge>0) {
583
						for (int i=0; i<arc.size(); i++) {
584
							Point2D ptAux = new Point2D.Double();
585
							ptAux = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
586
							Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), z);
587
							lineString3D.add(ptAux3D);
588
							if (lineString3D.pointNr() == 1) firstPt = ptAux3D;
578
					if (ptAnterior.getX()==pt.getX() && ptAnterior.getY()==pt.getY()) {
579
					    // no se construye el arco
580
					} else {
581
						// Borro los puntos inicio y final del arco.
582
						lineString3D.remove(lineString3D.pointNr()-1);
583
						lineString3D.remove(lineString3D.pointNr()-1);
584
						Vector arc = createArc(ptAnterior, pt, bulge);
585
						if (bulge>0) {
586
							for (int i=0; i<arc.size(); i++) {
587
								Point2D ptAux = new Point2D.Double();
588
								ptAux = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
589
								Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), z);
590
								lineString3D.add(ptAux3D);
591
								if (lineString3D.pointNr() == 1) firstPt = ptAux3D;
592
							}
593
						} else {
594
							for (int i=arc.size()-1; i>=0; i--) {
595
								Point2D ptAux = new Point2D.Double();
596
								ptAux = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
597
								Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), z);
598
								lineString3D.add(ptAux3D);
599
								if (lineString3D.pointNr() == 1) firstPt = ptAux3D;
600
							}					
589 601
						}
590
					} else {
591
						for (int i=arc.size()-1; i>=0; i--) {
592
							Point2D ptAux = new Point2D.Double();
593
							ptAux = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
594
							Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), z);
595
							lineString3D.add(ptAux3D);
596
							if (lineString3D.pointNr() == 1) firstPt = ptAux3D;
597
						}					
598 602
					}
599 603
					bulge = bulge_aux;
600 604
				}
......
697 701
				y = ((Double) g.getData()).doubleValue();
698 702
				if (hasBulge) {
699 703
					Point2D finalPoint = new Point2D.Double(x, y);
700
					Vector arc = createArc(((LineString3D)lineString3D).get(lineString3D.pointNr()-1), finalPoint, bulgeLwp);
701
					lineString3D.remove(lineString3D.pointNr()-1);
702
					if (isDoubleFeatured) polygon3D.remove(polygon3D.pointNr()-1);
703
					if (bulgeLwp>0) {
704
						for (int k=0; k<arc.size(); k++) {
705
							Point2D ptAux = new Point2D.Double();
706
							ptAux = proj.createPoint(((Point2D)arc.get(k)).getX(), ((Point2D)arc.get(k)).getY());
707
							//System.out.println("createLwPolyline: ptAux = " + ptAux);
708
							Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), elev);
709
							lineString3D.add(ptAux3D);
710
							//if (lineString.pointNr() == 1) firstPt = ptAux;
711
							if (isDoubleFeatured) polygon3D.add(ptAux3D);
712
							if (lineString3D.pointNr() == 1 || polygon3D.pointNr() == 1) firstPt = ptAux3D;
713
						}
704
					if (((LineString3D)lineString3D).get(lineString3D.pointNr()-1).getX()==finalPoint.getX() && ((LineString3D)lineString3D).get(lineString3D.pointNr()-1).getY()==finalPoint.getY()) {
705
					    // no se construye el arco
714 706
					} else {
715
						for (int k=arc.size()-1; k>=0; k--) {
716
							Point2D ptAux = new Point2D.Double();
717
							ptAux = proj.createPoint(((Point2D)arc.get(k)).getX(), ((Point2D)arc.get(k)).getY());
718
							Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), elev);
719
							lineString3D.add(ptAux3D);
720
							if (isDoubleFeatured) polygon3D.add(ptAux3D);
721
							if (lineString3D.pointNr() == 1 || polygon3D.pointNr() == 1) firstPt = ptAux3D;
707
						Vector arc = createArc(((LineString3D)lineString3D).get(lineString3D.pointNr()-1), finalPoint, bulgeLwp);
708
						lineString3D.remove(lineString3D.pointNr()-1);
709
						if (isDoubleFeatured) polygon3D.remove(polygon3D.pointNr()-1);
710
						if (bulgeLwp>0) {
711
							for (int k=0; k<arc.size(); k++) {
712
								Point2D ptAux = new Point2D.Double();
713
								ptAux = proj.createPoint(((Point2D)arc.get(k)).getX(), ((Point2D)arc.get(k)).getY());
714
								//System.out.println("createLwPolyline: ptAux = " + ptAux);
715
								Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), elev);
716
								lineString3D.add(ptAux3D);
717
								//if (lineString.pointNr() == 1) firstPt = ptAux;
718
								if (isDoubleFeatured) polygon3D.add(ptAux3D);
719
								if (lineString3D.pointNr() == 1 || polygon3D.pointNr() == 1) firstPt = ptAux3D;
720
							}
721
						} else {
722
							for (int k=arc.size()-1; k>=0; k--) {
723
								Point2D ptAux = new Point2D.Double();
724
								ptAux = proj.createPoint(((Point2D)arc.get(k)).getX(), ((Point2D)arc.get(k)).getY());
725
								Point3D ptAux3D = new Point3D(ptAux.getX(), ptAux.getY(), elev);
726
								lineString3D.add(ptAux3D);
727
								if (isDoubleFeatured) polygon3D.add(ptAux3D);
728
								if (lineString3D.pointNr() == 1 || polygon3D.pointNr() == 1) firstPt = ptAux3D;
729
							}
722 730
						}
723 731
					}
724 732
					hasBulge = false;
branches/CqCMSDvp/libraries/libCq CMS for java.old/src/org/cresques/px/dxf/DxfEntityMaker.java
155 155
			DxfPolyline polyline = (DxfPolyline)lastEntity;
156 156
			if (polyline.closed) {
157 157
				((DxfPolyline) lastEntity).add(firstPt);
158
				if (!(bulge==0)) {
158
				if (bulge>0) {
159 159
					int cnt = ((DxfPolyline) lastEntity).pts.size();
160
					Vector arc = DxfPolyline.createArc((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-2)), (Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-1)), bulge);
161
					((DxfPolyline) lastEntity).pts.remove(cnt-1);
162
					for (int i=0; i<arc.size(); i++) {
163
						Point2D pt = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
164
						((DxfPolyline) lastEntity).add(pt);
165
						if (((DxfPolyline)lastEntity).pts.size() == 1) firstPt = pt;
160
					if (((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-2))).getX()==((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-1))).getX() && ((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-2))).getY()==((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-1))).getY()) {
161
					    // no se construye el arco
162
					} else {
163
						Vector arc = DxfPolyline.createArc((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-2)), (Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-1)), bulge);
164
						((DxfPolyline) lastEntity).pts.remove(cnt-1);
165
						for (int i=0; i<arc.size(); i++) {
166
							Point2D pt = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
167
							((DxfPolyline) lastEntity).add(pt);
168
							if (((DxfPolyline)lastEntity).pts.size() == 1) firstPt = pt;
169
						}
166 170
					}
167 171
					bulge = 0.0;
172
				} else if (bulge<0) {
173
					int cnt = ((DxfPolyline) lastEntity).pts.size();
174
					if (((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-2))).getX()==((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-1))).getX() && ((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-2))).getY()==((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-1))).getY()) {
175
					    // no se construye el arco
176
					} else {
177
						Vector arc = DxfPolyline.createArc((Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-2)), (Point2D)(((DxfPolyline) lastEntity).pts.get(cnt-1)), bulge);
178
						((DxfPolyline) lastEntity).pts.remove(cnt-1);
179
						for (int i=arc.size()-1; i>=0; i--) {
180
							Point2D pt = proj.createPoint(((Point2D)arc.get(i)).getX(), ((Point2D)arc.get(i)).getY());
181
							((DxfPolyline) lastEntity).add(pt);
182
							if (((DxfPolyline)lastEntity).pts.size() == 1) firstPt = pt;
183
						}
184
					}
185
					bulge = 0.0;
168 186
				}
169 187
			}
170 188
			// 050315, jmorell: Para leer Polylines estas tb deben tener vector de bulges.
branches/pilotoDWG/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dxf/DXFCadDriver.java
271 271
						end = (Point2D)dxfPolyline.getPts().get(j+1);
272 272
					}
273 273
					//System.out.println("DxfCadDriver.initialize(): dxfPolyline.getBulges().size() = " + dxfPolyline.getBulges().size());
274
					if (((Double)dxfPolyline.getBulges().get(j)).doubleValue()==0) {
274
					if (((Double)dxfPolyline.getBulges().get(j)).doubleValue()==0 || (init.getX()==end.getX() && init.getY()==end.getY())) {
275 275
						GeneralPathX gp = new GeneralPathX();
276 276
						gp.moveTo(init.getX(), init.getY());
277 277
						gp.lineTo(end.getX(), end.getY());
......
283 283
							gp.closePath();
284 284
						}*/
285 285
						geoms[j] = (IGeometry)ShapeFactory.createPolyline2D(gp);
286
					} else if (((Double)dxfPolyline.getBulges().get(j)).doubleValue()>0) {
286
					} else if (((Double)dxfPolyline.getBulges().get(j)).doubleValue()>0 && !(init.getX()==end.getX() && init.getY()==end.getY())) {
287 287
						//IGeometry arc = (IGeometry)ShapeFactory.createArc();
288 288
						DxfCalArcs dxfCalArcs = new DxfCalArcs(init, end, ((Double)dxfPolyline.getBulges().get(j)).doubleValue());
289 289
						Vector arc = (Vector)dxfCalArcs.getCentralPoint();
......
292 292
						//System.out.println("cent = " + cent);
293 293
						//System.out.println("end = " + end);
294 294
						geoms[j] = (IGeometry)ShapeFactory.createArc(init, cent, end);
295
					} else if (((Double)dxfPolyline.getBulges().get(j)).doubleValue()<0) {
295
					} else if (((Double)dxfPolyline.getBulges().get(j)).doubleValue()<0 && !(init.getX()==end.getX() && init.getY()==end.getY())) {
296 296
						//IGeometry arc = (IGeometry)ShapeFactory.createArc();
297 297
						DxfCalArcs dxfCalArcs = new DxfCalArcs(init, end, ((Double)dxfPolyline.getBulges().get(j)).doubleValue());
298 298
						Vector arc = (Vector)dxfCalArcs.getCentralPoint();
branches/pilotoDWG/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dwg/DwgCadDriver.java
423 423
								end = (Point2D)((DwgPolyline2D)entity).getPts()[j+1];
424 424
							}
425 425
							//System.out.println("DxfCadDriver.initialize(): dxfPolyline.getBulges().size() = " + dxfPolyline.getBulges().size());
426
							if (((DwgPolyline2D)entity).getBulges()[j]==0) {
426
							if (((DwgPolyline2D)entity).getBulges()[j]==0  || (init.getX()==end.getX() && init.getY()==end.getY())) {
427 427
								GeneralPathX gp = new GeneralPathX();
428 428
								gp.moveTo(init.getX(), init.getY());
429 429
								gp.lineTo(end.getX(), end.getY());
......
435 435
									gp.closePath();
436 436
								}*/
437 437
								geoms[j] = (IGeometry)ShapeFactory.createPolyline2D(gp);
438
							} else if (((DwgPolyline2D)entity).getBulges()[j]>0) {
438
							} else if (((DwgPolyline2D)entity).getBulges()[j]>0 && !(init.getX()==end.getX() && init.getY()==end.getY())) {
439 439
								//IGeometry arc = (IGeometry)ShapeFactory.createArc();
440 440
								ArcFromBulgeCalculator arcFromBulgeCalculator = new ArcFromBulgeCalculator(init, end, ((DwgPolyline2D)entity).getBulges()[j]);
441 441
								Vector arc = (Vector)arcFromBulgeCalculator.getCentralPoint();
......
444 444
								//System.out.println("cent = " + cent);
445 445
								//System.out.println("end = " + end);
446 446
								geoms[j] = (IGeometry)ShapeFactory.createArc(init, cent, end);
447
							} else if (((DwgPolyline2D)entity).getBulges()[j]<0) {
447
							} else if (((DwgPolyline2D)entity).getBulges()[j]<0 && !(init.getX()==end.getX() && init.getY()==end.getY())) {
448 448
								//IGeometry arc = (IGeometry)ShapeFactory.createArc();
449 449
							    ArcFromBulgeCalculator arcFromBulgeCalculator = new ArcFromBulgeCalculator(init, end, ((DwgPolyline2D)entity).getBulges()[j]);
450 450
								Vector arc = (Vector)arcFromBulgeCalculator.getCentralPoint();

Also available in: Unified diff