Revision 9910 trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/DwgFileV14Reader.java
DwgFileV14Reader.java | ||
---|---|---|
83 | 83 |
* |
84 | 84 |
* @author jmorell |
85 | 85 |
*/ |
86 |
public class DwgFileV14Reader implements DwgFileReader { |
|
86 |
public class DwgFileV14Reader implements IDwgFileReader {
|
|
87 | 87 |
|
88 | 88 |
protected DwgFile dwgFile; |
89 | 89 |
protected ByteBuffer bb; |
... | ... | |
648 | 648 |
bitPos = ((Integer)val.get(0)).intValue(); |
649 | 649 |
dwgFile.setHeader("CECOLOR", val.get(1)); |
650 | 650 |
|
651 |
//desilusion: creo que es el proximo handle que se asignar? a las nuevas |
|
652 |
//entidades que se creen |
|
653 | 651 |
val = DwgUtil.getHandle(intData, bitPos); |
654 | 652 |
bitPos = ((Integer)val.get(0)).intValue(); |
655 | 653 |
int intHandle = DwgUtil.handleToInt(val); |
... | ... | |
1662 | 1660 |
List extData = (List)val.get(1); |
1663 | 1661 |
obj.setExtendedData(extData); |
1664 | 1662 |
|
1665 |
/* TODO |
|
1666 |
* A) Dos cosas pendientes por hacer: |
|
1667 |
* 1) Implementar en el object factory todos los readers de dwg1314.py |
|
1668 |
* (igual hay objetos (types) no implementados |
|
1669 |
* |
|
1670 |
* 2) Buscar un mecanismo que independice el objeto DWG de su version |
|
1671 |
* (igual habr?a que hacer algo as?: |
|
1672 |
* interface DwgObjectReader{ |
|
1673 |
* public void readObjHeader(); |
|
1674 |
* public void readSpecificObj(); |
|
1675 |
* public void readTailer(); |
|
1676 |
* } |
|
1677 |
* Junto con una factoria de objectReaders: |
|
1678 |
* Map obj_readers = new HashMap(); |
|
1679 |
* obj_readers.put(DwgLine.class.getName()+"15", DwgLineReader15.class); |
|
1680 |
* obj_readers.put(DwgLine.class.getName()+"14", DwgLineReader14.class); |
|
1681 |
* DwgObjectReader get(DwgObject obj, String dwgVersion){ |
|
1682 |
* return obj_readers.get(obj.getClass().getName()+dwgVersion); |
|
1683 |
* |
|
1684 |
* } |
|
1685 |
* |
|
1686 |
* |
|
1687 |
* |
|
1688 |
* |
|
1689 |
* |
|
1690 |
* |
|
1663 |
/* TODO |
|
1691 | 1664 |
if _type < len(_objflags): |
1692 | 1665 |
_gflag, _reader = _objflags[_type] |
1693 |
if _gflag: |
|
1694 |
_bitpos, _val = dwgutil.test_bit(_data, _bitpos) |
|
1695 |
# print "graphic flag: " + str(_val) |
|
1696 |
# print "bitpos: %d" % _bitpos |
|
1697 |
if _val is True: |
|
1698 |
_bitpos, _gsize = dwgutil.get_raw_long(_data, _bitpos) |
|
1699 |
# print "graphic data bit size: %d" % _gsize |
|
1700 |
# print "bitpos: %d" % _bitpos |
|
1701 |
_bgsize = _gsize * 8 |
|
1702 |
_gidata = dwgutil.get_bits(_data, _bgsize, _bitpos) |
|
1703 |
_bitpos = _bitpos + _bgsize |
|
1704 |
_ent.setEntityData('graphic_data', _gidata) |
|
1666 |
|
|
1705 | 1667 |
_bitpos, _objbsize = dwgutil.get_raw_long(_data, _bitpos) |
1706 | 1668 |
# print "object data size in bits: %d" % _objbsize |
1707 | 1669 |
# print "bitpos: %d" % _bitpos |
... | ... | |
1722 | 1684 |
*/ |
1723 | 1685 |
|
1724 | 1686 |
|
1725 |
|
|
1726 |
|
|
1727 |
|
|
1728 | 1687 |
boolean gflag = false; |
1729 | 1688 |
gflag = obj.isGraphicsFlag(); |
1730 | 1689 |
if (gflag) { |
1731 |
//lee un flag boolean |
|
1732 |
v = DwgUtil.testBit(data, bitPos); |
|
1733 |
bitPos = ((Integer)v.get(0)).intValue(); |
|
1734 |
boolean val = ((Boolean)v.get(1)).booleanValue(); |
|
1690 |
val = DwgUtil.testBit(intData, bitPos); |
|
1691 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
1692 |
boolean hasGraphicsData = ((Boolean)val.get(1)).booleanValue(); |
|
1735 | 1693 |
//si hay imagen asociada, se lee por completo |
1736 |
if (val) {
|
|
1737 |
v = DwgUtil.getRawLong(data, bitPos);
|
|
1738 |
bitPos = ((Integer)v.get(0)).intValue(); |
|
1739 |
size = ((Integer)v.get(1)).intValue(); |
|
1740 |
int bgSize = size*8;
|
|
1741 |
Integer giData = (Integer)DwgUtil.getBits(data, bgSize, bitPos);
|
|
1694 |
if (hasGraphicsData) {
|
|
1695 |
val = DwgUtil.getRawLong(intData, bitPos);
|
|
1696 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1697 |
size = ((Integer)val.get(1)).intValue();
|
|
1698 |
int bgSize = size * 8;
|
|
1699 |
Integer giData = (Integer)DwgUtil.getBits(intData, bgSize, bitPos);
|
|
1742 | 1700 |
obj.setGraphicData(giData.intValue()); |
1743 | 1701 |
bitPos = bitPos + bgSize; |
1744 | 1702 |
} |
1745 |
} |
|
1703 |
}//if gflag
|
|
1746 | 1704 |
|
1747 |
readSpecificObject(obj, data, bitPos);
|
|
1705 |
readSpecificObject(obj, intData, bitPos);
|
|
1748 | 1706 |
return obj; |
1749 | 1707 |
} catch (Exception e) { |
1750 | 1708 |
// logger.warn("Exception capturada. Probablemente se ha encontrado un" + |
... | ... | |
2085 | 2043 |
solution.add(extendedData); |
2086 | 2044 |
return solution; |
2087 | 2045 |
} |
2046 |
|
|
2047 |
/* (non-Javadoc) |
|
2048 |
* @see com.iver.cit.jdwglib.dwg.readers.IDwgFileReader#readObjectHeader(int[], int, com.iver.cit.jdwglib.dwg.DwgObject) |
|
2049 |
*/ |
|
2050 |
public int readObjectHeader(int[] data, int offset, DwgObject dwgObject) throws Exception { |
|
2051 |
int bitPos = offset; |
|
2052 |
Integer mode = (Integer)DwgUtil.getBits(data, 2, bitPos); |
|
2053 |
bitPos += 2; |
|
2054 |
dwgObject.setMode(mode.intValue()); |
|
2055 |
|
|
2056 |
List val = DwgUtil.getBitLong(data, bitPos); |
|
2057 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2058 |
int rnum = ((Integer)val.get(1)).intValue(); |
|
2059 |
dwgObject.setNumReactors(rnum); |
|
2060 |
//TODO hasta aqui igual que en Dwg 15 |
|
2061 |
|
|
2062 |
val = DwgUtil.testBit(data, bitPos); |
|
2063 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2064 |
boolean isLyrByLineType = ((Boolean)val.get(1)).booleanValue(); |
|
2065 |
//TODO En la 15 es un flag, no un boolean. REVISAR |
|
2066 |
dwgObject.setLyrByLineType(isLyrByLineType); |
|
2067 |
|
|
2068 |
val = DwgUtil.testBit(data, bitPos); |
|
2069 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2070 |
boolean noLinks = ((Boolean)val.get(1)).booleanValue(); |
|
2071 |
dwgObject.setNoLinks(noLinks); |
|
2072 |
|
|
2073 |
val = DwgUtil.getBitShort(data, bitPos); |
|
2074 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2075 |
int color = ((Integer)val.get(1)).intValue(); |
|
2076 |
dwgObject.setColor(color); |
|
2077 |
|
|
2078 |
val = DwgUtil.getBitDouble(data, bitPos); |
|
2079 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2080 |
float ltscale = ((Double)val.get(1)).floatValue(); |
|
2081 |
//TODO tampoco se setea en la 15 (en su lugar, un flag de ints) |
|
2082 |
val = DwgUtil.getBitShort(data, bitPos); |
|
2083 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2084 |
int invis = ((Integer)val.get(1)).intValue(); |
|
2085 |
|
|
2086 |
return bitPos; |
|
2087 |
} |
|
2088 |
|
|
2089 |
/* |
|
2090 |
* |
|
2091 |
* (non-Javadoc) |
|
2092 |
* @see com.iver.cit.jdwglib.dwg.readers.IDwgFileReader#readObjectTailer(int[], int, com.iver.cit.jdwglib.dwg.DwgObject) |
|
2093 |
*/ |
|
2094 |
public int readObjectTailer(int[] data, int offset, DwgObject dwgObject) throws Exception { |
|
2095 |
int bitPos = offset; |
|
2096 |
List val = null; |
|
2097 |
|
|
2098 |
/* |
|
2099 |
* Subentity ref handle. |
|
2100 |
* Esto se aplica sobre VERTEX, ATTRIB, SEQEND |
|
2101 |
* */ |
|
2102 |
if (dwgObject.getMode()==0x0) { |
|
2103 |
val = DwgUtil.getHandle(data, bitPos); |
|
2104 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2105 |
int intHandle = DwgUtil.handleToInt(val); |
|
2106 |
dwgObject.setSubEntityHandle(intHandle); |
|
2107 |
} |
|
2108 |
|
|
2109 |
/* |
|
2110 |
* Reactors handles |
|
2111 |
* TODO No se est?n usando para setear nada en DwgObject |
|
2112 |
* */ |
|
2113 |
for (int i=0; i<dwgObject.getNumReactors(); i++) { |
|
2114 |
val = DwgUtil.getHandle(data, bitPos); |
|
2115 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2116 |
int reactorHandle = DwgUtil.handleToInt(val); |
|
2117 |
} |
|
2118 |
|
|
2119 |
val = DwgUtil.getHandle(data, bitPos); |
|
2120 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2121 |
dwgObject.setXDicObjHandle(DwgUtil.handleToInt(val)); |
|
2122 |
|
|
2123 |
val = DwgUtil.getHandle(data, bitPos); |
|
2124 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2125 |
dwgObject.setLayerHandleCode(((Integer)val.get(1)).intValue()); |
|
2126 |
dwgObject.setLayerHandle(DwgUtil.handleToInt(val)); |
|
2127 |
// TODO Hasta aqui igual que en la 15 |
|
2128 |
if(! dwgObject.isLyrByLineType()){ |
|
2129 |
val = DwgUtil.getHandle(data, bitPos); |
|
2130 |
bitPos = ((Integer)val.get(0)).intValue(); |
|
2131 |
int handle = DwgUtil.handleToInt(val); |
|
2132 |
dwgObject.setLineType(handle); |
|
2133 |
} |
|
2134 |
String cadena = ""; |
|
2135 |
if(! dwgObject.isNoLinks()){ |
|
2136 |
val = DwgUtil.getHandle(data, bitPos); |
|
2137 |
bitPos = ((Integer) val.get(0)).intValue(); |
|
2138 |
ArrayList prevhv = new ArrayList(); |
|
2139 |
int[] prev = new int[val.size() - 1]; |
|
2140 |
cadena = "PREVIOUS HANDLE = "; |
|
2141 |
for (int i = 1; i < val.size(); i++) { |
|
2142 |
prev[i - 1] = ((Integer) val.get(i)).intValue(); |
|
2143 |
prevhv.add(new Integer(prev[i - 1])); |
|
2144 |
cadena += prev[i - 1] + " "; |
|
2145 |
}//for |
|
2146 |
System.out.println(cadena); |
|
2147 |
dwgObject.setPreviousHandleCode(prev[0]); |
|
2148 |
dwgObject.setPreviousHandle(DwgUtil.handleBinToHandleInt(prevhv)); |
|
2149 |
|
|
2150 |
val = DwgUtil.getHandle(data, bitPos); |
|
2151 |
bitPos = ((Integer) val.get(0)).intValue(); |
|
2152 |
ArrayList nexthv = new ArrayList(); |
|
2153 |
int[] next = new int[val.size() - 1]; |
|
2154 |
cadena = "NEXT HANDLE = "; |
|
2155 |
for (int i = 1; i < val.size(); i++) { |
|
2156 |
next[i - 1] = ((Integer) val.get(i)).intValue(); |
|
2157 |
nexthv.add(new Integer(next[i - 1])); |
|
2158 |
cadena += next[i - 1] + " "; |
|
2159 |
} |
|
2160 |
System.out.println(cadena); |
|
2161 |
dwgObject.setNextHandleCode(next[0]); |
|
2162 |
dwgObject.setNextHandle(DwgUtil.handleBinToHandleInt(nexthv)); |
|
2163 |
} |
|
2164 |
return bitPos; |
|
2165 |
} |
|
2088 | 2166 |
|
2089 | 2167 |
} |
Also available in: Unified diff