コード例 #1
0
ファイル: matplotlib.py プロジェクト: Rahulghuge94/ezdxf
 def draw_line(self, start: Vec3, end: Vec3, properties: Properties):
     # matplotlib draws nothing for a zero-length line:
     if start.isclose(end):
         self.draw_point(start, properties)
     else:
         self._line_renderer.draw_line(start, end, properties,
                                       self._get_z())
コード例 #2
0
 def draw_line(self, start: Vec3, end: Vec3, properties: Properties) -> None:
     # PyQt draws a long line for a zero-length line:
     if start.isclose(end):
         self.draw_point(start, properties)
     else:
         item = self._line_renderer.draw_line(start, end, properties)  # type: ignore
         self._set_item_data(item)
コード例 #3
0
ファイル: construct3d.py プロジェクト: mhenr18/ezdxf
def distance_point_line_3d(point: Vec3, start: Vec3, end: Vec3) -> float:
    """ Returns the normal distance from `point` to 3D line defined by `start-`
    and `end` point.
    """
    if start.isclose(end):
        raise ZeroDivisionError('Not a line.')
    v1 = point - start
    # point projected onto line start to end:
    v2 = (end - start).project(v1)
    # Pythagoras:
    return math.sqrt(v1.magnitude_square - v2.magnitude_square)
コード例 #4
0
 def bulge_to(p1: Vec3, p2: Vec3, bulge: float):
     if p1.isclose(p2):
         return
     center, start_angle, end_angle, radius = bulge_to_arc(p1, p2, bulge)
     ellipse = ConstructionEllipse.from_arc(
         center, radius, Z_AXIS,
         math.degrees(start_angle),
         math.degrees(end_angle),
     )
     curves = list(cubic_bezier_from_ellipse(ellipse))
     if curves[0].control_points[0].isclose(p2):
         curves = _reverse_bezier_curves(curves)
     self.add_curves(curves)
コード例 #5
0
 def bulge_to(p1: Vec3, p2: Vec3, bulge: float):
     if p1.isclose(p2, rel_tol=IS_CLOSE_TOL, abs_tol=0):
         return
     center, start_angle, end_angle, radius = bulge_to_arc(p1, p2, bulge)
     ellipse = ConstructionEllipse.from_arc(
         center, radius, Z_AXIS,
         math.degrees(start_angle),
         math.degrees(end_angle),
     )
     curves = list(cubic_bezier_from_ellipse(ellipse))
     curve0 = curves[0]
     cp0 = curve0.control_points[0]
     if cp0.isclose(p2, rel_tol=IS_CLOSE_TOL, abs_tol=0):
         curves = reverse_bezier_curves(curves)
     add_bezier4p(path, curves)
コード例 #6
0
def distance_point_line_3d(point: Vec3, start: Vec3, end: Vec3) -> float:
    """ Returns the normal distance from `point` to 3D line defined by `start-`
    and `end` point.
    """
    if start.isclose(end):
        raise ZeroDivisionError('Not a line.')
    v1 = point - start
    # point projected onto line start to end:
    v2 = (end - start).project(v1)
    # Pythagoras:
    diff = v1.magnitude_square - v2.magnitude_square
    if diff <= 0.0:
        # This should not happen (abs(v1) > abs(v2)), but floating point
        # imprecision at very small values makes it possible!
        return 0.0
    else:
        return math.sqrt(diff)
コード例 #7
0
def is_spatial(v: Vec3) -> bool:
    return not v.isclose(Z_AXIS) and not v.isclose(NEG_Z_AXIS)