Revision 9910 trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/DwgFileV14Reader.java

View differences:

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