ExtensionLine / DimensionLine complain that start > end
Opened this issue · 0 comments
jdegenstein commented
This code is adapted from docs/objects_2d.py:
std = Draft()
# [ExtensionLine]
with BuildSketch() as e_line:
with BuildLine():
l1 = Polyline((20, 40), (-40, 40), (-40, -40), (20, -40))
RadiusArc(l1 @ 0, l1 @ 1, 50)
make_face()
edg = e_line.edges().sort_by(Axis.X)[0]
ExtensionLine(border=edg, offset=10, draft=std)
outside_curve = e_line.edges().sort_by(Axis.X)[-1]
ExtensionLine(border=outside_curve, offset=10, label_angle=True, draft=std)
# [TechnicalDrawing]
with BuildSketch() as tech_drawing:
with Locations((0, 20)):
add(e_line)
TechnicalDrawing()
Returns:
ValueError Traceback (most recent call last)
24 ExtensionLine(border=edg, offset=10, draft=std)
25 outside_curve = e_line.edges().sort_by(Axis.X)[-1]
---> 26 ExtensionLine(border=outside_curve, offset=10, label_angle=True, draft=std)
28 # [TechnicalDrawing]
29 with BuildSketch() as tech_drawing:
File c:\Users\someuser\.conda\envs\ocp_vscode\Lib\site-packages\build123d\drafting.py:562, in ExtensionLine.__init__(self, border, offset, draft, sketch, label, arrows, tolerance, label_angle, project_line, mode)
560 e_line_shape = sweep(line_pen, extension_line, mode=Mode.PRIVATE)
561 e_lines.append(e_line_shape)
--> 562 d_line = DimensionLine(
563 dimension_path,
564 draft,
565 sketch,
566 label,
567 arrows,
568 tolerance,
569 label_angle,
570 mode=Mode.PRIVATE,
571 )
572 self.dimension = d_line.dimension #: length of the dimension
574 e_line_sketch = Sketch(children=e_lines + d_line.faces())
File c:\Users\someuser\.conda\envs\ocp_vscode\Lib\site-packages\build123d\drafting.py:410, in DimensionLine.__init__(self, path, draft, sketch, label, arrows, tolerance, label_angle, mode)
406 if label_length + arrows.count(True) * draft.arrow_length < path_length:
407 shaft_length = (path_length - label_length) / 2 - draft.pad_around_text
408 shaft_pair = [
409 path_obj.trim(0.0, shaft_length / path_length),
--> 410 path_obj.trim(1.0 - shaft_length / path_length, 1.0),
411 ]
412 else:
413 shaft_length = 2 * draft.arrow_length
File c:\Users\someuser\.conda\envs\ocp_vscode\Lib\site-packages\build123d\topology.py:7785, in Wire.trim(self, start, end)
7783 u_start = edge.param_at_point(trim_start_point)
7784 u_end = edge.param_at_point(trim_end_point)
-> 7785 edge = edge.trim(u_start, u_end)
7786 elif contains_start:
7787 u_value = edge.param_at_point(trim_start_point)
File c:\Users\someuser\.conda\envs\ocp_vscode\Lib\site-packages\build123d\topology.py:4609, in Edge.trim(self, start, end)
4594 """trim
4595
4596 Create a new edge by keeping only the section between start and end.
(...)
4606 Edge: trimmed edge
4607 """
4608 if start >= end:
-> 4609 raise ValueError(f"start ({start}) must be less than end ({end})")
4611 new_curve = BRep_Tool.Curve_s(
4612 copy.deepcopy(self).wrapped, self.param_at(0), self.param_at(1)
4613 )
4614 parm_start = self.param_at(start)
ValueError: start (0.8165271836783728) must be less than end (0.0)
I have also observed some non-repeatable sporadic behavior in which this fails on the first call to ExtensionLine (in the same way as above). Perhaps the line is reversed at some point?