svn-gvsig-desktop / tags / v1_1_Build_1008 / libraries / libFMap / src / com / iver / cit / gvsig / fmap / edition / writers / dxf / DxfWriter.java @ 12520
History | View | Annotate | Download (43.5 KB)
1 | 4937 | fjp | package com.iver.cit.gvsig.fmap.edition.writers.dxf; |
---|---|---|---|
2 | |||
3 | import java.awt.geom.PathIterator; |
||
4 | import java.awt.geom.Point2D; |
||
5 | import java.io.File; |
||
6 | import java.io.IOException; |
||
7 | 12451 | caballero | import java.sql.Types; |
8 | 4937 | fjp | import java.util.Vector; |
9 | |||
10 | import org.cresques.cts.IProjection; |
||
11 | import org.cresques.geo.Point3D; |
||
12 | import org.cresques.io.DxfFile; |
||
13 | import org.cresques.io.DxfGroup; |
||
14 | import org.cresques.io.DxfGroupVector; |
||
15 | import org.cresques.px.dxf.DxfEntityMaker; |
||
16 | |||
17 | 12451 | caballero | import com.hardcode.gdbms.engine.values.DoubleValue; |
18 | import com.hardcode.gdbms.engine.values.IntValue; |
||
19 | import com.hardcode.gdbms.engine.values.NullValue; |
||
20 | import com.hardcode.gdbms.engine.values.NumericValue; |
||
21 | import com.hardcode.gdbms.engine.values.StringValue; |
||
22 | import com.hardcode.gdbms.engine.values.Value; |
||
23 | 4937 | fjp | import com.iver.cit.gvsig.fmap.DriverException; |
24 | 5126 | fjp | import com.iver.cit.gvsig.fmap.core.FArc2D; |
25 | 5008 | fjp | import com.iver.cit.gvsig.fmap.core.FCircle2D; |
26 | 5126 | fjp | import com.iver.cit.gvsig.fmap.core.FEllipse2D; |
27 | 4937 | fjp | import com.iver.cit.gvsig.fmap.core.FGeometry; |
28 | import com.iver.cit.gvsig.fmap.core.FPoint2D; |
||
29 | import com.iver.cit.gvsig.fmap.core.FPoint3D; |
||
30 | import com.iver.cit.gvsig.fmap.core.FShape; |
||
31 | import com.iver.cit.gvsig.fmap.core.IFeature; |
||
32 | import com.iver.cit.gvsig.fmap.core.IGeometry; |
||
33 | 5404 | fjp | import com.iver.cit.gvsig.fmap.core.v02.FConverter; |
34 | 4937 | fjp | import com.iver.cit.gvsig.fmap.drivers.FieldDescription; |
35 | 5558 | fjp | import com.iver.cit.gvsig.fmap.drivers.ITableDefinition; |
36 | 4937 | fjp | import com.iver.cit.gvsig.fmap.edition.EditionException; |
37 | import com.iver.cit.gvsig.fmap.edition.IRowEdited; |
||
38 | import com.iver.cit.gvsig.fmap.edition.ISpatialWriter; |
||
39 | 5126 | fjp | import com.iver.cit.gvsig.fmap.edition.UtilFunctions; |
40 | 4937 | fjp | import com.iver.cit.gvsig.fmap.edition.writers.AbstractWriter; |
41 | import com.iver.cit.gvsig.fmap.layers.FLayer; |
||
42 | import com.iver.cit.gvsig.fmap.layers.FLyrVect; |
||
43 | import com.iver.cit.gvsig.fmap.layers.SelectableDataSource; |
||
44 | |||
45 | public class DxfWriter extends AbstractWriter implements ISpatialWriter { |
||
46 | 5126 | fjp | |
47 | 12451 | caballero | private String DEFAULT_LAYER="default"; |
48 | private Integer DEFAULT_COLOR=new Integer(0); |
||
49 | private Double DEFAULT_ELEVATION=new Double(0); |
||
50 | private Double DEFAULT_THICKNESS=new Double(0); |
||
51 | private String DEFAULT_TEXT=""; |
||
52 | private Double DEFAULT_HEIGHTTEXT=new Double(0); |
||
53 | private Double DEFAULT_ROTATIONTEXT=new Double(0); |
||
54 | |||
55 | 4937 | fjp | private DxfFieldsMapping fieldMapping = null; |
56 | 5126 | fjp | |
57 | 4937 | fjp | private File file; |
58 | 5126 | fjp | |
59 | 4937 | fjp | private FieldDescription[] fieldsDesc = null; |
60 | |||
61 | 5126 | fjp | private DxfFile.EntityFactory entityMaker;
|
62 | 4937 | fjp | |
63 | 5126 | fjp | private IProjection proj = null; |
64 | |||
65 | private DxfFile dxfFile;
|
||
66 | |||
67 | int handle = 40; // Revisar porqu? es 40. |
||
68 | |||
69 | int k = 0; |
||
70 | |||
71 | boolean dxf3DFile = false; |
||
72 | |||
73 | public void setFile(File f) { |
||
74 | 4937 | fjp | file = f; |
75 | } |
||
76 | |||
77 | public boolean canWriteAttribute(int sqlType) { |
||
78 | return false; |
||
79 | } |
||
80 | |||
81 | 6356 | fjp | public boolean canAlterTable() { |
82 | return false; |
||
83 | } |
||
84 | |||
85 | 4937 | fjp | public boolean canWriteGeometry(int gvSIGgeometryType) { |
86 | return true; // I guess all geometries can be here... |
||
87 | } |
||
88 | |||
89 | public void initialize(FLayer layer) throws EditionException { |
||
90 | try {
|
||
91 | SelectableDataSource sds = ((FLyrVect) layer).getRecordset(); |
||
92 | // Aqu? hay que revisar los campos de sds y compararlos con los
|
||
93 | // que podemos escribir. (Layer, Color, etc).
|
||
94 | fieldsDesc = sds.getFieldsDescription(); |
||
95 | } catch (DriverException e) {
|
||
96 | e.printStackTrace(); |
||
97 | throw new EditionException(e); |
||
98 | } catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
|
||
99 | e.printStackTrace(); |
||
100 | throw new EditionException(e); |
||
101 | } |
||
102 | 5126 | fjp | |
103 | 4937 | fjp | } |
104 | |||
105 | /**
|
||
106 | 5126 | fjp | * Useful to create a layer from scratch Call setFile before using this
|
107 | * function
|
||
108 | 5389 | caballero | *
|
109 | 4937 | fjp | * @param lyrDef
|
110 | * @throws EditionException
|
||
111 | */
|
||
112 | 5558 | fjp | public void initialize(ITableDefinition lyrDef) throws EditionException { |
113 | 6259 | fjp | super.initialize(lyrDef);
|
114 | 4937 | fjp | fieldsDesc = lyrDef.getFieldsDesc(); |
115 | } |
||
116 | 5126 | fjp | |
117 | 4937 | fjp | public void preProcess() throws EditionException { |
118 | 5126 | fjp | if (fieldMapping == null) { |
119 | throw new EditionException( |
||
120 | "DXFWriter: You MUST specify the fieldMapping first!!.");
|
||
121 | 4937 | fjp | } |
122 | 5126 | fjp | // NOTA: La proyecci?n no se usa absolutamente para nada (al menos
|
123 | // por ahora). Las entidades se escribir?n con las coordenadas con
|
||
124 | // las que se crean.
|
||
125 | if (proj == null) { |
||
126 | throw new EditionException( |
||
127 | "DXFWriter: You MUST specify the projection first!!.");
|
||
128 | 4937 | fjp | } |
129 | 5126 | fjp | |
130 | entityMaker = new DxfEntityMaker(proj);
|
||
131 | |||
132 | 4937 | fjp | } |
133 | |||
134 | 5126 | fjp | public void process(IRowEdited row) throws EditionException { |
135 | 4937 | fjp | if (row.getStatus() == IRowEdited.STATUS_DELETED) return; |
136 | 5389 | caballero | |
137 | try
|
||
138 | 4937 | fjp | { |
139 | IFeature feat = (IFeature) row.getLinkedRow(); |
||
140 | IGeometry geom = feat.getGeometry(); |
||
141 | 12451 | caballero | Value[] values=row.getAttributes();
|
142 | 4937 | fjp | // TODO: Tratamiento de los campos
|
143 | // y modificar los createXXX para que acepten como par?metro
|
||
144 | // los datos de LAYER, COLOR, ELEVATION, THICKNESS, TEXT
|
||
145 | // HEIGHTTEXT, ROTATIONTEXT y el resto que puedan hacer
|
||
146 | // falta.
|
||
147 | 5389 | caballero | |
148 | |||
149 | 5126 | fjp | // ////////////////
|
150 | 4937 | fjp | if (geom.getGeometryType()==FShape.POINT) {
|
151 | 12451 | caballero | createPoint2D(handle, k, geom, values); |
152 | 4937 | fjp | k++; |
153 | } else if (geom.getGeometryType()==(FShape.POINT | FShape.Z)) { |
||
154 | dxf3DFile = true;
|
||
155 | 12451 | caballero | createPoint3D(handle, k, geom, values); |
156 | 4937 | fjp | k++; |
157 | } else if (geom.getGeometryType()==FShape.LINE) { |
||
158 | 12451 | caballero | createLwPolyline2D(handle, k, geom, false,values);
|
159 | 4937 | fjp | k++; |
160 | } else if (geom.getGeometryType()==(FShape.LINE | FShape.Z)) { |
||
161 | dxf3DFile = true;
|
||
162 | 12451 | caballero | k = createPolyline3D(handle, k, geom, values); |
163 | 4937 | fjp | } else if (geom.getGeometryType()==FShape.POLYGON) { |
164 | 5136 | fjp | // createPolygon2D(handle, k, geom);
|
165 | 12451 | caballero | createLwPolyline2D(handle, k, geom, true,values);
|
166 | 4937 | fjp | k++; |
167 | } else if (geom.getGeometryType()==(FShape.POLYGON | FShape.Z)) { |
||
168 | dxf3DFile = true;
|
||
169 | 12451 | caballero | k = createPolyline3D(handle, k, geom, values); |
170 | 5136 | fjp | // k = createPolygon3D(handle, k, geom);
|
171 | 5008 | fjp | } else if (geom.getGeometryType()==FShape.CIRCLE) { |
172 | FCircle2D circle = (FCircle2D) geom.getInternalShape(); |
||
173 | 12451 | caballero | createCircle2D(handle, k, circle, values); |
174 | 5008 | fjp | k++; |
175 | 5126 | fjp | } else if (geom.getGeometryType()==FShape.ARC) { |
176 | FArc2D arc = (FArc2D) geom.getInternalShape(); |
||
177 | 12451 | caballero | createArc2D(arc, values); |
178 | 5126 | fjp | k++; |
179 | } else if (geom.getGeometryType()==FShape.ELLIPSE) { |
||
180 | FEllipse2D ellipse = (FEllipse2D) geom.getInternalShape(); |
||
181 | 12451 | caballero | createEllipse2D(ellipse, values); |
182 | 5126 | fjp | k++; |
183 | /* } else if (geom instanceof FGeometryCollection) {
|
||
184 | // System.out.println("Polil?nea encontrada (Soluci?n
|
||
185 | // provisional).");
|
||
186 | FGeometryCollection gc = (FGeometryCollection)geom;
|
||
187 | IGeometry[] geoms = gc.getGeometries();
|
||
188 | // double[] lineCoords = new double[6];
|
||
189 | // GeneralPathXIterator polylineIt =
|
||
190 | // geoms[i].getGeneralPathXIterator();
|
||
191 | DxfGroupVector plv = new DxfGroupVector();
|
||
192 | DxfGroup polylineLayer = new DxfGroup(8, "default");
|
||
193 | DxfGroup vNum = new DxfGroup();
|
||
194 | vNum.setCode(90);
|
||
195 | vNum.setData(new Integer(fShapes.length+1));
|
||
196 | plv.add(polylineLayer);
|
||
197 | plv.add(vNum);
|
||
198 | Point2D first = new Point2D.Double();
|
||
199 | Point2D last = new Point2D.Double();
|
||
200 | for (int j=0;j<geoms.length;j++) {
|
||
201 | if (geom.getInternalShape() instanceof FPolyline2D && !(geom.getInternalShape() instanceof FArc2D)) {
|
||
202 | // System.out.println("L?nea encontrada dentro de la
|
||
203 | // polil?nea.");
|
||
204 | FPolyline2D fLine = (FPolyline2D)geom.getInternalShape();
|
||
205 | double[] lineCoords = new double[6];
|
||
206 | PathIterator lineIt = fLine.getPathIterator(new AffineTransform());
|
||
207 | int k = 0;
|
||
208 | Point2D[] pts = new Point2D[2];
|
||
209 | while (!lineIt.isDone()) {
|
||
210 | int type = lineIt.currentSegment(lineCoords);
|
||
211 | pts[k] = new Point2D.Double(lineCoords[0], lineCoords[1]);
|
||
212 | k++;
|
||
213 | lineIt.next();
|
||
214 | }
|
||
215 | DxfGroup vx = new DxfGroup();
|
||
216 | DxfGroup vy = new DxfGroup();
|
||
217 | vx.setCode(10);
|
||
218 | vx.setData(new Double(pts[0].getX()));
|
||
219 | vy.setCode(20);
|
||
220 | vy.setData(new Double(pts[0].getY()));
|
||
221 | plv.add(vx);
|
||
222 | plv.add(vy);
|
||
223 | if (j==0) {
|
||
224 | first = new Point2D.Double(pts[0].getX(), pts[0].getY());
|
||
225 | }
|
||
226 | if (j==fShapes.length-1) {
|
||
227 | last = new Point2D.Double(pts[1].getX(), pts[1].getY());
|
||
228 | if (first.getX()==last.getX() && first.getY()==last.getY()) {
|
||
229 | // Polil?nea cerrada.
|
||
230 | } else {
|
||
231 | DxfGroup vxf = new DxfGroup();
|
||
232 | DxfGroup vyf = new DxfGroup();
|
||
233 | vxf.setCode(10);
|
||
234 | vxf.setData(new Double(pts[1].getX()));
|
||
235 | vyf.setCode(20);
|
||
236 | vyf.setData(new Double(pts[1].getY()));
|
||
237 | plv.add(vxf);
|
||
238 | plv.add(vyf);
|
||
239 | }
|
||
240 | }
|
||
241 | } else if (fShapes[j] instanceof FArc2D) {
|
||
242 | // System.out.println("Arco encontrada dentro de la
|
||
243 | // polil?nea.");
|
||
244 | FArc2D fArc = (FArc2D)fShapes[j];
|
||
245 | double[] lineCoords = new double[6];
|
||
246 | Point2D[] pts = new Point2D[3];
|
||
247 | pts[0] = fArc.getInit();
|
||
248 | pts[1] = fArc.getMid();
|
||
249 | pts[2] = fArc.getEnd();
|
||
250 | Point2D center = fArc.getCenter(); // TrigonometricalFunctions.getCenter(pts[0],
|
||
251 | // pts[1], pts[2]);
|
||
252 | // System.out.println("pts[0] = " + pts[0]);
|
||
253 | // System.out.println("pts[1] = " + pts[1]);
|
||
254 | // System.out.println("center = " + center);
|
||
255 | // System.out.println("pts[2] = " + pts[2]);
|
||
256 | double initAngRad = TrigonometricalFunctions.getAngle(center, pts[0]);
|
||
257 | double endAngRad = TrigonometricalFunctions.getAngle(center, pts[2]);
|
||
258 | double angleRad = endAngRad-initAngRad;
|
||
259 | if (angleRad<0) angleRad = angleRad+2*Math.PI;
|
||
260 | //
|
||
261 | // boolean bulgeIsNegative = true;
|
||
262 | double bulge = 0;
|
||
263 | if (TrigonometricalFunctions.isCCW(pts[0], pts[1], pts[2])) {
|
||
264 | double angleRad2 = angleRad/4.0;
|
||
265 | bulge = Math.tan(angleRad2);
|
||
266 | } else {
|
||
267 | angleRad = 2*Math.PI-angleRad;
|
||
268 | double angleRad2 = angleRad/4.0;
|
||
269 | bulge = -1*Math.tan(angleRad2);
|
||
270 | }
|
||
271 | DxfGroup vx = new DxfGroup();
|
||
272 | DxfGroup vy = new DxfGroup();
|
||
273 | DxfGroup vb = new DxfGroup();
|
||
274 | vx.setCode(10);
|
||
275 | vx.setData(new Double(pts[0].getX()));
|
||
276 | vy.setCode(20);
|
||
277 | vy.setData(new Double(pts[0].getY()));
|
||
278 | vb.setCode(42);
|
||
279 | vb.setData(new Double(bulge));
|
||
280 | plv.add(vx);
|
||
281 | plv.add(vy);
|
||
282 | plv.add(vb);
|
||
283 | if (j==0) {
|
||
284 | first = new Point2D.Double(pts[0].getX(), pts[0].getY());
|
||
285 | }
|
||
286 | if (j==fShapes.length-1) {
|
||
287 | last = new Point2D.Double(pts[2].getX(), pts[2].getY());
|
||
288 | if (first.getX()==last.getX() && first.getY()==last.getY()) {
|
||
289 | // Polil?nea cerrada.
|
||
290 | } else {
|
||
291 | DxfGroup vxf = new DxfGroup();
|
||
292 | DxfGroup vyf = new DxfGroup();
|
||
293 | vxf.setCode(10);
|
||
294 | vxf.setData(new Double(pts[2].getX()));
|
||
295 | vyf.setCode(20);
|
||
296 | vyf.setData(new Double(pts[2].getY()));
|
||
297 | plv.add(vxf);
|
||
298 | plv.add(vyf);
|
||
299 | }
|
||
300 | 5389 | caballero | }
|
301 | 5126 | fjp | }
|
302 | } */
|
||
303 | 4937 | fjp | } else {
|
304 | System.out.println("IGeometry not supported yet"); |
||
305 | k++; |
||
306 | } |
||
307 | } |
||
308 | catch(Exception e) |
||
309 | { |
||
310 | throw new EditionException(e); |
||
311 | } |
||
312 | |||
313 | 5389 | caballero | |
314 | 12451 | caballero | } |
315 | private void createArc2D(FArc2D fArc,Value[] values) throws Exception { |
||
316 | 5126 | fjp | Point2D[] pts = new Point2D[3]; |
317 | pts[0] = fArc.getInit();
|
||
318 | pts[1] = fArc.getMid();
|
||
319 | pts[2] = fArc.getEnd();
|
||
320 | Point2D center = fArc.getCenter();
|
||
321 | double radius = center.distance(pts[0]); |
||
322 | double initAngle = UtilFunctions.getAngle(center, pts[0]); |
||
323 | initAngle = Math.toDegrees(initAngle);
|
||
324 | // System.out.println("initAngle = " + initAngle);
|
||
325 | double midAngle = UtilFunctions.getAngle(center, pts[1]); |
||
326 | midAngle = Math.toDegrees(midAngle);
|
||
327 | // System.out.println("midAngle = " + midAngle);
|
||
328 | double endAngle = UtilFunctions.getAngle(center, pts[2]); |
||
329 | endAngle = Math.toDegrees(endAngle);
|
||
330 | // System.out.println("endAngle = " + endAngle);
|
||
331 | |||
332 | // 050307, jmorell: Resoluci?n de un bug sobre el sentido de
|
||
333 | // los arcos.
|
||
334 | 12451 | caballero | |
335 | 5404 | fjp | // if (!UtilFunctions.isCCW(pts[0],pts[1],pts[2])){
|
336 | if (!FConverter.isCCW(pts)){
|
||
337 | double aux=initAngle;
|
||
338 | initAngle=endAngle; |
||
339 | endAngle=aux; |
||
340 | } |
||
341 | 5126 | fjp | |
342 | 12451 | caballero | |
343 | 5126 | fjp | /*
|
344 | * FArc2D arc = (FArc2D)(shapes[0]); Point2D center = arc.getCenter();
|
||
345 | * Point2D init = arc.getInit(); Point2D end = arc.getEnd(); // C?lculo
|
||
346 | * del radio: double radius =
|
||
347 | * Math.sqrt(Math.pow(init.getX()-center.getX(),2)+Math.pow(init.getY()-center.getY(),2)); //
|
||
348 | * double initAngle=TrigonometricalFunctions.getAngle(center, init);
|
||
349 | * initAngle = Math.toDegrees(initAngle); double
|
||
350 | * endAngle=TrigonometricalFunctions.getAngle(center, end); endAngle =
|
||
351 | * Math.toDegrees(endAngle);
|
||
352 | */
|
||
353 | 12451 | caballero | // DxfGroup arcLayer = new DxfGroup(8, "default");
|
354 | 5126 | fjp | DxfGroup ax = new DxfGroup();
|
355 | DxfGroup ay = new DxfGroup();
|
||
356 | DxfGroup ac = new DxfGroup();
|
||
357 | DxfGroup ai = new DxfGroup();
|
||
358 | DxfGroup ae = new DxfGroup();
|
||
359 | ax.setCode(10);
|
||
360 | ax.setData(new Double(center.getX())); |
||
361 | ay.setCode(20);
|
||
362 | ay.setData(new Double(center.getY())); |
||
363 | ac.setCode(40);
|
||
364 | ac.setData(new Double(radius)); |
||
365 | ai.setCode(50);
|
||
366 | ai.setData(new Double(initAngle)); |
||
367 | ae.setCode(51);
|
||
368 | ae.setData(new Double(endAngle)); |
||
369 | 12451 | caballero | DxfGroupVector av = updateProperties(values); |
370 | // av.add(arcLayer);
|
||
371 | 5126 | fjp | av.add(ax); |
372 | av.add(ay); |
||
373 | av.add(ac); |
||
374 | av.add(ai); |
||
375 | av.add(ae); |
||
376 | entityMaker.createArc(av); |
||
377 | |||
378 | 4937 | fjp | } |
379 | |||
380 | 12451 | caballero | private void createCircle2D(int handle, int k2, FCircle2D geom,Value[] values) |
381 | 5126 | fjp | throws Exception { |
382 | 12451 | caballero | DxfGroupVector polv = updateProperties(values); |
383 | // DxfGroup polylineLayer = new DxfGroup(8, "default");
|
||
384 | // polv.add(polylineLayer);
|
||
385 | // DxfGroup handleGroup = new DxfGroup();
|
||
386 | // handleGroup.setCode(5);
|
||
387 | // handleGroup.setData(new Integer(handle + k).toString());
|
||
388 | // polv.add(handleGroup);
|
||
389 | 5008 | fjp | DxfGroup circleFlag = new DxfGroup();
|
390 | circleFlag.setCode(100);
|
||
391 | polv.add(circleFlag); |
||
392 | |||
393 | 5126 | fjp | DxfGroup xvertex = new DxfGroup();
|
394 | xvertex.setCode(10);
|
||
395 | xvertex.setData(new Double(geom.getCenter().getX())); |
||
396 | DxfGroup yvertex = new DxfGroup();
|
||
397 | yvertex.setCode(20);
|
||
398 | yvertex.setData(new Double(geom.getCenter().getY())); |
||
399 | DxfGroup zvertex = new DxfGroup();
|
||
400 | zvertex.setCode(30);
|
||
401 | zvertex.setData(new Double(0)); // TODO: COORDENADA Z. REVISAR ESTO PARA |
||
402 | // ENTIDADES 3D
|
||
403 | |||
404 | DxfGroup radius = new DxfGroup();
|
||
405 | radius.setCode(40);
|
||
406 | radius.setData(new Double(geom.getRadio())); |
||
407 | |||
408 | polv.add(xvertex); |
||
409 | polv.add(yvertex); |
||
410 | polv.add(zvertex); |
||
411 | polv.add(radius); |
||
412 | |||
413 | 5008 | fjp | entityMaker.createCircle(polv); |
414 | 5126 | fjp | |
415 | 5008 | fjp | } |
416 | |||
417 | 12451 | caballero | private void createEllipse2D(FEllipse2D fElip, Value[] values) throws Exception { |
418 | 5126 | fjp | Point2D center = new Point2D.Double((fElip.getInit().getX() + fElip |
419 | .getEnd().getX()) / 2, (fElip.getInit().getY() + fElip.getEnd()
|
||
420 | .getY()) / 2);
|
||
421 | double mAxisL = fElip.getDist() * 2; |
||
422 | // System.out.println("mAxisL = " + mAxisL);
|
||
423 | /*
|
||
424 | * System.out.println("mAxisL/(center.distance(fElip.getEnd()))*2 = " +
|
||
425 | * mAxisL/(center.distance(fElip.getEnd()))*2); minToMaj.setData(new
|
||
426 | * Double(mAxisL/()*2));
|
||
427 | */
|
||
428 | double maAxisL = fElip.getInit().distance(fElip.getEnd());
|
||
429 | 5008 | fjp | |
430 | 5126 | fjp | Point2D endPointOfMajorAxis = fElip.getEnd();
|
431 | double azimut = Math.atan2(endPointOfMajorAxis.getX() - center.getX(), |
||
432 | endPointOfMajorAxis.getY() - center.getY()); |
||
433 | double azimut2 = azimut + Math.PI / 2.0; |
||
434 | if (azimut2 >= Math.PI * 2) |
||
435 | azimut2 = azimut2 - Math.PI * 2; |
||
436 | Point2D endPointOfMinorAxis = new Point2D.Double(center.getX() |
||
437 | + (fElip.getDist() * Math.sin(azimut2)), center.getY()
|
||
438 | + (fElip.getDist() * Math.cos(azimut2)));
|
||
439 | |||
440 | if (mAxisL >= maAxisL) {
|
||
441 | // El menor debe ser menor que el mayor. Los cambiamos.
|
||
442 | double aux = mAxisL;
|
||
443 | mAxisL = maAxisL; |
||
444 | maAxisL = aux; |
||
445 | // Tambi?n cambiamos los puntos finales de los ejes.
|
||
446 | Point2D pAux = endPointOfMinorAxis;
|
||
447 | endPointOfMinorAxis = endPointOfMajorAxis; |
||
448 | endPointOfMajorAxis = pAux; |
||
449 | } |
||
450 | double mToMAR = mAxisL / maAxisL;
|
||
451 | // System.out.println("mToMar = " + mToMAR);
|
||
452 | 12451 | caballero | // DxfGroup arcLayer = new DxfGroup(8, "default");
|
453 | 5126 | fjp | DxfGroup x = new DxfGroup();
|
454 | DxfGroup y = new DxfGroup();
|
||
455 | DxfGroup xc = new DxfGroup();
|
||
456 | DxfGroup yc = new DxfGroup();
|
||
457 | DxfGroup minToMaj = new DxfGroup();
|
||
458 | // DxfGroup start = new DxfGroup();
|
||
459 | // DxfGroup end = new DxfGroup();
|
||
460 | x.setCode(10);
|
||
461 | x.setData(new Double(center.getX())); |
||
462 | y.setCode(20);
|
||
463 | y.setData(new Double(center.getY())); |
||
464 | xc.setCode(11);
|
||
465 | xc.setData(new Double(endPointOfMajorAxis.getX() - center.getX())); |
||
466 | yc.setCode(21);
|
||
467 | yc.setData(new Double(endPointOfMajorAxis.getY() - center.getY())); |
||
468 | minToMaj.setCode(40);
|
||
469 | minToMaj.setData(new Double(mToMAR)); |
||
470 | 12451 | caballero | DxfGroupVector av = updateProperties(values); |
471 | // av.add(arcLayer);
|
||
472 | 5126 | fjp | av.add(x); |
473 | av.add(y); |
||
474 | av.add(xc); |
||
475 | av.add(yc); |
||
476 | av.add(minToMaj); |
||
477 | entityMaker.createEllipse(av); |
||
478 | } |
||
479 | |||
480 | 4937 | fjp | public void postProcess() throws EditionException { |
481 | // Escribimos realmente lo que hemos montado en memoria.
|
||
482 | 5126 | fjp | dxfFile = new DxfFile(null, file.getAbsolutePath(), entityMaker); |
483 | dxfFile.setCadFlag(true);
|
||
484 | if (dxf3DFile)
|
||
485 | dxfFile.setDxf3DFlag(true);
|
||
486 | try {
|
||
487 | 4937 | fjp | dxfFile.save(file.getAbsolutePath()); |
488 | } catch (IOException e) { |
||
489 | e.printStackTrace(); |
||
490 | throw new EditionException(e); |
||
491 | } |
||
492 | 5126 | fjp | |
493 | 4937 | fjp | } |
494 | |||
495 | public String getName() { |
||
496 | return "DXF Writer"; |
||
497 | } |
||
498 | |||
499 | /**
|
||
500 | * @return Returns the fieldMapping.
|
||
501 | */
|
||
502 | public DxfFieldsMapping getFieldMapping() {
|
||
503 | return fieldMapping;
|
||
504 | } |
||
505 | |||
506 | /**
|
||
507 | * Use this method BEFORE preProcess.
|
||
508 | 5389 | caballero | *
|
509 | 5126 | fjp | * @param fieldMapping
|
510 | * The fieldMapping to set.
|
||
511 | 4937 | fjp | */
|
512 | public void setFieldMapping(DxfFieldsMapping fieldMapping) { |
||
513 | this.fieldMapping = fieldMapping;
|
||
514 | } |
||
515 | |||
516 | 5126 | fjp | public void write(IGeometry[] geometries, File file) throws Exception { |
517 | int handle = 40; // Revisar porqu? es 40. |
||
518 | int k = 0; |
||
519 | boolean dxf3DFile = false; |
||
520 | for (int i = 0; i < geometries.length; i++) { |
||
521 | IGeometry geom = geometries[i]; |
||
522 | if (geom.getGeometryType() == FShape.POINT) {
|
||
523 | 12451 | caballero | createPoint2D(handle, k, geom, null);
|
524 | 5126 | fjp | k++; |
525 | } else if (geom.getGeometryType() == (FShape.POINT | FShape.Z)) { |
||
526 | dxf3DFile = true;
|
||
527 | 12451 | caballero | createPoint3D(handle, k, geom, null);
|
528 | 5126 | fjp | k++; |
529 | } else if (geom.getGeometryType() == FShape.LINE) { |
||
530 | 12451 | caballero | createLwPolyline2D(handle, k, geom, false, null); |
531 | 5126 | fjp | k++; |
532 | } else if (geom.getGeometryType() == (FShape.LINE | FShape.Z)) { |
||
533 | dxf3DFile = true;
|
||
534 | 12451 | caballero | k = createPolyline3D(handle, k, geom, null);
|
535 | 5126 | fjp | } else if (geom.getGeometryType() == FShape.POLYGON) { |
536 | 5136 | fjp | // createPolygon2D(handle, k, geom);
|
537 | 12451 | caballero | createLwPolyline2D(handle, k, geom, true,null); |
538 | 5126 | fjp | k++; |
539 | } else if (geom.getGeometryType() == (FShape.POLYGON | FShape.Z)) { |
||
540 | dxf3DFile = true;
|
||
541 | 12451 | caballero | k = createPolygon3D(handle, k, geom, null);
|
542 | 5126 | fjp | } else {
|
543 | System.out.println("IGeometry not supported yet"); |
||
544 | k++; |
||
545 | } |
||
546 | } |
||
547 | dxfFile = new DxfFile(null, file.getAbsolutePath(), entityMaker); |
||
548 | dxfFile.setCadFlag(true);
|
||
549 | if (dxf3DFile)
|
||
550 | dxfFile.setDxf3DFlag(true);
|
||
551 | dxfFile.save(file.getAbsolutePath()); |
||
552 | } |
||
553 | 4937 | fjp | |
554 | /**
|
||
555 | * @param handle
|
||
556 | * @param k
|
||
557 | * @param geom
|
||
558 | * @return
|
||
559 | * @throws Exception
|
||
560 | */
|
||
561 | 12451 | caballero | private int createPolygon3D(int handle, int k, IGeometry geom, Value[] values) |
562 | 5126 | fjp | throws Exception { |
563 | 12451 | caballero | DxfGroupVector polv = updateProperties(values); |
564 | // DxfGroup polylineLayer = new DxfGroup(8, "default");
|
||
565 | // polv.add(polylineLayer);
|
||
566 | // DxfGroup handleGroup = new DxfGroup();
|
||
567 | // handleGroup.setCode(5);
|
||
568 | // handleGroup.setData(new Integer(handle + k).toString());
|
||
569 | // polv.add(handleGroup);
|
||
570 | 4937 | fjp | Vector vpoints = new Vector(); |
571 | 5126 | fjp | PathIterator theIterator = geom.getPathIterator(null); // polyLine.getPathIterator(null, |
572 | // flatness);
|
||
573 | 4937 | fjp | double[] theData = new double[6]; |
574 | 5126 | fjp | double[] velev = ((FGeometry) geom).getZs(); |
575 | 4937 | fjp | while (!theIterator.isDone()) {
|
576 | 5126 | fjp | int theType = theIterator.currentSegment(theData);
|
577 | switch (theType) {
|
||
578 | case PathIterator.SEG_MOVETO: |
||
579 | vpoints.add(new FPoint2D(theData[0], theData[1])); |
||
580 | break;
|
||
581 | case PathIterator.SEG_LINETO: |
||
582 | vpoints.add(new FPoint2D(theData[0], theData[1])); |
||
583 | break;
|
||
584 | } |
||
585 | theIterator.next(); |
||
586 | 4937 | fjp | } |
587 | if (constantElevation(velev)) {
|
||
588 | 5126 | fjp | DxfGroup polylineFlag = new DxfGroup();
|
589 | polylineFlag.setCode(70);
|
||
590 | polylineFlag.setData(new Integer(1)); |
||
591 | polv.add(polylineFlag); |
||
592 | DxfGroup elevation = new DxfGroup();
|
||
593 | elevation.setCode(38);
|
||
594 | elevation.setData(new Double(velev[0])); |
||
595 | polv.add(elevation); |
||
596 | for (int j = 0; j < vpoints.size(); j++) { |
||
597 | DxfGroup xvertex = new DxfGroup();
|
||
598 | xvertex.setCode(10);
|
||
599 | xvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getX())); |
||
600 | DxfGroup yvertex = new DxfGroup();
|
||
601 | yvertex.setCode(20);
|
||
602 | yvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getY())); |
||
603 | polv.add(xvertex); |
||
604 | polv.add(yvertex); |
||
605 | } |
||
606 | entityMaker.createLwPolyline(polv); |
||
607 | k++; |
||
608 | 4937 | fjp | } else {
|
609 | 5126 | fjp | DxfGroup polylineFlag = new DxfGroup();
|
610 | polylineFlag.setCode(70);
|
||
611 | polylineFlag.setData(new Integer(9)); |
||
612 | polv.add(polylineFlag); |
||
613 | DxfGroup xgroup = new DxfGroup();
|
||
614 | xgroup.setCode(10);
|
||
615 | xgroup.setData(new Double(0.0)); |
||
616 | polv.add(xgroup); |
||
617 | DxfGroup ygroup = new DxfGroup();
|
||
618 | ygroup.setCode(20);
|
||
619 | ygroup.setData(new Double(0.0)); |
||
620 | polv.add(ygroup); |
||
621 | DxfGroup elevation = new DxfGroup();
|
||
622 | elevation.setCode(30);
|
||
623 | elevation.setData(new Double(0.0)); |
||
624 | polv.add(elevation); |
||
625 | DxfGroup subclassMarker = new DxfGroup(100, "AcDb3dPolyline"); |
||
626 | polv.add(subclassMarker); |
||
627 | entityMaker.createPolyline(polv); |
||
628 | k++; |
||
629 | for (int j = 0; j < vpoints.size(); j++) { |
||
630 | DxfGroupVector verv = new DxfGroupVector();
|
||
631 | DxfGroup entityType = new DxfGroup(0, "VERTEX"); |
||
632 | verv.add(entityType); |
||
633 | DxfGroup generalSubclassMarker = new DxfGroup(100, "AcDbEntity"); |
||
634 | verv.add(generalSubclassMarker); |
||
635 | DxfGroup layerName = new DxfGroup(8, "default"); |
||
636 | verv.add(layerName); |
||
637 | DxfGroup vertexSubclassMarker = new DxfGroup(100, "AcDbVertex"); |
||
638 | verv.add(vertexSubclassMarker); |
||
639 | // DxfGroup vertex3DSubclassMarker = new DxfGroup(100,
|
||
640 | // "AcDb3dPolylineVertex");
|
||
641 | // verv.add(vertex3DSubclassMarker);
|
||
642 | DxfGroup xvertex = new DxfGroup();
|
||
643 | xvertex.setCode(10);
|
||
644 | xvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getX())); |
||
645 | DxfGroup yvertex = new DxfGroup();
|
||
646 | yvertex.setCode(20);
|
||
647 | yvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getY())); |
||
648 | DxfGroup zvertex = new DxfGroup();
|
||
649 | zvertex.setCode(30);
|
||
650 | zvertex.setData(new Double(velev[j])); |
||
651 | verv.add(xvertex); |
||
652 | verv.add(yvertex); |
||
653 | verv.add(zvertex); |
||
654 | entityMaker.addVertex(verv); |
||
655 | k++; |
||
656 | } |
||
657 | DxfGroupVector seqv = new DxfGroupVector();
|
||
658 | DxfGroup entityType = new DxfGroup(0, "SEQEND"); |
||
659 | seqv.add(entityType); |
||
660 | // DxfGroup handle = new DxfGroup();
|
||
661 | // elevation.setCode(5);
|
||
662 | // elevation.setData(new Integer(getHandle()));
|
||
663 | // seqv.add(handle);
|
||
664 | DxfGroup generalSubclassMarker = new DxfGroup(100, "AcDbEntity"); |
||
665 | seqv.add(generalSubclassMarker); |
||
666 | DxfGroup layerName = new DxfGroup(8, "default"); |
||
667 | seqv.add(layerName); |
||
668 | DxfGroup handleSeqGroup = new DxfGroup();
|
||
669 | handleSeqGroup.setCode(5);
|
||
670 | handleSeqGroup.setData(new Integer(handle + k).toString()); |
||
671 | seqv.add(handleSeqGroup); |
||
672 | entityMaker.endSeq(); |
||
673 | k++; |
||
674 | 4937 | fjp | } |
675 | return k;
|
||
676 | } |
||
677 | |||
678 | /**
|
||
679 | 5136 | fjp | * @deprecated
|
680 | 4937 | fjp | * @param handle
|
681 | * @param k
|
||
682 | * @param geom
|
||
683 | * @throws Exception
|
||
684 | */
|
||
685 | 12451 | caballero | private void createPolygon2D(int handle, int k, IGeometry geom,Value[] values) |
686 | 5126 | fjp | throws Exception { |
687 | 12451 | caballero | DxfGroupVector polv = updateProperties(values); |
688 | // DxfGroup polylineLayer = new DxfGroup(8, "default");
|
||
689 | // polv.add(polylineLayer);
|
||
690 | // DxfGroup handleGroup = new DxfGroup();
|
||
691 | // handleGroup.setCode(5);
|
||
692 | // handleGroup.setData(new Integer(handle + k).toString());
|
||
693 | // polv.add(handleGroup);
|
||
694 | 4937 | fjp | DxfGroup polylineFlag = new DxfGroup();
|
695 | polylineFlag.setCode(70);
|
||
696 | polylineFlag.setData(new Integer(1)); |
||
697 | polv.add(polylineFlag); |
||
698 | 5126 | fjp | |
699 | 4937 | fjp | Vector vpoints = new Vector(); |
700 | 5126 | fjp | PathIterator theIterator = geom.getPathIterator(null); // polyLine.getPathIterator(null, |
701 | // flatness);
|
||
702 | 4937 | fjp | double[] theData = new double[6]; |
703 | while (!theIterator.isDone()) {
|
||
704 | 5126 | fjp | int theType = theIterator.currentSegment(theData);
|
705 | switch (theType) {
|
||
706 | case PathIterator.SEG_MOVETO: |
||
707 | vpoints.add(new FPoint2D(theData[0], theData[1])); |
||
708 | break;
|
||
709 | case PathIterator.SEG_LINETO: |
||
710 | vpoints.add(new FPoint2D(theData[0], theData[1])); |
||
711 | break;
|
||
712 | } |
||
713 | theIterator.next(); |
||
714 | 4937 | fjp | } |
715 | 5126 | fjp | for (int j = 0; j < vpoints.size(); j++) { |
716 | DxfGroup xvertex = new DxfGroup();
|
||
717 | xvertex.setCode(10);
|
||
718 | xvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getX())); |
||
719 | DxfGroup yvertex = new DxfGroup();
|
||
720 | yvertex.setCode(20);
|
||
721 | yvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getY())); |
||
722 | polv.add(xvertex); |
||
723 | polv.add(yvertex); |
||
724 | } |
||
725 | 4937 | fjp | entityMaker.createLwPolyline(polv); |
726 | } |
||
727 | |||
728 | /**
|
||
729 | * @param handle
|
||
730 | * @param k
|
||
731 | * @param geom
|
||
732 | * @return
|
||
733 | * @throws Exception
|
||
734 | */
|
||
735 | 12451 | caballero | private int createPolyline3D(int handle, int k, IGeometry geom, Value[] values) |
736 | 5126 | fjp | throws Exception { |
737 | 12451 | caballero | DxfGroupVector polv = updateProperties(values); |
738 | // DxfGroup polylineLayer = new DxfGroup(8, "default");
|
||
739 | // polv.add(polylineLayer);
|
||
740 | // DxfGroup handleGroup = new DxfGroup();
|
||
741 | // handleGroup.setCode(5);
|
||
742 | // handleGroup.setData(new Integer(handle + k).toString());
|
||
743 | // polv.add(handleGroup);
|
||
744 | 4937 | fjp | Vector vpoints = new Vector(); |
745 | 5126 | fjp | PathIterator theIterator = geom.getPathIterator(null); // polyLine.getPathIterator(null, |
746 | // flatness);
|
||
747 | 4937 | fjp | double[] theData = new double[6]; |
748 | 5126 | fjp | double[] velev = ((FGeometry) geom).getZs(); |
749 | 4937 | fjp | while (!theIterator.isDone()) {
|
750 | 5126 | fjp | int theType = theIterator.currentSegment(theData);
|
751 | switch (theType) {
|
||
752 | case PathIterator.SEG_MOVETO: |
||
753 | vpoints.add(new FPoint2D(theData[0], theData[1])); |
||
754 | break;
|
||
755 | case PathIterator.SEG_LINETO: |
||
756 | vpoints.add(new FPoint2D(theData[0], theData[1])); |
||
757 | break;
|
||
758 | } |
||
759 | theIterator.next(); |
||
760 | 4937 | fjp | } |
761 | if (constantElevation(velev)) {
|
||
762 | 5126 | fjp | DxfGroup polylineFlag = new DxfGroup();
|
763 | polylineFlag.setCode(70);
|
||
764 | polylineFlag.setData(new Integer(0)); |
||
765 | polv.add(polylineFlag); |
||
766 | DxfGroup elevation = new DxfGroup();
|
||
767 | elevation.setCode(38);
|
||
768 | elevation.setData(new Double(velev[0])); |
||
769 | polv.add(elevation); |
||
770 | for (int j = 0; j < vpoints.size(); j++) { |
||
771 | DxfGroup xvertex = new DxfGroup();
|
||
772 | xvertex.setCode(10);
|
||
773 | xvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getX())); |
||
774 | DxfGroup yvertex = new DxfGroup();
|
||
775 | yvertex.setCode(20);
|
||
776 | yvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getY())); |
||
777 | polv.add(xvertex); |
||
778 | polv.add(yvertex); |
||
779 | } |
||
780 | entityMaker.createLwPolyline(polv); |
||
781 | k++; |
||
782 | 4937 | fjp | } else {
|
783 | 5126 | fjp | DxfGroup polylineFlag = new DxfGroup();
|
784 | polylineFlag.setCode(70);
|
||
785 | polylineFlag.setData(new Integer(8)); |
||
786 | polv.add(polylineFlag); |
||
787 | DxfGroup xgroup = new DxfGroup();
|
||
788 | xgroup.setCode(10);
|
||
789 | xgroup.setData(new Double(0.0)); |
||
790 | polv.add(xgroup); |
||
791 | DxfGroup ygroup = new DxfGroup();
|
||
792 | ygroup.setCode(20);
|
||
793 | ygroup.setData(new Double(0.0)); |
||
794 | polv.add(ygroup); |
||
795 | DxfGroup elevation = new DxfGroup();
|
||
796 | elevation.setCode(30);
|
||
797 | elevation.setData(new Double(0.0)); |
||
798 | polv.add(elevation); |
||
799 | DxfGroup subclassMarker = new DxfGroup(100, "AcDb3dPolyline"); |
||
800 | polv.add(subclassMarker); |
||
801 | entityMaker.createPolyline(polv); |
||
802 | k++; |
||
803 | for (int j = 0; j < vpoints.size(); j++) { |
||
804 | DxfGroupVector verv = new DxfGroupVector();
|
||
805 | DxfGroup entityType = new DxfGroup(0, "VERTEX"); |
||
806 | verv.add(entityType); |
||
807 | DxfGroup generalSubclassMarker = new DxfGroup(100, "AcDbEntity"); |
||
808 | verv.add(generalSubclassMarker); |
||
809 | DxfGroup layerName = new DxfGroup(8, "default"); |
||
810 | verv.add(layerName); |
||
811 | DxfGroup vertexSubclassMarker = new DxfGroup(100, "AcDbVertex"); |
||
812 | verv.add(vertexSubclassMarker); |
||
813 | // DxfGroup vertex3DSubclassMarker = new DxfGroup(100,
|
||
814 | // "AcDb3dPolylineVertex");
|
||
815 | // verv.add(vertex3DSubclassMarker);
|
||
816 | DxfGroup xvertex = new DxfGroup();
|
||
817 | xvertex.setCode(10);
|
||
818 | xvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getX())); |
||
819 | DxfGroup yvertex = new DxfGroup();
|
||
820 | yvertex.setCode(20);
|
||
821 | yvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getY())); |
||
822 | DxfGroup zvertex = new DxfGroup();
|
||
823 | zvertex.setCode(30);
|
||
824 | zvertex.setData(new Double(velev[j])); |
||
825 | verv.add(xvertex); |
||
826 | verv.add(yvertex); |
||
827 | verv.add(zvertex); |
||
828 | entityMaker.addVertex(verv); |
||
829 | k++; |
||
830 | } |
||
831 | DxfGroupVector seqv = new DxfGroupVector();
|
||
832 | DxfGroup entityType = new DxfGroup(0, "SEQEND"); |
||
833 | seqv.add(entityType); |
||
834 | // DxfGroup handle = new DxfGroup();
|
||
835 | // elevation.setCode(5);
|
||
836 | // elevation.setData(new Integer(getHandle()));
|
||
837 | // seqv.add(handle);
|
||
838 | DxfGroup generalSubclassMarker = new DxfGroup(100, "AcDbEntity"); |
||
839 | seqv.add(generalSubclassMarker); |
||
840 | DxfGroup layerName = new DxfGroup(8, "default"); |
||
841 | seqv.add(layerName); |
||
842 | DxfGroup handleSeqGroup = new DxfGroup();
|
||
843 | handleSeqGroup.setCode(5);
|
||
844 | handleSeqGroup.setData(new Integer(handle + k).toString()); |
||
845 | seqv.add(handleSeqGroup); |
||
846 | entityMaker.endSeq(); |
||
847 | k++; |
||
848 | 4937 | fjp | } |
849 | return k;
|
||
850 | } |
||
851 | |||
852 | 12451 | caballero | private DxfGroupVector updateProperties(Value[] values){ |
853 | DxfGroupVector polv = new DxfGroupVector();
|
||
854 | String layer=DEFAULT_LAYER;
|
||
855 | Integer color=DEFAULT_COLOR;
|
||
856 | // Double elevation=DEFAULT_ELEVATION;
|
||
857 | Double thickness=DEFAULT_THICKNESS;
|
||
858 | if (fieldsDesc.length > 6) { |
||
859 | if (fieldsDesc[3].getFieldName().equals("Layer") && |
||
860 | !(values[3] instanceof NullValue) && |
||
861 | values[3] instanceof StringValue) { |
||
862 | layer = values[3].toString();
|
||
863 | } |
||
864 | if (fieldsDesc[4].getFieldName().equals("Color") |
||
865 | && !(values[4] instanceof NullValue) && |
||
866 | values[4] instanceof IntValue) { |
||
867 | color = new Integer(((NumericValue) values[4]).intValue()); |
||
868 | } |
||
869 | // if (!(values[5] instanceof NullValue)){
|
||
870 | // elevation= new Double(((NumericValue)values[5]).doubleValue());
|
||
871 | // }
|
||
872 | if (fieldsDesc[6].getFieldName().equals("Thickness") && |
||
873 | !(values[6] instanceof NullValue) && |
||
874 | values[6] instanceof DoubleValue) { |
||
875 | thickness = new Double(((NumericValue) values[6]).doubleValue()); |
||
876 | } |
||
877 | } |
||
878 | DxfGroup geometryLayer = new DxfGroup(8, layer); |
||
879 | |||
880 | DxfGroup handleGroup = new DxfGroup();
|
||
881 | handleGroup.setCode(5);
|
||
882 | handleGroup.setData(new Integer(handle + k).toString()); |
||
883 | |||
884 | DxfGroup handleColor = new DxfGroup();
|
||
885 | handleColor.setCode(62);
|
||
886 | handleColor.setData(color); |
||
887 | |||
888 | // DxfGroup handleElevation = new DxfGroup();
|
||
889 | // handleElevation.setCode(38);
|
||
890 | // handleElevation.setData(elevation);
|
||
891 | |||
892 | DxfGroup handleThickness = new DxfGroup();
|
||
893 | handleThickness.setCode(39);
|
||
894 | handleThickness.setData(thickness); |
||
895 | |||
896 | |||
897 | polv.add(geometryLayer); |
||
898 | // polv.add(handleElevation);
|
||
899 | polv.add(handleGroup); |
||
900 | polv.add(handleColor); |
||
901 | return polv;
|
||
902 | } |
||
903 | 4937 | fjp | /**
|
904 | * @param handle
|
||
905 | * @param k
|
||
906 | * @param geom
|
||
907 | * @throws Exception
|
||
908 | */
|
||
909 | 12451 | caballero | private void createLwPolyline2D(int handle, int k, IGeometry geom, boolean isPolygon, Value[] values) |
910 | 5126 | fjp | throws Exception { |
911 | 12451 | caballero | // arrayFields.add("ID");
|
912 | // arrayFields.add("FShape");
|
||
913 | // arrayFields.add("Entity");
|
||
914 | // String layer=DEFAULT_LAYER;
|
||
915 | // Integer color=DEFAULT_COLOR;
|
||
916 | // Double elevation=DEFAULT_ELEVATION;
|
||
917 | // Double thickness=DEFAULT_THICKNESS;
|
||
918 | // if (!(values[3] instanceof NullValue)){
|
||
919 | // layer = values[3].toString();
|
||
920 | // }
|
||
921 | // if (!(values[4] instanceof NullValue)){
|
||
922 | // color = new Integer(((NumericValue)values[4]).intValue());
|
||
923 | // }
|
||
924 | // if (!(values[5] instanceof NullValue)){
|
||
925 | // elevation= new Double(((NumericValue)values[5]).doubleValue());
|
||
926 | // }
|
||
927 | // if (!(values[6] instanceof NullValue)){
|
||
928 | // thickness= new Double(((NumericValue)values[6]).doubleValue());
|
||
929 | // }
|
||
930 | // if (!(values[7] instanceof NullValue)){
|
||
931 | // text = values[7].toString();
|
||
932 | // }
|
||
933 | // String heightText=values[8].toString();
|
||
934 | // String rotationText=values[9].toString();
|
||
935 | |||
936 | |||
937 | 5136 | fjp | DxfGroupVector polv = null;
|
938 | 12451 | caballero | // DxfGroup polylineLayer = new DxfGroup(8, layer);
|
939 | 5389 | caballero | |
940 | 12451 | caballero | // DxfGroup handleGroup = new DxfGroup();
|
941 | // handleGroup.setCode(5);
|
||
942 | // handleGroup.setData(new Integer(handle + k).toString());
|
||
943 | 5389 | caballero | |
944 | 4937 | fjp | Vector vpoints = new Vector(); |
945 | 5389 | caballero | |
946 | 5136 | fjp | DxfGroup polylineFlag = new DxfGroup();
|
947 | polylineFlag.setCode(70);
|
||
948 | if (isPolygon)
|
||
949 | polylineFlag.setData(new Integer(1)); // cerrada |
||
950 | else
|
||
951 | polylineFlag.setData(new Integer(0)); // abierta |
||
952 | 5389 | caballero | |
953 | 12451 | caballero | // DxfGroup handleColor = new DxfGroup();
|
954 | // handleColor.setCode(62);
|
||
955 | // handleColor.setData(color);
|
||
956 | //
|
||
957 | // DxfGroup handleElevation = new DxfGroup();
|
||
958 | // handleElevation.setCode(38);
|
||
959 | // handleElevation.setData(elevation);
|
||
960 | //
|
||
961 | // DxfGroup handleThickness = new DxfGroup();
|
||
962 | // handleThickness.setCode(39);
|
||
963 | // handleThickness.setData(thickness);
|
||
964 | |||
965 | 5126 | fjp | PathIterator theIterator = geom.getPathIterator(null); // polyLine.getPathIterator(null, |
966 | // flatness);
|
||
967 | 5389 | caballero | |
968 | 4937 | fjp | double[] theData = new double[6]; |
969 | while (!theIterator.isDone()) {
|
||
970 | 5126 | fjp | int theType = theIterator.currentSegment(theData);
|
971 | switch (theType) {
|
||
972 | case PathIterator.SEG_MOVETO: |
||
973 | 5136 | fjp | if (polv != null) |
974 | { |
||
975 | for (int j = 0; j < vpoints.size(); j++) { |
||
976 | DxfGroup xvertex = new DxfGroup();
|
||
977 | xvertex.setCode(10);
|
||
978 | xvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getX())); |
||
979 | DxfGroup yvertex = new DxfGroup();
|
||
980 | yvertex.setCode(20);
|
||
981 | yvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getY())); |
||
982 | polv.add(xvertex); |
||
983 | polv.add(yvertex); |
||
984 | 5389 | caballero | } |
985 | entityMaker.createLwPolyline(polv); |
||
986 | 5136 | fjp | } |
987 | 12451 | caballero | polv = updateProperties(values); |
988 | 5136 | fjp | polv.add(polylineFlag); |
989 | vpoints.clear(); |
||
990 | 5126 | fjp | vpoints.add(new FPoint2D(theData[0], theData[1])); |
991 | break;
|
||
992 | case PathIterator.SEG_LINETO: |
||
993 | vpoints.add(new FPoint2D(theData[0], theData[1])); |
||
994 | break;
|
||
995 | 5136 | fjp | case PathIterator.SEG_QUADTO: |
996 | break;
|
||
997 | 5389 | caballero | case PathIterator.SEG_CUBICTO: |
998 | 5136 | fjp | break;
|
999 | case PathIterator.SEG_CLOSE: |
||
1000 | polylineFlag.setData(new Integer(1)); // cerrada |
||
1001 | break;
|
||
1002 | 5389 | caballero | |
1003 | 5126 | fjp | } |
1004 | theIterator.next(); |
||
1005 | } |
||
1006 | 5389 | caballero | |
1007 | 5126 | fjp | for (int j = 0; j < vpoints.size(); j++) { |
1008 | DxfGroup xvertex = new DxfGroup();
|
||
1009 | xvertex.setCode(10);
|
||
1010 | xvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getX())); |
||
1011 | DxfGroup yvertex = new DxfGroup();
|
||
1012 | yvertex.setCode(20);
|
||
1013 | yvertex.setData(new Double(((FPoint2D) vpoints.get(j)).getY())); |
||
1014 | polv.add(xvertex); |
||
1015 | polv.add(yvertex); |
||
1016 | 4937 | fjp | } |
1017 | entityMaker.createLwPolyline(polv); |
||
1018 | } |
||
1019 | |||
1020 | /**
|
||
1021 | * @param handle
|
||
1022 | * @param k
|
||
1023 | * @param geom
|
||
1024 | * @throws Exception
|
||
1025 | */
|
||
1026 | 12451 | caballero | private void createPoint3D(int handle, int k, IGeometry geom, Value[] values) |
1027 | 5126 | fjp | throws Exception { |
1028 | 12451 | caballero | if (!(values[7] instanceof NullValue)){ |
1029 | createText3D(handle,k,geom,values); |
||
1030 | return;
|
||
1031 | } |
||
1032 | 5126 | fjp | FPoint3D point = new FPoint3D(0, 0, 0); |
1033 | 4937 | fjp | double[] pointCoords = new double[6]; |
1034 | PathIterator pointIt = geom.getPathIterator(null); |
||
1035 | while (!pointIt.isDone()) {
|
||
1036 | 5126 | fjp | pointIt.currentSegment(pointCoords); |
1037 | point = new FPoint3D(pointCoords[0], pointCoords[1], pointCoords[2]); |
||
1038 | pointIt.next(); |
||
1039 | 4937 | fjp | } |
1040 | Point3D pto = new Point3D(point.getX(), point.getY(), point.getZs()[0]); |
||
1041 | 12451 | caballero | // DxfGroup pointLayer = new DxfGroup(8, "default");
|
1042 | // DxfGroup handleGroup = new DxfGroup();
|
||
1043 | // handleGroup.setCode(5);
|
||
1044 | // handleGroup.setData(new Integer(handle + k).toString());
|
||
1045 | 4937 | fjp | DxfGroup px = new DxfGroup();
|
1046 | DxfGroup py = new DxfGroup();
|
||
1047 | DxfGroup pz = new DxfGroup();
|
||
1048 | px.setCode(10);
|
||
1049 | px.setData(new Double(pto.getX())); |
||
1050 | py.setCode(20);
|
||
1051 | py.setData(new Double(pto.getY())); |
||
1052 | pz.setCode(30);
|
||
1053 | pz.setData(new Double(pto.getZ())); |
||
1054 | 12451 | caballero | double[] velev = ((FGeometry) geom).getZs(); |
1055 | Double elevation= DEFAULT_ELEVATION;
|
||
1056 | elevation = new Double(velev[0]); |
||
1057 | DxfGroup handleElevation = new DxfGroup();
|
||
1058 | handleElevation.setCode(38);
|
||
1059 | handleElevation.setData(elevation); |
||
1060 | |||
1061 | DxfGroupVector pv = updateProperties(values); |
||
1062 | pv.add(handleElevation); |
||
1063 | // pv.add(pointLayer);
|
||
1064 | // pv.add(handleGroup);
|
||
1065 | 4937 | fjp | pv.add(px); |
1066 | pv.add(py); |
||
1067 | pv.add(pz); |
||
1068 | entityMaker.createPoint(pv); |
||
1069 | } |
||
1070 | |||
1071 | /**
|
||
1072 | * @param handle
|
||
1073 | * @param k
|
||
1074 | * @param geom
|
||
1075 | * @throws Exception
|
||
1076 | */
|
||
1077 | 12451 | caballero | private void createPoint2D(int handle, int k, IGeometry geom, Value[] values) |
1078 | 5126 | fjp | throws Exception { |
1079 | 12451 | caballero | |
1080 | if (!(values[7] instanceof NullValue)){ |
||
1081 | createText2D(handle,k,geom,values); |
||
1082 | return;
|
||
1083 | } |
||
1084 | // String layer=DEFAULT_LAYER;
|
||
1085 | // Integer color=DEFAULT_COLOR;
|
||
1086 | // Double elevation=DEFAULT_ELEVATION;
|
||
1087 | // Double thickness=DEFAULT_THICKNESS;
|
||
1088 | // if (!(values[3] instanceof NullValue)){
|
||
1089 | // layer = values[3].toString();
|
||
1090 | // }
|
||
1091 | // if (!(values[4] instanceof NullValue)){
|
||
1092 | // color = new Integer(((NumericValue)values[4]).intValue());
|
||
1093 | // }
|
||
1094 | // if (!(values[5] instanceof NullValue)){
|
||
1095 | // elevation= new Double(((NumericValue)values[5]).doubleValue());
|
||
1096 | // }
|
||
1097 | // if (!(values[6] instanceof NullValue)){
|
||
1098 | // thickness= new Double(((NumericValue)values[6]).doubleValue());
|
||
1099 | // }
|
||
1100 | |||
1101 | 5126 | fjp | FPoint2D point = new FPoint2D(0, 0); |
1102 | 4937 | fjp | double[] pointCoords = new double[6]; |
1103 | PathIterator pointIt = geom.getPathIterator(null); |
||
1104 | while (!pointIt.isDone()) {
|
||
1105 | 5126 | fjp | pointIt.currentSegment(pointCoords); |
1106 | point = new FPoint2D(pointCoords[0], pointCoords[1]); |
||
1107 | pointIt.next(); |
||
1108 | 4937 | fjp | } |
1109 | Point2D pto = new Point2D.Double(point.getX(), point.getY()); |
||
1110 | 12451 | caballero | // DxfGroup pointLayer = new DxfGroup(8, layer);
|
1111 | // DxfGroup handleGroup = new DxfGroup();
|
||
1112 | // handleGroup.setCode(5);
|
||
1113 | // handleGroup.setData(new Integer(handle + k).toString());
|
||
1114 | //
|
||
1115 | // DxfGroup handleColor = new DxfGroup();
|
||
1116 | // handleColor.setCode(62);
|
||
1117 | // handleColor.setData(color);
|
||
1118 | //
|
||
1119 | // DxfGroup handleElevation = new DxfGroup();
|
||
1120 | // handleElevation.setCode(38);
|
||
1121 | // handleElevation.setData(elevation);
|
||
1122 | //
|
||
1123 | // DxfGroup handleThickness = new DxfGroup();
|
||
1124 | // handleThickness.setCode(39);
|
||
1125 | // handleThickness.setData(thickness);
|
||
1126 | |||
1127 | DxfGroup px = new DxfGroup();
|
||
1128 | DxfGroup py = new DxfGroup();
|
||
1129 | DxfGroup pz = new DxfGroup();
|
||
1130 | px.setCode(10);
|
||
1131 | px.setData(new Double(pto.getX())); |
||
1132 | py.setCode(20);
|
||
1133 | py.setData(new Double(pto.getY())); |
||
1134 | pz.setCode(30);
|
||
1135 | // POINT del DXF tiene cota. Le asigno cero arbitrariamente.
|
||
1136 | pz.setData(new Double(0.0)); |
||
1137 | DxfGroupVector pv = updateProperties(values); |
||
1138 | // pv.add(pointLayer);
|
||
1139 | // pv.add(handleGroup);
|
||
1140 | // pv.add(handleColor);
|
||
1141 | // pv.add(handleElevation);
|
||
1142 | // pv.add(handleThickness);
|
||
1143 | pv.add(px); |
||
1144 | pv.add(py); |
||
1145 | pv.add(pz); |
||
1146 | entityMaker.createPoint(pv); |
||
1147 | } |
||
1148 | /**
|
||
1149 | * @param handle
|
||
1150 | * @param k
|
||
1151 | * @param geom
|
||
1152 | * @throws Exception
|
||
1153 | */
|
||
1154 | private void createText2D(int handle, int k, IGeometry geom, Value[] values) |
||
1155 | throws Exception { |
||
1156 | // String layer=DEFAULT_LAYER;
|
||
1157 | // Integer color=DEFAULT_COLOR;
|
||
1158 | // Double elevation=DEFAULT_ELEVATION;
|
||
1159 | // Double thickness=DEFAULT_THICKNESS;
|
||
1160 | String text=DEFAULT_TEXT;
|
||
1161 | Double heightText=DEFAULT_HEIGHTTEXT;
|
||
1162 | Double rotationText=DEFAULT_ROTATIONTEXT;
|
||
1163 | |||
1164 | // if (!(values[3] instanceof NullValue)){
|
||
1165 | // layer = values[3].toString();
|
||
1166 | // }
|
||
1167 | // if (!(values[4] instanceof NullValue)){
|
||
1168 | // color = new Integer(((NumericValue)values[4]).intValue());
|
||
1169 | // }
|
||
1170 | // double[] velev = ((FGeometry) geom).getZs();
|
||
1171 | // elevation = new Double(velev[0]);
|
||
1172 | |||
1173 | // if (!(values[6] instanceof NullValue)){
|
||
1174 | // thickness= new Double(((NumericValue)values[6]).doubleValue());
|
||
1175 | // }
|
||
1176 | if (fieldsDesc.length > 9) { |
||
1177 | if (fieldsDesc[7].getFieldName().equals("Text") |
||
1178 | && !(values[7] instanceof NullValue)) { |
||
1179 | text = values[7].toString();
|
||
1180 | } |
||
1181 | if (fieldsDesc[8].getFieldName().equals("HeightText") && |
||
1182 | !(values[8] instanceof NullValue && |
||
1183 | values[8] instanceof DoubleValue)) { |
||
1184 | heightText = new Double(((NumericValue) values[8]) |
||
1185 | .doubleValue()); |
||
1186 | } |
||
1187 | if (fieldsDesc[9].getFieldName().equals("RotationText") && |
||
1188 | !(values[9] instanceof NullValue && |
||
1189 | values[9] instanceof DoubleValue)) { |
||
1190 | rotationText = new Double(((NumericValue) values[9]) |
||
1191 | .doubleValue()); |
||
1192 | } |
||
1193 | } |
||
1194 | DxfGroup handleText = new DxfGroup();
|
||
1195 | handleText.setCode(1);
|
||
1196 | handleText.setData(text); |
||
1197 | |||
1198 | DxfGroup handleHeightText = new DxfGroup();
|
||
1199 | handleHeightText.setCode(40);
|
||
1200 | handleHeightText.setData(heightText); |
||
1201 | |||
1202 | DxfGroup handleRotationText = new DxfGroup();
|
||
1203 | handleRotationText.setCode(50);
|
||
1204 | handleRotationText.setData(rotationText); |
||
1205 | |||
1206 | // DxfGroup handleColor = new DxfGroup();
|
||
1207 | // handleColor.setCode(62);
|
||
1208 | // handleColor.setData(color);
|
||
1209 | |||
1210 | // DxfGroup handleElevation = new DxfGroup();
|
||
1211 | // handleElevation.setCode(38);
|
||
1212 | // handleElevation.setData(elevation);
|
||
1213 | |||
1214 | // DxfGroup handleThickness = new DxfGroup();
|
||
1215 | // handleThickness.setCode(39);
|
||
1216 | // handleThickness.setData(thickness);
|
||
1217 | |||
1218 | |||
1219 | FPoint2D point = new FPoint2D(0, 0); |
||
1220 | double[] pointCoords = new double[6]; |
||
1221 | PathIterator pointIt = geom.getPathIterator(null); |
||
1222 | while (!pointIt.isDone()) {
|
||
1223 | pointIt.currentSegment(pointCoords); |
||
1224 | point = new FPoint2D(pointCoords[0], pointCoords[1]); |
||
1225 | pointIt.next(); |
||
1226 | } |
||
1227 | Point2D pto = new Point2D.Double(point.getX(), point.getY()); |
||
1228 | // DxfGroup pointLayer = new DxfGroup(8, layer);
|
||
1229 | 4937 | fjp | DxfGroup handleGroup = new DxfGroup();
|
1230 | handleGroup.setCode(5);
|
||
1231 | 5126 | fjp | handleGroup.setData(new Integer(handle + k).toString()); |
1232 | 4937 | fjp | DxfGroup px = new DxfGroup();
|
1233 | DxfGroup py = new DxfGroup();
|
||
1234 | DxfGroup pz = new DxfGroup();
|
||
1235 | px.setCode(10);
|
||
1236 | px.setData(new Double(pto.getX())); |
||
1237 | py.setCode(20);
|
||
1238 | py.setData(new Double(pto.getY())); |
||
1239 | pz.setCode(30);
|
||
1240 | // POINT del DXF tiene cota. Le asigno cero arbitrariamente.
|
||
1241 | pz.setData(new Double(0.0)); |
||
1242 | 12451 | caballero | DxfGroupVector pv = updateProperties(values); |
1243 | // pv.add(pointLayer);
|
||
1244 | // pv.add(handleColor);
|
||
1245 | // pv.add(handleElevation);
|
||
1246 | // pv.add(handleThickness);
|
||
1247 | pv.add(handleText); |
||
1248 | pv.add(handleHeightText); |
||
1249 | pv.add(handleRotationText); |
||
1250 | 4937 | fjp | pv.add(handleGroup); |
1251 | pv.add(px); |
||
1252 | pv.add(py); |
||
1253 | pv.add(pz); |
||
1254 | 12451 | caballero | entityMaker.createText(pv); |
1255 | 4937 | fjp | } |
1256 | 12451 | caballero | private void createText3D(int handle, int k, IGeometry geom, Value[] values) |
1257 | throws Exception { |
||
1258 | // String layer=DEFAULT_LAYER;
|
||
1259 | // Integer color=DEFAULT_COLOR;
|
||
1260 | Double elevation = DEFAULT_ELEVATION;
|
||
1261 | // Double thickness=DEFAULT_THICKNESS;
|
||
1262 | String text = DEFAULT_TEXT;
|
||
1263 | Double heightText = DEFAULT_HEIGHTTEXT;
|
||
1264 | Double rotationText = DEFAULT_ROTATIONTEXT;
|
||
1265 | 4937 | fjp | |
1266 | 12451 | caballero | // if (!(values[3] instanceof NullValue)){
|
1267 | // layer = values[3].toString();
|
||
1268 | // }
|
||
1269 | // if (!(values[4] instanceof NullValue)){
|
||
1270 | // color = new Integer(((NumericValue)values[4]).intValue());
|
||
1271 | // }
|
||
1272 | double[] velev = ((FGeometry) geom).getZs(); |
||
1273 | elevation = new Double(velev[0]); |
||
1274 | |||
1275 | // if (!(values[6] instanceof NullValue)){
|
||
1276 | // thickness= new Double(((NumericValue)values[6]).doubleValue());
|
||
1277 | // }
|
||
1278 | if (!(values[7] instanceof NullValue)) { |
||
1279 | text = values[7].toString();
|
||
1280 | } |
||
1281 | if (!(values[8] instanceof NullValue && values[8] instanceof DoubleValue)) { |
||
1282 | heightText = new Double(((NumericValue) values[8]).doubleValue()); |
||
1283 | } |
||
1284 | if (!(values[9] instanceof NullValue && values[9] instanceof DoubleValue)) { |
||
1285 | rotationText = new Double(((NumericValue) values[9]).doubleValue()); |
||
1286 | } |
||
1287 | |||
1288 | DxfGroup handleText = new DxfGroup();
|
||
1289 | handleText.setCode(1);
|
||
1290 | handleText.setData(text); |
||
1291 | |||
1292 | DxfGroup handleHeightText = new DxfGroup();
|
||
1293 | handleHeightText.setCode(40);
|
||
1294 | handleHeightText.setData(heightText); |
||
1295 | |||
1296 | DxfGroup handleRotationText = new DxfGroup();
|
||
1297 | handleRotationText.setCode(50);
|
||
1298 | handleRotationText.setData(rotationText); |
||
1299 | |||
1300 | // DxfGroup handleColor = new DxfGroup();
|
||
1301 | // handleColor.setCode(62);
|
||
1302 | // handleColor.setData(color);
|
||
1303 | |||
1304 | DxfGroup handleElevation = new DxfGroup();
|
||
1305 | handleElevation.setCode(38);
|
||
1306 | handleElevation.setData(elevation); |
||
1307 | |||
1308 | // DxfGroup handleThickness = new DxfGroup();
|
||
1309 | // handleThickness.setCode(39);
|
||
1310 | // handleThickness.setData(thickness);
|
||
1311 | |||
1312 | //FPoint3D point = new FPoint3D(0, 0, 0);
|
||
1313 | // double[] pointCoords = new double[6];
|
||
1314 | FPoint3D point = (FPoint3D)geom.getInternalShape(); |
||
1315 | // while (!pointIt.isDone()) {
|
||
1316 | // pointIt.currentSegment(pointCoords);
|
||
1317 | // point = new FPoint3D(pointCoords[0], pointCoords[1]);
|
||
1318 | // pointIt.next();
|
||
1319 | // }
|
||
1320 | // Point2D pto = new Point2D.Double(point.getX(), point.getY());
|
||
1321 | // DxfGroup pointLayer = new DxfGroup(8, layer);
|
||
1322 | DxfGroup handleGroup = new DxfGroup();
|
||
1323 | handleGroup.setCode(5);
|
||
1324 | handleGroup.setData(new Integer(handle + k).toString()); |
||
1325 | DxfGroup px = new DxfGroup();
|
||
1326 | DxfGroup py = new DxfGroup();
|
||
1327 | DxfGroup pz = new DxfGroup();
|
||
1328 | px.setCode(10);
|
||
1329 | px.setData(new Double(point.getX())); |
||
1330 | py.setCode(20);
|
||
1331 | py.setData(new Double(point.getY())); |
||
1332 | pz.setCode(30);
|
||
1333 | pz.setData(new Double(point.getZs()[0])); |
||
1334 | DxfGroupVector pv = updateProperties(values); |
||
1335 | // pv.add(pointLayer);
|
||
1336 | // pv.add(handleColor);
|
||
1337 | pv.add(handleElevation); |
||
1338 | // pv.add(handleThickness);
|
||
1339 | pv.add(handleText); |
||
1340 | pv.add(handleHeightText); |
||
1341 | pv.add(handleRotationText); |
||
1342 | pv.add(handleGroup); |
||
1343 | pv.add(px); |
||
1344 | pv.add(py); |
||
1345 | pv.add(pz); |
||
1346 | entityMaker.createText(pv); |
||
1347 | } |
||
1348 | 5126 | fjp | private boolean constantElevation(double[] velev) { |
1349 | boolean constant = true; |
||
1350 | for (int i = 0; i < velev.length; i++) { |
||
1351 | for (int j = 0; j < velev.length; j++) { |
||
1352 | if (j > i) {
|
||
1353 | if (velev[i] != velev[j]) {
|
||
1354 | constant = false;
|
||
1355 | break;
|
||
1356 | } |
||
1357 | } |
||
1358 | } |
||
1359 | break;
|
||
1360 | } |
||
1361 | return constant;
|
||
1362 | } |
||
1363 | 4937 | fjp | |
1364 | /**
|
||
1365 | * @return Returns the proj.
|
||
1366 | */
|
||
1367 | public IProjection getProjection() {
|
||
1368 | return proj;
|
||
1369 | } |
||
1370 | |||
1371 | /**
|
||
1372 | 5126 | fjp | * Util solo para el entity maker. Yo creo que esto no es necesario pero por
|
1373 | * ahora lo necesito para que funcione. TODO: Hablar con Luis para que lo
|
||
1374 | * aclare.
|
||
1375 | 5389 | caballero | *
|
1376 | 5126 | fjp | * @param proj
|
1377 | * The proj to set.
|
||
1378 | 4937 | fjp | */
|
1379 | public void setProjection(IProjection proj) { |
||
1380 | this.proj = proj;
|
||
1381 | } |
||
1382 | 5126 | fjp | |
1383 | 6856 | fjp | public boolean canSaveEdits() { |
1384 | if (file.canWrite()) return true; |
||
1385 | return false; |
||
1386 | 5389 | caballero | } |
1387 | |||
1388 | 4937 | fjp | } |