Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libDwg / src / org / gvsig / dwg / lib / readers / v1314 / DwgLwPolylineReader1314.java @ 28969

History | View | Annotate | Download (4.36 KB)

1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package org.gvsig.dwg.lib.readers.v1314;
6

    
7
import java.awt.geom.Point2D;
8
import java.util.ArrayList;
9
import java.util.List;
10

    
11
import org.gvsig.dwg.lib.CorruptedDwgEntityException;
12
import org.gvsig.dwg.lib.DwgObject;
13
import org.gvsig.dwg.lib.DwgUtil;
14
import org.gvsig.dwg.lib.objects.DwgLwPolyline;
15

    
16

    
17
/**
18
 * @author alzabord
19
 *
20
 * TODO To change the template for this generated type comment go to
21
 * Window - Preferences - Java - Code Style - Code Templates
22
 */
23
public class DwgLwPolylineReader1314 extends AbstractDwg1314Reader{
24

    
25
        /* (non-Javadoc)
26
         * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
27
         */
28
        public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
29
                if(! (dwgObj instanceof DwgLwPolyline))
30
                    throw new RuntimeException("ArcReader 14 solo puede leer DwgLwPolyline");
31
                DwgLwPolyline l = (DwgLwPolyline) dwgObj;
32
                int bitPos = offset;
33
                
34
                bitPos = headTailReader.readObjectHeader(data, bitPos, l);
35
                
36
        
37
                List val = DwgUtil.getBitShort(data, bitPos);
38
                bitPos = ((Integer) val.get(0)).intValue();
39
                int flag = ((Integer) val.get(1)).intValue();
40
                l.setFlag(flag);
41
                
42
                double dVal = 0d;
43
                if((flag & 0x4) > 0){
44
                        val = DwgUtil.getBitDouble(data, bitPos);
45
                        bitPos = ((Integer) val.get(0)).intValue();
46
                        dVal = ((Double) val.get(1)).doubleValue();
47
                }
48
                l.setConstWidth(dVal);
49
                
50
                dVal = 0d;
51
                if((flag & 0x8) > 0){
52
                        val = DwgUtil.getBitDouble(data, bitPos);
53
                        bitPos = ((Integer) val.get(0)).intValue();
54
                        dVal = ((Double) val.get(1)).doubleValue();
55
                }
56
                l.setElevation(dVal);
57
                
58
                dVal = 0d;
59
                if ((flag & 0x2) > 0){
60
                        val = DwgUtil.getBitDouble(data, bitPos);
61
                        bitPos = ((Integer) val.get(0)).intValue();
62
                        dVal = ((Double) val.get(1)).doubleValue();
63
                }
64
                l.setThickness(dVal);
65
                
66
                double x, y, z ;
67
                x = 0d;
68
                y = 0d; 
69
                z = 0d;
70
                
71
                if ((flag & 0x1) > 0){
72
                        val = DwgUtil.getBitDouble(data, bitPos);
73
                        bitPos = ((Integer) val.get(0)).intValue();
74
                        x = ((Double) val.get(1)).doubleValue();
75
                        
76
                        val = DwgUtil.getBitDouble(data, bitPos);
77
                        bitPos = ((Integer) val.get(0)).intValue();
78
                        y = ((Double) val.get(1)).doubleValue();
79
                        
80
                        val = DwgUtil.getBitDouble(data, bitPos);
81
                        bitPos = ((Integer) val.get(0)).intValue();
82
                        z = ((Double) val.get(1)).doubleValue();
83
                }
84
                l.setNormal(new double[]{x, y, z});
85
                
86
                val = DwgUtil.getBitLong(data, bitPos);
87
                bitPos = ((Integer) val.get(0)).intValue();
88
                int np = ((Integer) val.get(1)).intValue();
89
                
90
                int nb = 0;
91
                if((flag & 0x10) > 0){
92
                        val = DwgUtil.getBitLong(data, bitPos);
93
                        bitPos = ((Integer) val.get(0)).intValue();
94
                        nb = ((Integer) val.get(1)).intValue();
95
                }
96
                if(nb > 10000)
97
                    throw new CorruptedDwgEntityException("LwPolyline corrupta");
98
                
99
                int nw = 0;
100
                if((flag & 0x20) > 0){
101
                        val = DwgUtil.getBitLong(data, bitPos);
102
                        bitPos = ((Integer) val.get(0)).intValue();
103
                        nw = ((Integer) val.get(1)).intValue();
104
                }
105
                
106
                if(nw > 10000)
107
                    throw new CorruptedDwgEntityException("LwPolyline corrupta");
108
                
109
                if(np > 0){
110
                        if(np > 10000)
111
                            throw new CorruptedDwgEntityException("LwPolyline corrupta");
112
                        List points = new ArrayList();
113
                        for(int i = 0; i < np; i++){
114
                                val = DwgUtil.getRawDouble(data, bitPos);
115
                                bitPos = ((Integer) val.get(0)).intValue();
116
                                x = ((Double) val.get(1)).doubleValue();
117
                                
118
                                val = DwgUtil.getRawDouble(data, bitPos);
119
                                bitPos = ((Integer) val.get(0)).intValue();
120
                                y = ((Double) val.get(1)).doubleValue();
121
                                
122
                                points.add(new double[]{x,y});
123
                        }//for
124
                        l.setVertices(points);
125
                }//if np
126
                
127
                if(nb > 0){
128
                        double[] bulges = new double[nb];
129
                        for(int i = 0; i < nb; i++){
130
                                val = DwgUtil.getRawDouble(data, bitPos);
131
                                bitPos = ((Integer) val.get(0)).intValue();
132
                                bulges[i] = ((Double) val.get(1)).doubleValue();
133
                        }//for
134
                        l.setBulges(bulges);
135
                }//if nb
136
                
137
                if(nw > 0){
138
                        double[][] widths = new double[nw][2];
139
                        for(int i = 0; i < nw; i++){
140
                                val = DwgUtil.getBitDouble(data, bitPos);
141
                                bitPos = ((Integer) val.get(0)).intValue();
142
                                double sw = ((Double) val.get(1)).doubleValue();
143
                                
144
                                val = DwgUtil.getBitDouble(data, bitPos);
145
                                bitPos = ((Integer) val.get(0)).intValue();
146
                                double ew = ((Double) val.get(1)).doubleValue();
147
                                
148
                                widths[i][0] = sw;
149
                                widths[i][1] = ew;
150
                        }//for
151
                        l.setWidths(widths);
152
                }
153
                bitPos = headTailReader.readObjectTailer(data, bitPos, l);
154
        }
155
}