def transform(self, m: "Matrix44") -> "Tolerance": """Transform the TOLERANCE entity by transformation matrix `m` inplace.""" self.dxf.insert = m.transform(self.dxf.insert) self.dxf.x_axis_vector = m.transform_direction(self.dxf.x_axis_vector) self.dxf.extrusion, _ = transform_extrusion(self.dxf.extrusion, m) self.post_transform(m) return self
def transform(self, m: Matrix44) -> 'MText': """ Transform the MTEXT entity by transformation matrix `m` inplace. """ dxf = self.dxf old_extrusion = Vec3(dxf.extrusion) new_extrusion, _ = transform_extrusion(old_extrusion, m) if dxf.hasattr('rotation') and not dxf.hasattr('text_direction'): # MTEXT is not an OCS entity, but I don't know how else to convert # a rotation angle for an entity just defined by an extrusion vector. # It's correct for the most common case: extrusion=(0, 0, 1) ocs = OCS(old_extrusion) dxf.text_direction = ocs.to_wcs(Vec3.from_deg_angle(dxf.rotation)) dxf.discard('rotation') old_text_direction = Vec3(dxf.text_direction) new_text_direction = m.transform_direction(old_text_direction) old_char_height_vec = old_extrusion.cross( old_text_direction).normalize(dxf.char_height) new_char_height_vec = m.transform_direction(old_char_height_vec) oblique = new_text_direction.angle_between(new_char_height_vec) dxf.char_height = new_char_height_vec.magnitude * math.sin(oblique) if dxf.hasattr('width'): width_vec = old_text_direction.normalize(dxf.width) dxf.width = m.transform_direction(width_vec).magnitude dxf.insert = m.transform(dxf.insert) dxf.text_direction = new_text_direction dxf.extrusion = new_extrusion return self
def transform(self, m: Matrix44) -> "MText": """Transform the MTEXT entity by transformation matrix `m` inplace.""" dxf = self.dxf old_extrusion = Vec3(dxf.extrusion) new_extrusion, _ = transform_extrusion(old_extrusion, m) self.convert_rotation_to_text_direction() old_text_direction = Vec3(dxf.text_direction) new_text_direction = m.transform_direction(old_text_direction) old_vertical_direction = old_extrusion.cross(old_text_direction) old_char_height_vec = old_vertical_direction.normalize(dxf.char_height) new_char_height_vec = m.transform_direction(old_char_height_vec) oblique = new_text_direction.angle_between(new_char_height_vec) dxf.char_height = new_char_height_vec.magnitude * math.sin(oblique) if dxf.hasattr("width"): width_vec = old_text_direction.normalize(dxf.width) dxf.width = m.transform_direction(width_vec).magnitude dxf.insert = m.transform(dxf.insert) dxf.text_direction = new_text_direction dxf.extrusion = new_extrusion if self.has_columns: hscale = m.transform_direction( old_text_direction.normalize()).magnitude vscale = m.transform_direction( old_vertical_direction.normalize()).magnitude self._columns.transform(m, hscale, vscale) # type: ignore self.post_transform(m) return self
def transform(self, m: 'Matrix44') -> 'Leader': """ Transform LEADER entity by transformation matrix `m` inplace. """ self.vertices = list(m.transform_vertices(self.vertices)) self.dxf.normal_vector, _ = transform_extrusion( self.dxf.normal_vector, m) # ??? self.dxf.horizontal_direction = m.transform_direction( self.dxf.horizontal_direction) return self
def transform(self, m: 'Matrix44') -> 'Tolerance': """ Transform TOLERANCE entity by transformation matrix `m` inplace. .. versionadded:: 0.13 """ self.dxf.insert = m.transform(self.dxf.insert) self.dxf.x_axis_vector = m.transform_direction(self.dxf.x_axis_vector) self.dxf.extrusion, _ = transform_extrusion(self.dxf.extrusion, m) return self
def transform(self, m: 'Matrix44') -> 'Leader': """ Transform LEADER entity by transformation matrix `m` inplace. .. versionadded:: 0.13 """ self.vertices = list(m.transform_vertices(self.vertices)) self.dxf.normal_vector, _ = transform_extrusion( self.dxf.normal_vector, m) # ??? self.dxf.horizontal_direction = m.transform_direction( self.dxf.horizontal_direction) # Transform optional attributes if self.dxf.hasattr('hookline_direction'): self.dxf.hookline_direction = m.transform_direction( self.dxf.hookline_direction) return self