/** * Reads the header of an object in a DWG file Version 15 * * @param data Array of unsigned bytes obtained from the DWG binary file * @param offset The current bit offset where the value begins * @return int New offset * @throws Exception If an unexpected bit value is found in the DWG file. Occurs when we are * looking for LwPolylines. */ public int readObjectHeaderV15(int[] data, int offset) throws Exception { int bitPos = offset; Integer mode = (Integer) DwgUtil.getBits(data, 2, bitPos); bitPos = bitPos + 2; setMode(mode.intValue()); Vector v = DwgUtil.getBitLong(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int rnum = ((Integer) v.get(1)).intValue(); setNumReactors(rnum); v = DwgUtil.testBit(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); boolean nolinks = ((Boolean) v.get(1)).booleanValue(); setNoLinks(nolinks); v = DwgUtil.getBitShort(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int color = ((Integer) v.get(1)).intValue(); setColor(color); v = DwgUtil.getBitDouble(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); float ltscale = ((Double) v.get(1)).floatValue(); Integer ltflag = (Integer) DwgUtil.getBits(data, 2, bitPos); bitPos = bitPos + 2; Integer psflag = (Integer) DwgUtil.getBits(data, 2, bitPos); bitPos = bitPos + 2; v = DwgUtil.getBitShort(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int invis = ((Integer) v.get(1)).intValue(); v = DwgUtil.getRawChar(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int weight = ((Integer) v.get(1)).intValue(); return bitPos; }
/** * Reads the tail of an object in a DWG file Version 15 * * @param data Array of bytes obtained from the DWG binary file * @param offset Offset for this array of bytes * @return int New offset * @throws Exception If an unexpected bit value is found in the DWG file. Occurs when we are * looking for LwPolylines. */ public int readObjectTailV15(int[] data, int offset) throws Exception { int bitPos = offset; Vector v = null; if (getMode() == 0x0) { v = DwgUtil.getHandle(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int[] sh = new int[v.size() - 1]; for (int i = 1; i < v.size(); i++) { sh[i - 1] = ((Integer) v.get(i)).intValue(); } Vector shv = new Vector(); for (int i = 0; i < sh.length; i++) { shv.add(new Integer(sh[i])); } setSubEntityHandle(DwgUtil.handleBinToHandleInt(shv)); } for (int i = 0; i < getNumReactors(); i++) { v = DwgUtil.getHandle(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int[] handle = new int[v.size() - 1]; for (int j = 1; j < v.size(); j++) { handle[j - 1] = ((Integer) v.get(j)).intValue(); } } v = DwgUtil.getHandle(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int[] xh = new int[v.size() - 1]; for (int i = 1; i < v.size(); i++) { xh[i - 1] = ((Integer) v.get(i)).intValue(); } Vector xhv = new Vector(); for (int i = 0; i < xh.length; i++) { xhv.add(new Integer(xh[i])); } setXDicObjHandle(DwgUtil.handleBinToHandleInt(xhv)); v = DwgUtil.getHandle(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int[] lh = new int[v.size() - 1]; for (int i = 1; i < v.size(); i++) { lh[i - 1] = ((Integer) v.get(i)).intValue(); } setLayerHandleCode(lh[0]); Vector lhv = new Vector(); for (int i = 0; i < lh.length; i++) { lhv.add(new Integer(lh[i])); } setLayerHandle(DwgUtil.handleBinToHandleInt(lhv)); if (!isNoLinks()) { v = DwgUtil.getHandle(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int[] prev = new int[v.size() - 1]; for (int i = 1; i < v.size(); i++) { prev[i - 1] = ((Integer) v.get(i)).intValue(); } // obj.setPrevious(prev); v = DwgUtil.getHandle(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int[] next = new int[v.size() - 1]; for (int i = 1; i < v.size(); i++) { next[i - 1] = ((Integer) v.get(i)).intValue(); } // obj.setNext(next); } if (getLinetypeFlags() == 0x3) { v = DwgUtil.getHandle(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int[] lth = new int[v.size() - 1]; for (int i = 1; i < v.size(); i++) { lth[i - 1] = ((Integer) v.get(i)).intValue(); } // obj.setLinetype(lth); } if (getPlotstyleFlags() == 0x3) { v = DwgUtil.getHandle(data, bitPos); bitPos = ((Integer) v.get(0)).intValue(); int[] pth = new int[v.size() - 1]; for (int i = 1; i < v.size(); i++) { pth[i - 1] = ((Integer) v.get(i)).intValue(); } // obj.setPlotstyle(pth); } return bitPos; }