# # Copyright (c) 2003 Art Haas # # This file is part of PythonCAD. # # PythonCAD is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PythonCAD is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with PythonCAD; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # read in an AutoCAD R15 DWG file # import struct import array from PythonCAD.Generic import dwgbase from PythonCAD.Generic import dwgutil def initialize_dwg(dwg): _handle = dwg.getHandle() _handle.seek(0, 0) _buf = _handle.read(6) if _buf != 'AC1015': raise ValueError, "File not R15 DWG format" _handle.seek(7, 1) # padding and a revisionbyte _offset = struct.unpack('h', _handle.read(2))[0] # big-endian size if _size == 2: # section is just CRC break _data.fromfile(_handle, _size) # # the spec says 'last_handle' and 'last_loc' are initialized outside # the outer for loop - postings on OpenDWG forum say these variables # must be initialized for each section # _last_handle = 0 _last_loc = 0 _bitpos = 0 _bitmax = (_size - 2) * 8 # remove two bytes for section CRC # # there should be something done with the CRC for section ... # while _bitpos < _bitmax: _bitpos, _hoffset = dwgutil.get_modular_char(_data, _bitpos) _last_handle = _last_handle + _hoffset _bitpos, _foffset = dwgutil.get_modular_char(_data, _bitpos) _last_loc = _last_loc + _foffset dwg.addEntityOffset(_last_handle, _last_loc) # # read the common parts at the start of many entities # def header_read(ent, data, offset): _bitpos = offset _mode = dwgutil.get_bits(data, 2, _bitpos) _bitpos = _bitpos + 2 ent.setMode(_mode) _bitpos, _rnum = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_rnum) _bitpos, _nolinks = dwgutil.test_bit(data, _bitpos) ent.setNoLinks(_nolinks) _bitpos, _color = dwgutil.get_bit_short(data, _bitpos) ent.setColor(_color) _bitpos, _ltscale = dwgutil.get_bit_double(data, _bitpos) ent.setLinetypeScale(_ltscale) _ltflag = dwgutil.get_bits(data, 2, _bitpos) _bitpos = _bitpos + 2 ent.setLinetypeFlags(_ltflag) _psflag = dwgutil.get_bits(data, 2, _bitpos) _bitpos = _bitpos + 2 ent.setPlotstyleFlags(_psflag) _bitpos, _invis = dwgutil.get_bit_short(data, _bitpos) ent.setInvisiblity(_invis) _bitpos, _weight = dwgutil.get_raw_char(data, _bitpos) ent.setLineweight(_weight) return _bitpos # # read the common parts ant the end of many entities # def tail_read(ent, data, offset): _bitpos = offset _sh = None if ent.getMode() == 0x0: _bitpos, _sh = dwgutil.get_handle(data, _bitpos) ent.setSubentity(_sh) for _i in range(ent.getNumReactors()): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _xh = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_xh) _bitpos, _lh = dwgutil.get_handle(data, _bitpos) ent.setLayer(_lh) if ent.getNoLinks() is False: _bitpos, _prev = dwgutil.get_handle(data, _bitpos) ent.setPrevious(_prev) _bitpos, _next = dwgutil.get_handle(data, _bitpos) ent.setNext(_next) if ent.getLinetypeFlags() == 0x3: _bitpos, _lth = dwgutil.get_handle(data, _bitpos) ent.setLinetype(_lth) if ent.getPlotstyleFlags() == 0x3: _bitpos, _pth = dwgutil.get_handle(data, _bitpos) ent.setPlotstyle(_pth) return _bitpos # # read the various entities stored in the DWG file # def text_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _dflag = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('data_flag', _dflag) if not (_dflag & 0x1): _bitpos, _elev = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _x1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y1 = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('insertion_point', (_x1, _y1)) if not (_dflag & 0x2): _bitpos, _x = dwgutil.get_default_double(data, _bitpos, _x1) _bitpos, _y = dwgutil.get_default_double(data, _bitpos, _y1) ent.setEntityData('alignment_point', (_x, _y)) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _x = _y = 0.0 _z = 1.0 else: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _th = dwgutil.test_bit(data, _bitpos) if _flag: _th = 0.0 else: _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) if not (_dflag & 0x4): _bitpos, _oblique = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('oblique_angle', _oblique) if not (_dflag & 0x8): _bitpos, _rotation = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('rotation_angle', _rotation) _bitpos, _height = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('height', _height) if not (_dflag & 0x10): _bitpos, _width = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('width_factor', _width) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) if not (_dflag & 0x20): _bitpos, _gen = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('generation', _gen) if not (_dflag & 0x40): _bitpos, _halign = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('halign', _halign) if not (_dflag & 0x80): _bitpos, _valign = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('valign', _valign) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('style_handle', _handle) def attrib_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _dflag = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('data_flag', _dflag) if not (_dflag & 0x1): _bitpos, _elev = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _x1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y1 = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('insertion_point', (_x1, _y1)) if not (_dflag & 0x2): _bitpos, _x = dwgutil.get_default_double(data, _bitpos, _x1) _bitpos, _y = dwgutil.get_default_double(data, _bitpos, _y1) ent.setEntityData('alignment_point', (_x, _y)) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _x = _y = 0.0 _z = 1.0 else: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _th = dwgutil.test_bit(data, _bitpos) if _flag: _th = 0.0 else: _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) if not (_dflag & 0x4): _bitpos, _oblique = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('oblique_angle', _oblique) if not (_dflag & 0x8): _bitpos, _rotation = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('rotation_angle', _rotation) _bitpos, _height = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('height', _height) if not (_dflag & 0x10): _bitpos, _width = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('width_factor', _width) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) if not (_dflag & 0x20): _bitpos, _gen = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('generation', _gen) if not (_dflag & 0x40): _bitpos, _halign = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('halign', _halign) if not (_dflag & 0x80): _bitpos, _valign = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('valign', _valign) _bitpos, _tag = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('tag', _tag) _bitpos, _fl = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('field_length', _fl) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('style_handle', _handle) def attdef_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _dflag = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('data_flag', _dflag) if not (_dflag & 0x1): _bitpos, _elev = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _x1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y1 = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('insertion_point', (_x1, _y1)) if not (_dflag & 0x2): _bitpos, _x = dwgutil.get_default_double(data, _bitpos, _x1) _bitpos, _y = dwgutil.get_default_double(data, _bitpos, _y1) ent.setEntityData('alignment_point', (_x, _y)) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _x = _y = 0.0 _z = 1.0 else: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _th = dwgutil.test_bit(data, _bitpos) if _flag: _th = 0.0 else: _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) if not (_dflag & 0x4): _bitpos, _oblique = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('oblique_angle', _oblique) if not (_dflag & 0x8): _bitpos, _rotation = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('rotation_angle', _rotation) _bitpos, _height = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('height', _height) if not (_dflag & 0x10): _bitpos, _width = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('width_factor', _width) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) if not (_dflag & 0x20): _bitpos, _gen = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('generation', _gen) if not (_dflag & 0x40): _bitpos, _halign = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('halign', _halign) if not (_dflag & 0x80): _bitpos, _valign = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('valign', _valign) _bitpos, _tag = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('tag', _tag) _bitpos, _fl = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('field_length', _fl) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _prompt = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('prompt', _prompt) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('style_handle', _handle) def block_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _text) _bitpos = tail_read(ent, data, _bitpos) def endblk_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos = tail_read(ent, data, _bitpos) def seqend_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos = tail_read(ent, data, _bitpos) def insert_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('insertion_point', (_x, _y, _z)) _dflag = dwgutil.get_bits(data, 2, _bitpos) _bitpos = _bitpos + 2 if _dflag == 0x0: _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_default_double(data, _bitpos, _x) _bitpos, _z = dwgutil.get_default_double(data, _bitpos, _x) elif _dflag == 0x1: _x = 1.0 _bitpos, _y = dwgutil.get_default_double(data, _bitpos, _x) _bitpos, _z = dwgutil.get_default_double(data, _bitpos, _x) elif _dflag == 0x2: _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _y = _z = _x else: _x = _y = _z = 1.0 ent.setEntityData('scale', (_x, _y, _z)) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('rotation', _rot) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _hasattr = dwgutil.test_bit(data, _bitpos) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('block_header_handle', _handle) if _hasattr: _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('first_attrib_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('last_attrib_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('seqend_handle', _handle) def minsert_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('insertion_point', (_x, _y, _z)) _dflag = dwgutil.get_bits(data, 2, _bitpos) _bitpos = _bitpos + 2 if _dflag == 0x0: _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_default_double(data, _bitpos, _x) _bitpos, _z = dwgutil.get_default_double(data, _bitpos, _x) elif _dflag == 0x1: _x = 1.0 _bitpos, _y = dwgutil.get_default_double(data, _bitpos, _x) _bitpos, _z = dwgutil.get_default_double(data, _bitpos, _x) elif _dflag == 0x2: _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _y = _z = _x else: _x = _y = _z = 1.0 ent.setEntityData('scale', (_x, _y, _z)) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('rotation', _rot) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _hasattr = dwgutil.test_bit(data, _bitpos) _bitpos, _nc = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('column_count', _nc) _bitpos, _nr = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('row_count', _nr) _bitpos, _colsp = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('column_spacing', _colsp) _bitpos, _rowsp = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('row_spacing', _rowsp) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('block_header_handle', _handle) if _hasattr: _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('first_attrib_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('last_attrib_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('seqend_handle', _handle) def vertex2d_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('point', (_x, _y, _z)) _bitpos, _sw = dwgutil.get_bit_double(data, _bitpos) if _sw < 0.0: _sw = _ew = abs(_sw) else: _bitpos, _ew = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('start_width', _sw) ent.setEntityData('end_width', _ew) _bitpos, _bulge = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('bulge', _bulge) _bitpos, _tandir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('tangent_dir', _tandir) _bitpos = tail_read(ent, data, _bitpos) def vertex3d_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('point', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) def vertex_mesh_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('point', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) def vertex_pface_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('point', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) def vertex_pface_face_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _vi1 = dwgutil.get_bit_short(data, _bitpos) _bitpos, _vi2 = dwgutil.get_bit_short(data, _bitpos) _bitpos, _vi3 = dwgutil.get_bit_short(data, _bitpos) _bitpos, _vi4 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('points', (_vi1, _vi2, _vi3, _vi4)) _bitpos = tail_read(ent, data, _bitpos) def polyline2d_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flags = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _ctype = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('curve_type', _ctype) _bitpos, _sw = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('start_width', _sw) _bitpos, _ew = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('end_width', _ew) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _th = 0.0 else: _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _ex = _ey = 0.0 _ez = 1.0 else: _bitpos, _ex = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ey = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ez = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_ex, _ey, _ez)) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('first_vertex_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('last_vertext_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('seqend_handle', _handle) def polyline3d_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _sflags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('spline_flags', _sflags) _bitpos, _cflags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('closed_flags', _cflags) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('first_vertex_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('last_vertex_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('seqend_handle', _handle) def arc_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('center', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('radius', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _val = 0.0 else: _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _x = _y = 0.0 _z = 1.0 else: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('start_angle', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('end_angle', _val) _bitpos = tail_read(ent, data, _bitpos) def circle_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('center', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('radius', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _val = 0.0 else: _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _x = _y = 0.0 _z = 1.0 else: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) def line_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _zflag = dwgutil.test_bit(data, _bitpos) _bitpos, _x1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _x2 = dwgutil.get_default_double(data, _bitpos, _x1) _bitpos, _y1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y2 = dwgutil.get_default_double(data, _bitpos, _y1) if _zflag is False: _bitpos, _z1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _z2 = dwgutil.get_default_double(data, _bitpos, _z1) _p1 = (_x1, _y1, _z1) _p2 = (_x2, _y2, _z2) else: _p1 = (_x1, _y1) _p2 = (_x2, _y2) ent.setEntityData('p1', _p1) ent.setEntityData('p2', _p2) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _th = 0.0 else: _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _ex = _ey = 0.0 _ez = 1.0 else: _bitpos, _ex = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ey = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ez = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_ex, _ey, _ez)) _bitpos = tail_read(ent, data, _bitpos) def dimord_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('text_midpoint', (_x, _y)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('rotation', _rot) _bitpos, _hdir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('horiz_dir', _hdir) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_scale', (_x, _y, _z)) _bitpos, _ir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_rotation', _ir) _bitpos, _ap = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('attachment_point', _ap) _bitpos, _lss = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('linespace_style', _lss) _bitpos, _lsf = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('linespace_factor', _lsf) _bitpos, _am = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('actual_measurement', _am) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('12-pt', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('10-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('13-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('14-pt', (_x, _y, _z)) _bitpos, _flags2 = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags2', _flags) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('anon_block_handle', _handle) def dimlin_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('text_midpoint', (_x, _y)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('rotation', _rot) _bitpos, _hdir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('horiz_dir', _hdir) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_scale', (_x, _y, _z)) _bitpos, _ir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_rotation', _ir) _bitpos, _ap = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('attachment_point', _ap) _bitpos, _lss = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('linespace_style', _lss) _bitpos, _lsf = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('linespace_factor', _lsf) _bitpos, _am = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('actual_measurement', _am) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('12-pt', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('10-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('13-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('14-pt', (_x, _y, _z)) _bitpos, _elr = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ext_rotation', _elr) _bitpos, _dr = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('dimension_rotation', _dr) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('anon_block_handle', _handle) def dimalign_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('text_midpoint', (_x, _y)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('rotation', _rot) _bitpos, _hdir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('horiz_dir', _hdir) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_scale', (_x, _y, _z)) _bitpos, _ir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_rotation', _ir) _bitpos, _ap = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('attachment_point', _ap) _bitpos, _lss = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('linespace_style', _lss) _bitpos, _lsf = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('linespace_factor', _lsf) _bitpos, _am = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('actual_measurement', _am) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('12-pt', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('10-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('13-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('14-pt', (_x, _y, _z)) _bitpos, _elr = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ext_rotation', _elr) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('anon_block_handle', _handle) def dimang3p_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('text_midpoint', (_x, _y)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('text_rotation', _rot) _bitpos, _hdir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('horiz_dir', _hdir) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_scale', (_x, _y, _z)) _bitpos, _ir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_rotation', _ir) _bitpos, _ap = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('attachment_point', _ap) _bitpos, _lss = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('linespace_style', _lss) _bitpos, _lsf = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('linespace_factor', _lsf) _bitpos, _am = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('actual_measurement', _am) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('12-pt', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('10-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('13-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('14-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('15-pt', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('anon_block_handle', _handle) def dimang2l_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('text_midpoint', (_x, _y)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('text_rotation', _rot) _bitpos, _hdir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('horiz_dir', _hdir) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_scale', (_x, _y, _z)) _bitpos, _ir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_rotation', _ir) _bitpos, _ap = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('attachment_point', _ap) _bitpos, _lss = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('linespace_style', _lss) _bitpos, _lsf = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('linespace_factor', _lsf) _bitpos, _am = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('actual_measurement', _am) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('12-pt', (_x, _y)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('16-pt', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('13-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('14-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('15-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('10-pt', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('anon_block_handle', _handle) def dimrad_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('text_midpoint', (_x, _y)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('text_rotation', _rot) _bitpos, _hdir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('horiz_ir', _hdir) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_scale', (_x, _y, _z)) _bitpos, _ir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_rotation', _ir) _bitpos, _ap = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('attachment_point', _ap) _bitpos, _lss = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('linespace_style', _lss) _bitpos, _lsf = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('linespace_factor', _lsf) _bitpos, _am = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('actual_measurement', _am) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('12-pt', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('10-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('15-pt', (_x, _y, _z)) _bitpos, _llen = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('leader_length', _llen) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('anon_block_handle', _handle) def dimdia_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('text_midpoint', (_x, _y)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _flags = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('text_rotation', _rot) _bitpos, _hdir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('horiz_dir', _hdir) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_scale', (_x, _y, _z)) _bitpos, _ir = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_rotation', _ir) _bitpos, _ap = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('attachment_point', _ap) _bitpos, _lss = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('linespace_style', _lss) _bitpos, _lsf = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('linespace_factor', _lsf) _bitpos, _am = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('actual_measurement', _am) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('12-pt', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('10-pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('15-pt', (_x, _y, _z)) _bitpos, _llen = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('leader_length', _llen) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('anon_block_handle', _handle) def point_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('point', (_x, _y, _z)) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _th = 0.0 else: _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _x = _y = 0.0 _z = 1.0 else: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _xa = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('x_axis_angle', _xa) _bitpos = tail_read(ent, data, _bitpos) def face3d_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _nf = dwgutil.test_bit(data, _bitpos) # spec says RC, files say otherwise _bitpos, _zflag = dwgutil.test_bit(data, _bitpos) _bitpos, _cx = dwgutil.get_raw_double(data, _bitpos) _dcx = _cx _bitpos, _cy = dwgutil.get_raw_double(data, _bitpos) _dcy = _cy _cz = _dcz = 0.0 if _zflag is False: _bitpos, _cz = dwgutil.get_raw_double(data, _bitpos) _dcz = _cz _corner = (_cx, _cy, _cz) ent.setEntityData('corner1', _corner) _bitpos, _cx = dwgutil.get_default_double(data, _bitpos, _dcx) _dcx = _cx _bitpos, _cy = dwgutil.get_default_double(data, _bitpos, _dcy) _dcy = _cy _bitpos, _cz = dwgutil.get_default_double(data, _bitpos, _dcz) _dcz = _cz _corner = (_cx, _cy, _cz) ent.setEntityData('corner2', _corner) _bitpos, _cx = dwgutil.get_default_double(data, _bitpos, _dcx) _dcx = _cx _bitpos, _cy = dwgutil.get_default_double(data, _bitpos, _dcy) _dcy = _cy _bitpos, _cz = dwgutil.get_default_double(data, _bitpos, _dcz) _dcz = _cz _corner = (_cx, _cy, _cz) ent.setEntityData('corner3', _corner) _bitpos, _cx = dwgutil.get_default_double(data, _bitpos, _dcx) _bitpos, _cy = dwgutil.get_default_double(data, _bitpos, _dcy) _bitpos, _cz = dwgutil.get_default_double(data, _bitpos, _dcz) _corner = (_cx, _cy, _cz) ent.setEntityData('corner4', _corner) if _nf is False: _bitpos, _invis = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('flags', _invis) _bitpos = tail_read(ent, data, _bitpos) def pface_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _nv = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('vertex_count', _nv) _bitpos, _nf = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('face_count', _nf) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('first_vertex_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('last_vertex_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('seqend_handle', _handle) def mesh_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flags = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _ctype = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('curve_type', _ctype) _bitpos, _mvc = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('m_vertices', _mvc) _bitpos, _nvc = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('n_vertices', _nvc) _bitpos, _md = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('m_density', _md) _bitpos, _nd = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('n_density', _md) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('first_vertex_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('last_vertex_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('seqend_handle', _handle) def solid_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _th = 0.0 else: _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner1', (_x, _y, _elev)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner2', (_x, _y, _elev)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner3', (_x, _y, _elev)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner4', (_x, _y, _elev)) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _x = _y = 0.0 _z = 1.0 else: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) def trace_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _th = 0.0 else: _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner1', (_x, _y, _elev)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner2', (_x, _y, _elev)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner3', (_x, _y, _elev)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner4', (_x, _y, _elev)) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) if _flag: _x = _y = 0.0 _z = 1.0 else: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) def shape_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('insertion_point', (_x, _y, _z)) _bitpos, _scale = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('scale', _scale) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('rotation', _rot) _bitpos, _width = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('width', _width) _bitpos, _ob = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('oblique', _ob) _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) _bitpos, _snum = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('shape_number', _snum) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('shapefile_handle', _handle) def viewport_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('center', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('width', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('height', _val) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_target', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_direction', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_twist_angle', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_height', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('lens_length', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('front_clip_z', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('back_clip_z', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('snap_angle', _val) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('view_center', (_x, _y)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('snap_base', (_x, _y)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('snap_spacing', (_x, _y)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('grid_spacing', (_x, _y)) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('circle_zoom', _val) _bitpos, _flc = dwgutil.get_bit_long(data, _bitpos) _bitpos, _flags = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('status_flags', _flags) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('stylesheet', _text) _bitpos, _val = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('render_mode', _val) _bitpos, _val = dwgutil.test_bit(data, _bitpos) ent.setEntityData('ucs_at_origin', _val) _bitpos, _val = dwgutil.test_bit(data, _bitpos) ent.setEntityData('ucs_per_viewport', _val) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_origin', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_x_axis', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_y_axis', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('ucs_ortho_view', _val) _bitpos = tail_read(ent, data, _bitpos) if _flc: _handles = [] for _i in range(_flc): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handles) ent.setEntityData('frozen_layer_handles', _handles) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('clip_boundary_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('viewport_ent_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('named_ucs_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('base_ucs_handle', _handle) def ellipse_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('center', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('major_axis_vector', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('axis_ratio', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('start_angle', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('end_angle', _val) _bitpos = tail_read(ent, data, _bitpos) def spline_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _sc = dwgutil.get_bit_short(data, _bitpos) _bitpos, _deg = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('degree', _deg) _nknots = _nctlpts = _nfitpts = 0 _weight = False if _sc == 2: _bitpos, _ft = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('fit_tolerance', _ft) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('begin_tan_vector', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('end_tan_vector', (_x, _y, _z)) _bitpos, _nfitpts = dwgutil.get_bit_short(data, _bitpos) elif _sc == 1: _bitpos, _rat = dwgutil.test_bit(data, _bitpos) ent.setEntityData('rational', _rat) _bitpos, _closed = dwgutil.test_bit(data, _bitpos) ent.setEntityData('closed', _closed) _bitpos, _per = dwgutil.test_bit(data, _bitpos) ent.setEntityData('periodic', _per) _bitpos, _ktol = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('knot_tolerance', _ktol) _bitpos, _ctol = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('control_tolerance', _ctol) _bitpos, _nknots = dwgutil.get_bit_long(data, _bitpos) _bitpos, _nctlpts = dwgutil.get_bit_long(data, _bitpos) _bitpos, _weight = dwgutil.test_bit(data, _bitpos) else: raise ValueError, "Unexpected scenario: %d" % _sc if _nknots: _knotpts = [] for _i in range(_nknots): _bitpos, _knot = dwgutil.get_bit_double(data, _bitpos) _knotpts.append(_knot) ent.setEntityData('knot_points', _knotpts) if _nctlpts: _ctrlpts = [] _weights = [] for _i in range(_nctlpts): _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) _ctrlpts.append((_x, _y, _z)) if _weight: _bitpos, _w = dwgutil.get_bit_double(data, _bitpos) _weights.append(_w) ent.setEntityData('control_points', _ctrlpts) if _weight: ent.setEntityData('weights', _weights) if _nfitpts: _fitpts = [] for _i in range(_nfitpts): _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) _fitpts.append((_x, _y, _z)) ent.setEntityData('fit_points', _fitpts) _bitpos = tail_read(ent, data, _bitpos) def rsb_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _itype = dwgutil.get_bit_short(data, _bitpos) if (_itype == 64): _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) # print "unknown double: %g" % _val _bitpos, _cib = dwgutil.get_bit_long(data, _bitpos) _data = [] while (_cib != 0): _chars = [] for _i in range(_cib): _bitpos, _ch = dwgutil.get_raw_char(data, _bitpos) if (0x20 < _ch < 0x7e): _sat = 0x9f - _ch elif (_ch == ord("\t")): _sat = ord(" ") else: _sat = _ch _chars.append(_sat) _data.append("".join(_chars)) _bitpos, _cib = dwgutil.get_bit_long(data, _bitpos) else: raise ValueError, "Unexpected itemtype: %d" % _itype # # OpenDWG specs say there is stuff here but they haven't # figured it out, plus there is the tailing handles # skip this for now ... # _bitpos = tail_read(ent, data, _bitpos) def ray_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('point', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('vector', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) def xline_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('point', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('vector', (_x, _y, _z)) _bitpos = tail_read(ent, data, _bitpos) def dict_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_short(data, _bitpos) _bitpos, _ni = dwgutil.get_bit_long(data, _bitpos) _bitpos, _cflag = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('cloning_flag', _cflag) _bitpos, _hoflag = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('hard_owner_flag', _hoflag) # ??? if _ni: _strings = [] for _i in range(_ni): _bitpos, _text = dwgutil.get_text_string(data, _bitpos) _strings.append(_text) ent.setEntityData('strings', _strings) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ni: _items = [] for _i in range(_ni): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _items.append(_handle) ent.setEntityData('items', _items) def mtext_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('insertion_point', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('x_axis_direction', (_x, _y, _z)) _bitpos, _width = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('width', _width) _bitpos, _height = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('height', _height) _bitpos, _att = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('attachment', _att) _bitpos, _dd = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('drawing_dir', _dd) # ??? _bitpos, _exh = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ext_height', _exh) _bitpos, _exw = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ext_width', _exw) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('text', _text) _bitpos, _lss = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('line_spacing_style', _lss) _bitpos, _lsf = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('line_spacing_factor:', _lsf) _bitpos, _val = dwgutil.test_bit(data, _bitpos) # print "unknown bit: " + str(_val) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('style_handle', _handle) def leader_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _u = dwgutil.test_bit(data, _bitpos) # print "unknown bit: " + str(_u) _bitpos, _at = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('annotation_type', _at) _bitpos, _pt = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('path_type', _pt) _bitpos, _npts = dwgutil.get_bit_short(data, _bitpos) _points = [] for _i in range(_npts): _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) _points.append((_x, _y, _z)) ent.setEntityData('points', _points) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('end_pt_proj', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('x_direction', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('offset_block_ins_pt', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) # print "unknown: (%g,%g,%g)" % (_x, _y, _z) _bitpos, _bh = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('box_height', _bh) _bitpos, _bw = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('box_width', _bw) _bitpos, _hook = dwgutil.test_bit(data, _bitpos) ent.setEntityData('hooklineoxdir', _hook) # ??? _bitpos, _arrowon = dwgutil.test_bit(data, _bitpos) ent.setEntityData('arrowhead_on', _arrowon) _bitpos, _us = dwgutil.get_bit_short(data, _bitpos) # print "unknown short: %d" % _us _bitpos, _ub = dwgutil.test_bit(data, _bitpos) # print "unknown bit: " + str(_ub) _bitpos, _ub = dwgutil.test_bit(data, _bitpos) # print "unknown bit: " + str(_ub) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('associated_annotation_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) def tolerance_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('insertion_point', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('x_direction', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _ts = dwgutil.get_bit_short(data, _bitpos) # should this be text_string? ent.setEntityData('string', _ts) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_handle', _handle) def mline_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _scale = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('scale', _scale) _bitpos, _just = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('justification', _just) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('base_point', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _oc = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('open_closed', _oc) _bitpos, _lis = dwgutil.get_raw_char(data, _bitpos) _bitpos, _nv = dwgutil.get_bit_short(data, _bitpos) _points = [] for _i in range(_nv): _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) _vertex = (_x, _y, _z) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) _vertex_dir = (_x, _y, _z) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) _miter_dir = (_x, _y, _z) _lines = [] for _j in range(_lis): _bitpos, _ns = dwgutil.get_bit_short(data, _bitpos) _segparms = [] for _k in range(_ns): _bitpos, _sp = dwgutil.get_bit_double(data, _bitpos) _segparms.append(_sp) _bitpos, _na = dwgutil.get_bit_short(data, _bitpos) _fillparms = [] for _k in range(_na): _bitpos, _afp = dwgutil.get_bit_double(data, _bitpos) _fillparms.append(_afp) _lines.append((_segparms, _fillparms)) _points.append((_vertex, _vertex_dir, _miter_dir, _lines)) ent.setEntityData('points', _points) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('mline_style_object_handle', _handle) def block_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _enum = dwgutil.get_bit_short(data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _enum: _handles = [] for _i in range(_enum): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('code_2_handles', _handles) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('*model_space_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('*paper_space_handle', _handle) def block_header_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) # print "bitpos: %d" % _bitpos _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _anon = dwgutil.test_bit(data, _bitpos) ent.setEntityData('anonymous', _anon) # print "bitpos: %d" % _bitpos _bitpos, _hasatts = dwgutil.test_bit(data, _bitpos) ent.setEntityData('has_attrs', _hasatts) _bitpos, _bxref = dwgutil.test_bit(data, _bitpos) ent.setEntityData('blk_is_xref', _bxref) _bitpos, _xover = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xrefoverlaid', _xover) # print "bitpos: %d" % _bitpos _bitpos, _loaded = dwgutil.test_bit(data, _bitpos) ent.setEntityData('loaded', _loaded) _bitpos, _bx = dwgutil.get_bit_double(data, _bitpos) _bitpos, _by = dwgutil.get_bit_double(data, _bitpos) _bitpos, _bz = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('base_point', (_bx, _by, _bz)) # print "bitpos: %d" % _bitpos _bitpos, _pname = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('xref_pname', _pname) # print "bitpos: %d" % _bitpos _icount = 0 while True: _bitpos, _val = dwgutil.get_raw_char(data, _bitpos) if _val == 0: break _icount = _icount + 1 # print "insert count: %#x" % _icount # print "bitpos: %d" % _bitpos _bitpos, _desc = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('block_description', _desc) # print "bitpos: %d" % _bitpos _bitpos, _pdsize = dwgutil.get_bit_long(data, _bitpos) # print "preview data size: %d" % _pdsize # print "bitpos: %d" % _bitpos if _pdsize: _count = _pdsize * _icount _pdata = dwgutil.get_bits(data, _count, _bitpos) ent.setEntityData('preview_data', _pdata) _bitpos = _bitpos + _count _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('block_control_handle', _handle) # print "bitpos: %d" % _bitpos for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('block_entity_handle', _handle) if not _bxref and not _xover: _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('first_entity_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('last_entity_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('endblk_entity_handle', _handle) if _icount: _handles = [] for _i in range(_icount): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('insert_handles', _handles) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('layout_handle', _handle) def layer_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('code_2_handles', _handles) def layer_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _flags = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _color = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('color', _color) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('layer_control_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('plotstyle_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('linetype_handle', _handle) def shapefile_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('shapefile_handles', _handles) def shapefile_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _vert = dwgutil.test_bit(data, _bitpos) ent.setEntityData('vertical', _vert) _bitpos, _sf = dwgutil.test_bit(data, _bitpos) ent.setEntityData('shape_file', _sf) _bitpos, _fh = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('fixed_height', _fh) _bitpos, _fw = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('fixed_width', _fw) _bitpos, _ob = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('oblique_angle', _ob) _bitpos, _gen = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('generation', _gen) _bitpos, _lh = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('last_height', _lh) _bitpos, _fn = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('font_name', _fn) _bitpos, _bfn = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('big_font_name', _bfn) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('shapefile_control_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) def linetype_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('entity_count', _ne) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('handles', _handles) def linetype_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _desc = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('description', _desc) _bitpos, _pl = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('pattern_length', _pl) _bitpos, _align = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('alignment', _align) _bitpos, _nd = dwgutil.get_raw_char(data, _bitpos) if _nd: _dashes = [] for _i in range(_nd): _bitpos, _dl = dwgutil.get_bit_double(data, _bitpos) _bitpos, _cs = dwgutil.get_bit_short(data, _bitpos) _bitpos, _xo = dwgutil.get_raw_double(data, _bitpos) _bitpos, _yo = dwgutil.get_raw_double(data, _bitpos) _bitpos, _scale = dwgutil.get_bit_double(data, _bitpos) _bitpos, _rot = dwgutil.get_bit_double(data, _bitpos) _bitpos, _sf = dwgutil.get_bit_short(data, _bitpos) _dashes.append((_dl, _cs, _xo, _yo, _scale, _rot, _sf)) ent.setEntityData('dashes', _dashes) _strings = dwgutil.get_bits(data, 256, _bitpos) _bitpos = _bitpos + 256 ent.setEntityData('strings', _strings) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('linetype_control_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) def view_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('view_handles', _handles) def view_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _vh = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_height', _vh) _bitpos, _vw = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_width', _vw) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('view_center', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('target', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_dir', (_x, _y, _z)) _bitpos, _ta = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('twist_angle', _ta) _bitpos, _ll = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('lens_length', _ll) _bitpos, _fc = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('front_clip', _fc) _bitpos, _bc = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('back_clip', _bc) _vm = dwgutil.get_bits(data, 4, _bitpos) _bitpos = _bitpos + 4 ent.setEntityData('view_control_flags', _vm) _bitpos, _rmode = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('render_mode', _rmode) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('pspace_flag', _flag) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('view_control_handle', _handle) _bitpos, _val = dwgutil.test_bit(data, _bitpos) ent.setEntityData('associated_ucs', _val) if _val: _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_origin', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_x_axis', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_y_axis', (_x, _y, _z)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _ovtype = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('orthographic_view_type', _ovtype) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('base_ucs_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('named_ucs_handle', _handle) def ucs_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) # print "numentries: %d" % _ne _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('ucs_handles', _handles) def ucs_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('origin', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('x_direction', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('y_direction', (_x, _y, _z)) _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _bitpos, _ovtype = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('orthographic_view_type', _ovtype) _bitpos, _otype = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('orthographic_type', _otype) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('ucs_control_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('base_ucs_handle',_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('unknown_handle', _handle) def vport_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('vport_handles', _handles) def vport_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _text = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _text) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _flag) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_height', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('aspect_ratio', _val) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('view_center', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('target', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('view_dir', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('twist_angle', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('lens_length', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('front_clip', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('back_clip', _val) _flags = dwgutil.get_bits(data, 4, _bitpos) _bitpos = _bitpos + 4 ent.setEntityData('vport_flags', _flags) _bitpos, _val = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('render_mode', _val) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('lower_left', (_x, _y)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('upper_right', (_x, _y)) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('ucsfollow', _flag) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('circle_zoom', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('fast_zoom', _flag) _flags = dwgutil.get_bits(data, 2, _bitpos) _bitpos = _bitpos + 2 ent.setEntityData('ucsicon', _flags) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('grid_status', _flag) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('grid_spacing', (_x, _y)) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('snap_status', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('snap_style', _flag) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('snap_isopair', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('snap_rotation', _val) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('snap_base', (_x, _y)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('snap_spacing', (_x, _y)) _bitpos, _val = dwgutil.test_bit(data, _bitpos) ent.setEntityData('unknown_bit', _val) _bitpos, _val = dwgutil.test_bit(data, _bitpos) ent.setEntityData('ucs_per_viewport', _val) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('origin', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('x_direction', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('y_direction', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('orthographic_view_type', _val) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('vport_control_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('base_ucs_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('named_handle', _handle) def appid_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('appid_handles', _handles) def appid_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _u = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('unknown_char', _u) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('appid_control_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) def dimstyle_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) # print "bitpos: %d" % _bitpos _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) # print "numentries: %d" % _ne # print "bitpos: %d" % _bitpos _bitpos, _nc5 = dwgutil.get_raw_char(data, _bitpos) # code 5 handles not in spec # print "bitpos: %d" % _bitpos _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) # print "bitpos: %d" % _bitpos _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) # print "bitpos: %d" % _bitpos if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('dimstyle_handles', _handles) # print "bitpos: %d" % _bitpos if _nc5: _handles = [] for _i in range(_nc5): # not in spec _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('code_5_handles', _handles) # print "bitpos: %d" % _bitpos def dimstyle_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _string = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('DIMPOST', _string) _bitpos, _string = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('DIMAPOST', _string) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMSCALE', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMASZ', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMEXO', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMDLI', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMEXE', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMRND', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMDLE', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMTP', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMTM', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMTOL', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMLIM', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMTIH', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMTOH', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMSE1', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMSE2', _flag) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMTAD', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMZIN', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMAZIN', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMTXT', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMCEN', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMTSZ', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMALTF', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMLFAC', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMTVP', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMTFAC', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMGAP', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('DIMALTRND', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMALT', _flag) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMALTD', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMTOFL', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMSAH', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMTIX', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMSOXD', _flag) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMCLRD', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMCLRE', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMCLRT', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMADEC', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMDEC', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMTDEC', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMALTU', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMALTTD', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMAUNIT', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMFRAC', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMLUNIT', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMDSEP', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMTMOVE', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMJUST', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMSD1', _flag) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMSD2', _flag) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMTOLJ', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMTZIN', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMALTZ', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMALTTZ', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('DIMUPT', _flag) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMFIT', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMLWD', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('DIMLWE', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('unknown', _flag) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimstyle_control_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('shapefile_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('leader_block_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimblk_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimblk1_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('dimblk2_handle', _handle) def vpentity_control_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_short(data, _bitpos) # print "numentries: %d" % _ne _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('vpentity_handles', _handles) def vpentity_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('64-flag', _flag) _bitpos, _xrefplus1 = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('xrefplus', _xrefplus1) _bitpos, _xdep = dwgutil.test_bit(data, _bitpos) ent.setEntityData('xdep', _xdep) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('1-flag', _flag) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('vpentity_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('null_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('next_vpentity_handle', _handle) def group_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _unnamed = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('unnamed', _unnamed) _bitpos, _selectable = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('selectable', _selectable) _bitpos, _nh = dwgutil.get_bit_long(data, _bitpos) # print "numhandles: %d" % _nh _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _nh: _handles = [] for _i in range(_nh): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('entry_handles', _handles) def mlinestyle_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _desc = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('description', _desc) _bitpos, _flags = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('flags', _flags) _bitpos, _fc = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('fill_color', _fc) _bitpos, _sa = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('start_angle', _sa) _bitpos, _ea = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('end_angle', _ea) _bitpos, _lc = dwgutil.get_raw_char(data, _bitpos) if _lc: _lines = [] for _i in range(_lc): _bitpos, _offset = dwgutil.get_bit_double(data, _bitpos) _bitpos, _color = dwgutil.get_bit_short(data, _bitpos) _bitpos, _ltindex = dwgutil.get_bit_short(data, _bitpos) _lines.append((_offset, _color, _ltindex)) ent.setEntityData('lines', _lines) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) def dictionaryvar_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _iv = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('intval', _iv) _bitpos, _s = dwgutil.get_text_string(data, _bitpos) # spec says bit_short ent.setEntityData('string', _s) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) def hatch_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('z_coord', _z) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_x, _y, _z)) _bitpos, _name = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('name', _name) _bitpos, _sfill = dwgutil.test_bit(data, _bitpos) ent.setEntityData('solid_fill', _sfill) _bitpos, _assoc = dwgutil.test_bit(data, _bitpos) ent.setEntityData('associative', _assoc) _bitpos, _np = dwgutil.get_bit_long(data, _bitpos) # print "numpaths: %d" % _np _allbounds = 0 _pixel = 0 _paths = [] for _i in range(_np): _bitpos, _pf = dwgutil.get_bit_long(data, _bitpos) if _pf & 0x4: _pixel = _pixel + 1 if (_pf & 0x2): # POLYLINE _bitpos, _bulges = dwgutil.test_bit(data, _bitpos) _bitpos, _closed = dwgutil.test_bit(data, _bitpos) _bitpos, _nps = dwgutil.get_bit_long(data, _bitpos) _segs = [] for _j in range(_nps): _bitpos, _x1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y1 = dwgutil.get_raw_double(data, _bitpos) _bulge = None if (_bulges): _bitpos, _bulge = dwgutil.get_bit_double(data, _bitpos) _segs.append((_x1, _y1, _bulge)) _paths.append(('polyline', _segs)) else: _bitpos, _nps = dwgutil.get_bit_long(data, _bitpos) _segs = [] for _j in range(_nps): _bitpos, _pts = dwgutil.get_raw_char(data, _bitpos) if (_pts == 1): # LINE _bitpos, _x1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _x2 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y2 = dwgutil.get_raw_double(data, _bitpos) _segs.append(('line', _x1, _y1, _x2, _y2)) elif (_pts == 2): # CIRCULAR ARC _bitpos, _xc = dwgutil.get_raw_double(data, _bitpos) _bitpos, _yc = dwgutil.get_raw_double(data, _bitpos) _bitpos, _r = dwgutil.get_bit_double(data, _bitpos) _bitpos, _sa = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ea = dwgutil.get_bit_double(data, _bitpos) _bitpos, _isccw = dwgutil.test_bit(data, _bitpos) _segs.append(('arc', _xc, _yc, _r, _sa, _ea, _isccw)) elif (_pts == 3): # ELLIPTICAL ARC _bitpos, _xc = dwgutil.get_raw_double(data, _bitpos) _bitpos, _yc = dwgutil.get_raw_double(data, _bitpos) _bitpos, _xe = dwgutil.get_raw_double(data, _bitpos) _bitpos, _ye = dwgutil.get_raw_double(data, _bitpos) _bitpos, _ratio = dwgutil.get_bit_double(data, _bitpos) _bitpos, _sa = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ea = dwgutil.get_bit_double(data, _bitpos) _bitpos, _isccw = dwgutil.test_bit(data, _bitpos) _segs.append(('elliptical_arc', _xc, _yc, _xe, _ye, _ratio, _sa, _ea, _isccw)) elif (_pts == 4): # SPLINE _bitpos, _deg = dwgutil.get_bit_long(data, _bitpos) _bitpos, _israt = dwgutil.test_bit(data, _bitpos) _bitpos, _isper = dwgutil.test_bit(data, _bitpos) _bitpos, _nknots = dwgutil.get_bit_long(data, _bitpos) _bitpos, _nctlpts = dwgutil.get_bit_long(data, _bitpos) _knots = [] for _k in range(_nknots): _bitpos, _knot = dwgutil.get_bit_double(data, _bitpos) _knots.append(_knot) _ctlpts = [] for _k in range(_nctlpts): _bitpos, _x1 = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y1 = dwgutil.get_raw_double(data, _bitpos) _weight = None if (_israt): _bitpos, _weight = dwgutil.get_bit_double(data, _bitpos) _ctlpts.append((_x1, _y1, _weight)) _segs.append(('spline', _israt, _isper, _knots, _ctlpts)) else: raise ValueError, "Unexpected path type: %d" % _pts _paths.append(('stdpath', _segs)) _bitpos, _nbh = dwgutil.get_bit_long(data, _bitpos) _allbounds = _allbounds + _nbh _bitpos, _style = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('style', _style) _bitpos, _pattype = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('pattern_type', _pattype) if not _sfill: _bitpos, _angle = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('fill_angle', _angle) _bitpos, _sos = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('fill_scale_or_spacing', _sos) _bitpos, _dh = dwgutil.test_bit(data, _bitpos) ent.setEntityData('fill_doublehatch', _dh) _bitpos, _ndf = dwgutil.get_bit_short(data, _bitpos) _lines = [] for _i in range(_ndf): _bitpos, _angle = dwgutil.get_bit_double(data, _bitpos) _bitpos, _x1 = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y1 = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ox = dwgutil.get_bit_double(data, _bitpos) _bitpos, _oy = dwgutil.get_bit_double(data, _bitpos) _bitpos, _nds = dwgutil.get_bit_short(data, _bitpos) _dashes = [] for _j in range(_nds): _bitpos, _dl = dwgutil.get_bit_double(data, _bitpos) _dashes.append(_dl) _lines.append((_angle, _x1, _y1, _ox, _oy, _dashes)) ent.setEntityData('fill_lines', _lines) if _pixel: _bitpos, _ps = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('pixel_size', _ps) _bitpos, _nsp = dwgutil.get_bit_long(data, _bitpos) if _nsp: _seedpts = [] for _i in range(_nsp): _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) _seedpts.append((_x, _y)) ent.setEntityData('seed_points', _seedpts) _bitpos = tail_read(ent, data, _bitpos) if _allbounds: _boundaries = [] for _i in range(_allbounds): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _boundaries.append(_handle) ent.setEntityData('boundary_handles', _boundaries) def idbuffer_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _u = dwgutil.get_raw_char(data, _bitpos) # print "unknown char: %#02x" % _u _bitpos, _nids = dwgutil.get_bit_long(data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _nids: _handles = [] for _i in range(_nids): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('objid_handles', _handles) def image_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _val = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('class_version', _val) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('pt0', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('uvec', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('vvec', (_x, _y, _z)) _bitpos, _val = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('height', _val) _bitpos, _val = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('width', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('display_props', _val) _bitpos, _flag = dwgutil.test_bit(data, _bitpos) ent.setEntityData('clipping', _flag) _bitpos, _val = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('brightness', _val) _bitpos, _val = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('contrast', _val) _bitpos, _val = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('fade', _val) _bitpos, _cbt = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('clip_type', _cbt) if (_cbt == 1): _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner1', (_x, _y)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('corner2', (_x, _y)) else: _bitpos, _ncv = dwgutil.get_bit_long(data, _bitpos) _verts = [] for _i in range(_ncv): _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) _verts.append((_x, _y)) ent.setEntityData('vertices', _verts) _bitpos = tail_read(ent, data, _bitpos) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('imagedef_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('imagedef_reactor_handle', _handle) def imagedef_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _clsver = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('class_version', _clsver) _bitpos, _val = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('width', _val) _bitpos, _h = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('height', _val) _bitpos, _filepath = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('filepath', _filepath) _bitpos, _isloaded = dwgutil.test_bit(data, _bitpos) ent.setEntityData('is_loaded', _isloaded) _bitpos, _res = dwgutil.get_raw_char(data, _bitpos) ent.setEntityData('res_units', _res) _bitpos, _val = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('pixel_width', _val) _bitpos, _val = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('pixel_height', _val) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) def imagedefreactor_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _clsver = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('class version', _clsver) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) def layer_index_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ts1 = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('timestamp1', _ts1) _bitpos, _ts2 = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('timestamp2', _ts2) _bitpos, _ne = dwgutil.get_bit_long(data, _bitpos) if _ne: _indicies = [] for _i in range(_ne): _bitpos, _il = dwgutil.get_bit_long(data, _bitpos) _bitpos, _is = dwgutil.get_text_string(data, _bitpos) _indicies.append((_il, _is)) ent.setEntityData('index_handles', _indicies) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) if _ne: _entries = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _entries.append(_handle) ent.setEntityData('entry_handles', _entries) def layout_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _string = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('page_setup_name', _string) _bitpos, _string = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('printer_config', _string) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('plot_layout_flags', _val) _bitpos, _lm = dwgutil.get_bit_double(data, _bitpos) _bitpos, _bm = dwgutil.get_bit_double(data, _bitpos) _bitpos, _rm = dwgutil.get_bit_double(data, _bitpos) _bitpos, _tm = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('margins', (_lm, _bm, _rm, _tm)) _bitpos, _pw = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ph = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('paper_dim', (_pw, _ph)) _bitpos, _string = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('paper_size', _string) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('plot_origin', (_x, _y)) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('paper_units', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('plot_rotation', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('plot_type', _val) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('window_min', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('window_max', (_x, _y)) _bitpos, _string = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('plot_view_name', _string) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('real_world_units', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('drawing_units', _val) _bitpos, _string = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('current_style_sheet', _string) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('scale_type', _val) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('scale_factor', _val) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('paper_image_origin', (_x, _y)) _bitpos, _string = dwgutil.get_text_string(data, _bitpos) ent.setEntityData('layout_name', _string) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('tab_order', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('layout_flag', _val) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_origin', (_x, _y, _z)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('layout_minima', (_x, _y)) _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) ent.setEntityData('layout_maxima', (_x, _y)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ins_point', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_x_axis', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('ucs_y_axis', (_x, _y, _z)) _bitpos, _val = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _val) _bitpos, _val = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('orthoview_type', _val) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extmin', (_x, _y, _z)) _bitpos, _x = dwgutil.get_bit_double(data, _bitpos) _bitpos, _y = dwgutil.get_bit_double(data, _bitpos) _bitpos, _z = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extmax', (_x, _y, _z)) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('paperspace_block_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('last_active_viewport_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('base_ucs_handle', _handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('named_ucs_handle', _handle) def lwpline_reader(ent, data, offset): _bitpos = offset _bitpos = header_read(ent, data, _bitpos) _bitpos, _flag = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('flag', _flag) _cw = 0.0 if (_flag & 0x4): _bitpos, _cw = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('const_width', _cw) _elev = 0.0 if (_flag & 0x8): _bitpos, _elev = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('elevation', _elev) _th = 0.0 if (_flag & 0x2): _bitpos, _th = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('thickness', _th) _nx = _ny = _nz = 0.0 if (_flag & 0x1): _bitpos, _nx = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ny = dwgutil.get_bit_double(data, _bitpos) _bitpos, _nz = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('normal', (_nx, _ny, _nz)) _bitpos, _np = dwgutil.get_bit_long(data, _bitpos) _nb = 0 if (_flag & 0x10): _bitpos, _nb = dwgutil.get_bit_long(data, _bitpos) _nw = 0 if (_flag & 0x20): _bitpos, _nw = dwgutil.get_bit_long(data, _bitpos) _verticies = [] _bitpos, _vx = dwgutil.get_raw_double(data, _bitpos) _bitpos, _vy = dwgutil.get_raw_double(data, _bitpos) # print "first vertex: (%g,%g)" % (_vx, _vy) _verticies.append((_vx, _vy)) for _i in range((_np - 1)): _bitpos, _x = dwgutil.get_default_double(data, _bitpos, _vx) _bitpos, _y = dwgutil.get_default_double(data, _bitpos, _vy) _verticies.append((_x, _y)) _vx = _x _vy = _y ent.setEntityData('verticies', _verticies) if _nb: _bulges = [] for _i in range(_nb): _bitpos, _bulge = dwgutil.get_raw_double(data, _bitpos) _bulges.append(_bulge) ent.setEntityData('bulges', _bulges) if _nw: _widths = [] for _i in range(_nw): _bitpos, _sw = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ew = dwgutil.get_bit_double(data, _bitpos) _widths.append((_sw, _ew)) ent.setEntityData('widths', _widths) _bitpos = tail_read(ent, data, _bitpos) def rastervariables_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _clsver = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('class_version', _clsver) _bitpos, _df = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('dispfrm', _df) _bitpos, _dq = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('dispqual', _dq) _bitpos, _units = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('units', _units) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) def sortentstable_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ne = dwgutil.get_bit_long(data, _bitpos) # print "numentries: %d" % _ne if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('sort_handles', _handles) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) # # the spec says there is an owner handle here # # _bitpos, _handle = dwgutil.get_handle(data, _bitpos) # print "owner handle: " + str(_handle) if _ne: _handles = [] for _i in range(_ne): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) _handles.append(_handle) ent.setEntityData('obj_handles', _handles) def spatial_filter_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _npts = dwgutil.get_bit_short(data, _bitpos) if _npts: _points = [] for _i in range(_npts): _bitpos, _x = dwgutil.get_raw_double(data, _bitpos) _bitpos, _y = dwgutil.get_raw_double(data, _bitpos) _points.append((_x, _y)) ent.setEntityData('points', _points) _bitpos, _ex = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ey = dwgutil.get_bit_double(data, _bitpos) _bitpos, _ez = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('extrusion', (_ex, _ey, _ez)) _bitpos, _cx = dwgutil.get_bit_double(data, _bitpos) _bitpos, _cy = dwgutil.get_bit_double(data, _bitpos) _bitpos, _cz = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('clip_bound_origin', (_cx, _cy, _cz)) _bitpos, _db = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('disp_bound', _db) _bitpos, _fc = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('front_clip_on', _fc) _bitpos, _fd = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('front_dist', _fd) _bitpos, _bc = dwgutil.get_bit_short(data, _bitpos) ent.setEntityData('back_clip_on', _bc) _bitpos, _bd = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('back_dist', _bd) _invtr = array.array('d', 12 * [0.0]) for _i in range(12): _bitpos, _invtr[_i] = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('inv_array', _invtr) _clptr = array.array('d', 12 * [0.0]) for _i in range(12): _bitpos, _clptr[_i] = dwgutil.get_bit_double(data, _bitpos) ent.setEntityData('clip_array', _clptr) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setEntityData('parent_handle', _handle) for _i in range(_nr): _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.addReactor(_handle) _bitpos, _handle = dwgutil.get_handle(data, _bitpos) ent.setXdicobj(_handle) def spatial_index_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ts1 = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('timestamp1', _ts1) _bitpos, _ts2 = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('timestamp2', _ts2) # # fixme - lots of unknown stuff here # ... def xrecord_reader(ent, data, offset): _bitpos = offset _bitpos, _nr = dwgutil.get_bit_long(data, _bitpos) ent.setNumReactors(_nr) _bitpos, _ndb = dwgutil.get_bit_long(data, _bitpos) ent.setEntityData('data_bytes', _ndb) # # fixme - more stuff here ... # _objprops = [ (False, None), # Unused [0x00] (True, text_reader), # Text (True, attrib_reader), # Attrib (True, attdef_reader), # Attdef (True, block_reader), # Block (True, endblk_reader), # Endblk (True, seqend_reader), # Seqend (True, insert_reader), # Insert (True, minsert_reader), # Minsert [0x08] (False, None), # Skipped [0x09] (True, vertex2d_reader), # Vertex_2D (True, vertex3d_reader), # Vertex_3D (True, vertex_mesh_reader), # Vertex_mesh (True, vertex_pface_reader), # Vertex_pface (True, vertex_pface_face_reader), # Vertex_pface_face (True, polyline2d_reader), # Polyline_2D (True, polyline3d_reader), # Polyline_3D [0x10] (True, arc_reader), # Arc, (True, circle_reader), # Circle, (True, line_reader), # Line (True, dimord_reader), # Dimension_ord (True, dimlin_reader), # Dimension_lin (True, dimalign_reader), # Dimension_align (True, dimang3p_reader), # Dimension_angle_3pt (True, dimang2l_reader), # Dimension_angle_2ln [0x18] (True, dimrad_reader), # Dimension_radius (True, dimdia_reader), # Dimension_diameter (True, point_reader), # Point (True, face3d_reader), # Face3D (True, pface_reader), # Polyline_pface (True, mesh_reader), # Polyline_mesh (True, solid_reader), # Solid (True, trace_reader), # Trace [0x20] (True, shape_reader), # Shape (True, viewport_reader), # Viewport (True, ellipse_reader), # Ellipse (True, spline_reader), # Spline (True, rsb_reader), # Region (True, rsb_reader), # Solid3D (True, rsb_reader), # Body (True, ray_reader), # Ray [0x28] (True, xline_reader), # Xline (False, dict_reader), # Dictionary (False, None), # Skipped [0x2b] (True, mtext_reader), # Mtext (True, leader_reader), # Leader (True, tolerance_reader), # Tolerance (True, mline_reader), # Mline (False, block_control_reader), # Block control [0x30] (False, block_header_reader), # Block header (False, layer_control_reader), # Layer control (False, layer_reader), # Layer (False, shapefile_control_reader), # Style control (False, shapefile_reader), # Style (False, None), # Skipped [0x36] (False, None), # Skipped [0x37] (False, linetype_control_reader), # Linetype control [0x38] (False, linetype_reader), # Linetype (False, None), # Skipped [0x3a] (False, None), # Skipped [0x3b] (False, view_control_reader), # View control [0x3c] (False, view_reader), # View (False, ucs_control_reader), # UCS control, (False, ucs_reader), # UCS (False, vport_control_reader), # Vport control [0x40] (False, vport_reader), # Vport (False, appid_control_reader), # Appid control (False, appid_reader), # Appid (False, dimstyle_control_reader), # Dimstyle control (False, dimstyle_reader), # Dimstyle (False, vpentity_control_reader), # VP ENT HDR control (False, vpentity_reader), # VP ENT HDR (False, group_reader), # Group [0x48] (False, mlinestyle_reader), # Mlinestyle ] _vobjmap = { 'DICTIONARYVAR' : dictionaryvar_reader, 'HATCH' : hatch_reader, 'IDBUFFER' : idbuffer_reader, 'IMAGE' : image_reader, 'IMAGEDEF' : imagedef_reader, 'IMAGEDEFREACTOR' : imagedefreactor_reader, 'LAYER_INDEX' : layer_index_reader, 'LAYOUT' : layout_reader, 'LWPLINE' : lwpline_reader, # 'OLE2FRAME' : ole2frame_reader, 'RASTERVARIABLES' : rastervariables_reader, 'SORTENTSTABLE' : sortentstable_reader, 'SPATIAL_FILTER' : spatial_filter_reader, 'SPATIAL_INDEX' : spatial_index_reader, 'XRECORD' : xrecord_reader } def get_object(dwg, offset): _handle = dwg.getHandle() _handle.seek(offset, 0) _size = dwgutil.get_modular_short(_handle) _data = array.array('B') _data.fromfile(_handle, _size) _ent = dwgbase.dwgEntity() # _ent.setEntityData('bitstream', data) # save the bitstream data _bitpos = 0 _bitpos, _type = dwgutil.get_bit_short(_data, _bitpos) _ent.setType(_type) _bitpos, _objbsize = dwgutil.get_raw_long(_data, _bitpos) _ent.setEntityData('size_in_bits', _objbsize) _bitpos, _handle = dwgutil.get_handle(_data, _bitpos) _ent.setHandle(_handle) _bitpos, _extdata = dwgutil.read_extended_data(_data, _bitpos) _ent.setEntityData('extended_data', _extdata) # # use the objprops table to determine if the _entity # has a graphics bit and the appropriate bitstream # decoding function # _gflag = False _reader = None if _type < len(_objprops): _gflag, _reader = _objprops[_type] if _gflag: _bitpos, _val = dwgutil.test_bit(_data, _bitpos) if _val is True: _bitpos, _size = dwgutil.get_raw_long(_data, _bitpos) _bgsize = _size * 8 _gidata = dwgutil.get_bits(_data, _bgsize, _bitpos) _ent.setEntityData('graphic_data', _gidata) _bitpos = _bitpos + _bgsize if _reader is not None: _reader(_ent, _data, _bitpos) else: _stype = dwg.getDxfName(_type) if _stype is not None: if _stype == 'HATCH': # where is the data kept? _bitpos, _val = dwgutil.test_bit(_data, _bitpos) if _stype in _vobjmap: _vobjmap[_stype](_ent, _data, _bitpos) return _ent def read_second_header(handle, offset): # print "read_second_header() ..." handle.seek(offset, 0) _at = handle.tell() # print "offset at %d [%#x]" % (_at, _at) _s = array.array('B') _s.fromfile(handle, 16) if _s[0] != 0xd4: raise ValueError, "_s[0] != 0xd4" if _s[1] != 0x7b: raise ValueError, "_s[1] != 0x7b" if _s[2] != 0x21: raise ValueError, "_s[2] != 0x21" if _s[3] != 0xce: raise ValueError, "_s[3] != 0xce" if _s[4] != 0x28: raise ValueError, "_s[4] != 0x28" if _s[5] != 0x93: raise ValueError, "_s[5] != 0x93" if _s[6] != 0x9f: raise ValueError, "_s[6] != 0x9f" if _s[7] != 0xbf: raise ValueError, "_s[7] != 0xbf" if _s[8] != 0x53: raise ValueError, "_s[8] != 0x53" if _s[9] != 0x24: raise ValueError, "_s[9] != 0x24" if _s[10] != 0x40: raise ValueError, "_s[10] != 0x40" if _s[11] != 0x09: raise ValueError, "_s[11] != 0x09" if _s[12] != 0x12: raise ValueError, "_s[12] != 0x12" if _s[13] != 0x3c: raise ValueError, "_s[13] != 0x3c" if _s[14] != 0xaa: raise ValueError, "_s[14] != 0xaa" if _s[15] != 0x01: raise ValueError, "_s[15] != 0x01" # _at = handle.tell() # print "offset at %d [%#x]" % (_at, _at) _size = struct.unpack('