Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libDwg / src-test / org / gvsig / dwg / lib / DwgFileTest.java @ 29001

History | View | Annotate | Download (11 KB)

1
package org.gvsig.dwg.lib;
2

    
3
import java.io.File;
4
import java.io.IOException;
5
import java.net.URL;
6

    
7
import junit.framework.TestCase;
8

    
9
public class DwgFileTest extends TestCase {
10
        private File baseDataPath;
11

    
12
        protected void setUp() throws Exception {
13
                super.setUp();
14
                URL url = this.getClass().getResource("data");
15
                if (url == null) {
16
                        throw new Exception("Can't find 'data' dir");
17
                }
18

    
19
                baseDataPath = new File(url.getFile());
20
                if (!baseDataPath.exists()) {
21
                        throw new Exception("Can't find 'data' dir");
22
                }
23

    
24
        }
25

    
26
        protected void tearDown() throws Exception {
27
                super.tearDown();
28
        }
29
        public void test1() throws IOException, DwgVersionNotSupportedException {
30
//                String fileName = baseDataPath.getAbsolutePath()+"/Un punto.dwg";
31
//                DwgFile dwg = new DwgFile(fileName);
32
//
33
//                dwg.read();
34
//                dwg.calculateGisModelDwgPolylines();
35
//                dwg.blockManagement();
36
//                LinkedList dwgObjects = dwg.getDwgObjects();
37
        }
38

    
39
        public void test2() throws RuntimeException, CorruptedDwgEntityException{
40
        //Dwg Object that is supposed to be
41
        //an LWPOLYLINE in V14 version
42
                /*
43
        int[] data = new int[]{61,64,64,183,19,227,104,16
44
                            ,0,5,8,59,72,32,252,47,90,142,
45
                            234,145,50,10,71,11,213,36,229,
46
                            162,130,10,228,126,23,174,130,
47
                            145,50,15,98,141,196,244,229,
48
                            162,130,12,126,23,169,66,58,
49
                            145,50,12,47,90,138,68,229,
50
                            162,130,8,0,0,4,7,74,137,50,
51
                            15,177,66,231,252,221,162,130,
52
                            9,130,151,21,242,151,21,190,
53
                            8,21,8,56};
54
         */
55
//                int[] data = new int[]{62,128,64,71,99,
56
//                                                           40,48,0,5,8,27,72,
57
//                                                           100,126,23,169,68,
58
//                                                           178,105,50,13,114,
59
//                                                           63,11,82,165,162,130,
60
//                                                           13,114,63,11,210,138,
61
//                                                           105,50,8,173,114,59,
62
//                                                           138,205,162,130,15,98,
63
//                                                           141,192,241,58,105,50,
64
//                                                           11,51,51,52,178,229,162,
65
//                                                           130,14,110,102,98,97,234,
66
//                                                           105,50,11,51,51,52,179,21,
67
//                                                           162,130,10,149,192,240,42,
68
//                                                           162,105,50,14,189,27,131,
69
//                                                           107,69,162,130,14,31,169,
70
//                                                           66,227,74,105,50,9,240,86,
71
//                                                           185,27,117,162,130,11,59,
72
//                                                           51,51,52,234,105,50,13,114,
73
//                                                           63,11,83,85,162,130,9,74,228,
74
//                                                           126,22,186,105,50,11,51,51,50,
75
//                                                           51,53,162,130,11,137,232,82,190,
76
//                                                           58,105,50,9,74,228,122,147,13,162,
77
//                                                           130,11,137,232,82,189,106,105,50,9,
78
//                                                           74,228,122,146,213,162,130,9,74,228,122,20,202,105,50,12,126,23,171,194,173,162,130,12,126,23,169,68,178,105,50,13,114,63,11,82,165,162,130,9,130,151,22,10,136,182,8,21,8,120};
79
//        //1er intento: suponemos que la LWPOLYLINE cumple la especificaci?n
80
//        //a rajatabla
81
//        int bitPos = 0;
82
//        List val = DwgUtil.getBitShort(data, bitPos);
83
//        bitPos = ((Integer) val.get(0)).intValue();
84
//        int type = ((Integer) val.get(1)).intValue();
85
//        System.out.println("type = " + type);
86
//
87
//        DwgHandleReference hr = new DwgHandleReference();
88
//        bitPos = hr.read(data, bitPos);
89
//        System.out.println("handle, code="+
90
//                    hr.getCode()+
91
//                    " ,offset="+
92
//                    hr.getOffset());
93
//
94
//        //Ahora pasamos a la extended data
95
//        val = DwgUtil.getBitShort(data, bitPos);
96
//        bitPos = ((Integer) val.get(0)).intValue();
97
//        int extendedDataSize = ((Integer) val.get(1)).intValue();
98
//        System.out.println("EED size="+extendedDataSize);
99
//        //como el size es 0, me lo salto
100
//
101
//        //ver si tiene datos graficos
102
//        val = DwgUtil.testBit(data, bitPos);
103
//        bitPos = ((Integer) val.get(0)).intValue();
104
//        boolean hasGraphicsData = ((Boolean) val.get(1))
105
//                .booleanValue();
106
//        System.out.println("graphics = "+hasGraphicsData);
107
//
108
//        //como se que no hay graphics me lo salto
109
//        //tama?o en bits
110
//        val = DwgUtil.getRawLong(data, bitPos);
111
//        bitPos = ((Integer) val.get(0)).intValue();
112
//        int sizeInBits = ((Integer) val.get(1)).intValue();
113
//        System.out.println("sizeInBits = "+sizeInBits);
114
//
115
//        /*
116
//         * Ahora, lo que viene es lo que en la spec se dice
117
//         * "Common entity data". Revisar bien pues PythonCAD no lo lee
118
//         * como en la spec.
119
//         *
120
//         * pag 42.
121
//          R13-R14 Only:
122
//                  RL        :        Size of object data in bits
123
//                  6B        :        Flags (FEDCBA)
124
//                  6B        :        Common parameters (CCSSII)
125
//                  Segun esto, deberia leer 6 bits y 6 bits
126
//
127
//                  FLAGS
128
//                      Mas adelante (pag 43), dice:
129
//                      DC        :        This is the number of reactors attached to an
130
//                      entity as a bitshort.
131
//                      This feature may have been dormant in R13,
132
//                      but it appears in R14, and in files saved as R13 by R14.
133
//
134
//                      Ahora bien, pythoncad las est? leyendo como bitLong
135
//                  ?En que quedamos, son 2 bits, 1 bitLong o 1 bitShort?
136
//                  TODO REVISAR
137
//
138
//                  COMMON PARAMETERS
139
//                  Al principio, dice que son 6 bits (CC, SS, II)
140
//                  pero luego dice (pag 43):
141
//                  CC        :        Color bitshort
142
//                  SS        :        Linetype scale bitdouble
143
//                  II        :        "Invisible" flag bitshort
144
//
145
//                        Pythoncad, en vez de como 2 bits, los est? leyendo
146
//                        como BitShort, BitDouble y BitShort
147
//
148
//         * */
149
//
150
//        Integer mode = (Integer) DwgUtil.getBits(data, 2, bitPos);
151
//                bitPos += 2;
152
//                System.out.println("mode = "+mode);
153
//
154
//        /*
155
//                val = DwgUtil.getBitLong(data, bitPos);
156
//                bitPos = ((Integer) val.get(0)).intValue();
157
//                int rnum = ((Integer) val.get(1)).intValue();
158
//                System.out.println("numReactors = "+rnum);
159
//*/
160
//                val = DwgUtil.getBitShort(data, bitPos);
161
//                bitPos = ((Integer) val.get(0)).intValue();
162
//                int rnum = ((Integer) val.get(1)).intValue();
163
//                System.out.println("numReactors = "+rnum);
164
//
165
//
166
//                val = DwgUtil.testBit(data, bitPos);
167
//                bitPos = ((Integer) val.get(0)).intValue();
168
//                boolean isLyrByLineType = ((Boolean) val.get(1)).booleanValue();
169
//                System.out.println("isLyrByLineType="+isLyrByLineType);
170
//
171
//                val = DwgUtil.testBit(data, bitPos);
172
//                bitPos = ((Integer) val.get(0)).intValue();
173
//                boolean noLinks = ((Boolean) val.get(1)).booleanValue();
174
//                System.out.println("noLinks="+noLinks);
175
//
176
//
177
//                val = DwgUtil.getBitShort(data, bitPos);
178
//                bitPos = ((Integer) val.get(0)).intValue();
179
//                int color = ((Integer) val.get(1)).intValue();
180
//                System.out.println("color="+color);
181
//
182
//
183
//                val = DwgUtil.getBitDouble(data, bitPos);
184
//                bitPos = ((Integer) val.get(0)).intValue();
185
//                float ltscale = ((Double) val.get(1)).floatValue();
186
//                System.out.println("ltscale="+ltscale);
187
//
188
//                val = DwgUtil.getBitShort(data, bitPos);
189
//                bitPos = ((Integer) val.get(0)).intValue();
190
//                int invis = ((Integer) val.get(1)).intValue();
191
//                System.out.println("invis="+invis);
192
//
193
//                val = DwgUtil.getBitShort(data, bitPos);
194
//                bitPos = ((Integer) val.get(0)).intValue();
195
//                int flag = ((Integer) val.get(1)).intValue();
196
//                System.out.println("flag="+flag);
197
//
198
//                double dVal = 0d;
199
//                if((flag & 0x4) > 0){
200
//                        val = DwgUtil.getBitDouble(data, bitPos);
201
//                        bitPos = ((Integer) val.get(0)).intValue();
202
//                        dVal = ((Double) val.get(1)).doubleValue();
203
//                }
204
//                System.out.println("constWidth="+dVal);
205
//
206
//                dVal = 0d;
207
//                if((flag & 0x8) > 0){
208
//                        val = DwgUtil.getBitDouble(data, bitPos);
209
//                        bitPos = ((Integer) val.get(0)).intValue();
210
//                        dVal = ((Double) val.get(1)).doubleValue();
211
//                }
212
//                System.out.println("elevation="+dVal);
213
//
214
//                dVal = 0d;
215
//                if ((flag & 0x2) > 0){
216
//                        val = DwgUtil.getBitDouble(data, bitPos);
217
//                        bitPos = ((Integer) val.get(0)).intValue();
218
//                        dVal = ((Double) val.get(1)).doubleValue();
219
//                }
220
//                System.out.println("thickness="+dVal);
221
//
222
//                double x, y, z ;
223
//                x = 0d;
224
//                y = 0d;
225
//                z = 0d;
226
//
227
//                if ((flag & 0x1) > 0){
228
//                        val = DwgUtil.getBitDouble(data, bitPos);
229
//                        bitPos = ((Integer) val.get(0)).intValue();
230
//                        x = ((Double) val.get(1)).doubleValue();
231
//
232
//                        val = DwgUtil.getBitDouble(data, bitPos);
233
//                        bitPos = ((Integer) val.get(0)).intValue();
234
//                        y = ((Double) val.get(1)).doubleValue();
235
//
236
//                        val = DwgUtil.getBitDouble(data, bitPos);
237
//                        bitPos = ((Integer) val.get(0)).intValue();
238
//                        z = ((Double) val.get(1)).doubleValue();
239
//                }
240
//                System.out.println("normal="+x+","+y+","+z);
241
//
242
//                val = DwgUtil.getBitLong(data, bitPos);
243
//                bitPos = ((Integer) val.get(0)).intValue();
244
//                int np = ((Integer) val.get(1)).intValue();
245
//                System.out.println("numPoints="+np);
246
//
247
//                int nb = 0;
248
//                if((flag & 0x10) > 0){
249
//                        val = DwgUtil.getBitLong(data, bitPos);
250
//                        bitPos = ((Integer) val.get(0)).intValue();
251
//                        nb = ((Integer) val.get(1)).intValue();
252
//                }
253
//                System.out.println("numBulges="+nb);
254
//                int nw = 0;
255
//                if((flag & 0x20) > 0){
256
//                        val = DwgUtil.getBitLong(data, bitPos);
257
//                        bitPos = ((Integer) val.get(0)).intValue();
258
//                        nw = ((Integer) val.get(1)).intValue();
259
//                }
260
//                System.out.println("numWidths="+nw);
261
//                if(np > 0){
262
//                        Point2D[] points = new Point2D[np];
263
//                        for(int i = 0; i < np; i++){
264
//                                val = DwgUtil.getRawDouble(data, bitPos);
265
//                                bitPos = ((Integer) val.get(0)).intValue();
266
//                                x = ((Double) val.get(1)).doubleValue();
267
//
268
//                                val = DwgUtil.getRawDouble(data, bitPos);
269
//                                bitPos = ((Integer) val.get(0)).intValue();
270
//                                y = ((Double) val.get(1)).doubleValue();
271
//
272
//                                points[i] = new Point2D.Double(x, y);
273
//                                System.out.println("Punto"+i+"="+x+","+y);
274
//                        }//for
275
//                }//if np
276
//
277
//                if(nb > 0){
278
//                        double[] bulges = new double[nb];
279
//                        for(int i = 0; i < nb; i++){
280
//                                val = DwgUtil.getRawDouble(data, bitPos);
281
//                                bitPos = ((Integer) val.get(0)).intValue();
282
//                                bulges[i] = ((Double) val.get(1)).doubleValue();
283
//                                System.out.println("Bulge"+i+"="+bulges[i]);
284
//                        }//for
285
//
286
//                }//if nb
287
//
288
//                if(nw > 0){
289
//                        double[][] widths = new double[nw][2];
290
//                        for(int i = 0; i < nw; i++){
291
//                                val = DwgUtil.getBitDouble(data, bitPos);
292
//                                bitPos = ((Integer) val.get(0)).intValue();
293
//                                double sw = ((Double) val.get(1)).doubleValue();
294
//
295
//                                val = DwgUtil.getBitDouble(data, bitPos);
296
//                                bitPos = ((Integer) val.get(0)).intValue();
297
//                                double ew = ((Double) val.get(1)).doubleValue();
298
//
299
//                                widths[i][0] = sw;
300
//                                widths[i][1] = ew;
301
//                                System.out.println("Width"+i+"="+sw+","+ew);
302
//                        }//for
303
//                }
304
     }
305

    
306
        public void test3(){
307
                //test of extrusion
308
                double[] coord = null;
309
                double[] extrusion = null;
310
                double[] extrusion2 = new double[]{0, 0, 1};
311

    
312
                coord = new double[]{790089.65, 4477974.75, 9.560000000114087};
313
                extrusion = new double[]{-0.5037965987025721, 0.07005064807841195, 0.8609772899673451};
314
                //1. algoritmo original, vector normal distinto
315
//                double[] newCoord = AcadExtrusionCalculator.extrude(coord, extrusion);
316
//                newCoord = AcadExtrusionCalculator.extrude3(coord, extrusion);
317
//
318
                //2? ahora con vector normal coincidente con eje Z
319
//                newCoord = AcadExtrusionCalculator.extrude(coord, extrusion2);
320
//                newCoord = AcadExtrusionCalculator.extrude3(coord, extrusion2);
321
        }
322
}