Example #1
0
 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
Example #2
0
    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
Example #3
0
    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
Example #4
0
 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
Example #5
0
    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
Example #6
0
    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