def _validate_dxf_version(self, version: str) -> str: version = version.upper() version = acad_release_to_dxf_version.get(version, version) # translates 'R12' -> 'AC1009' if version not in versions_supported_by_save: raise DXFVersionError(f'Unsupported DXF version "{version}".') if version == DXF12: if self._dxfversion > DXF12: logger.warning(f'Downgrade from DXF {self.acad_release} to R12 may create an invalid DXF file.') elif version < self._dxfversion: logger.info(f'Downgrade from DXF {self.acad_release} to {acad_release[version]} can cause lost of features.') return version
def __init__(self, dxfversion=DXF2013): self.entitydb = EntityDB() self.dxffactory = EntityFactory(self) self.tracker = Tracker() target_dxfversion = dxfversion.upper() self._dxfversion: str = acad_release_to_dxf_version.get( target_dxfversion, target_dxfversion) if self._dxfversion not in versions_supported_by_new: raise DXFVersionError( f'Unsupported DXF version "{self.dxfversion}".') # Store original dxf version if loaded (and maybe converted R13/14) from file. self._loaded_dxfversion: Optional[str] = None self.encoding: str = 'cp1252' # read/write self.filename: Optional[str] = None # named objects dictionary self.rootdict: 'Dictionary' = None # DXF sections self.header: HeaderSection = None self.classes: ClassesSection = None self.tables: TablesSection = None self.blocks: BlocksSection = None self.entities: EntitySection = None self.objects: ObjectsSection = None # DXF R2013 and later self.acdsdata: AcDsDataSection = None self.stored_sections = [] self.layouts: Layouts = None self.groups: GroupCollection = None self.materials: MaterialCollection = None self.mleader_styles: MLeaderStyleCollection = None self.mline_styles: MLineStyleCollection = None self._acad_compatible = True # will generated DXF file compatible with AutoCAD self._dimension_renderer = DimensionRenderer( ) # set DIMENSION rendering engine self._acad_incompatibility_reason = set( ) # avoid multiple warnings for same reason # Don't create any new entities here: # New created handles could collide with handles loaded from DXF file. assert len(self.entitydb) == 0
def __init__(self, dxfversion=DXF2013): self.entitydb = EntityDB() self.dxffactory = EntityFactory(self) self.tracker = Tracker() # still required # Targeted DXF version, but drawing could be exported as another DXF version. # If target version is set, it is possible to warn user, if they try to use unsupported features, where they # use it and not at exporting, where the location of the code who created that features is not known. target_dxfversion = dxfversion.upper() self._dxfversion = acad_release_to_dxf_version.get( target_dxfversion, target_dxfversion) self._loaded_dxfversion = None # if loaded from file, store original dxf version self.encoding = 'cp1252' self.filename = None # type: str # read/write # named objects dictionary self.rootdict = None # type: Dictionary # DXF sections self.header = None # type: HeaderSection self.classes = None # type: ClassesSection self.tables = None # type: TablesSection self.blocks = None # type: BlocksSection self.entities = None # type: EntitySection self.objects = None # type: ObjectsSection # DXF R2013 and later self.acdsdata = None # type: AcDsDataSection self.stored_sections = [] self.layouts = None # type: Layouts self.groups = None # type: GroupCollection # read only self.materials = None # type: MaterialCollection # read only self.mleader_styles = None # type: MLeaderStyleCollection # read only self.mline_styles = None # type: MLineStyleCollection # read only self._acad_compatible = True # will generated DXF file compatible with AutoCAD self._dimension_renderer = DimensionRenderer( ) # set DIMENSION rendering engine self._acad_incompatibility_reason = set( ) # avoid multiple warnings for same reason # Don't create any new entities here: # New created handles could collide with handles loaded from DXF file. assert len(self.entitydb) == 0