- arc improvements, fillets, operations, bodys
This commit is contained in:
@@ -187,19 +187,29 @@ class SolverSketch(SolverSystem):
|
||||
def constrain_distance(
|
||||
self, entity_a, entity_b, distance: float
|
||||
) -> bool:
|
||||
"""Constrain distance between point-point or point-line."""
|
||||
"""Constrain distance between point-point or point-line.
|
||||
|
||||
python-solvespace's ``distance`` accepts (point, line) ordering only,
|
||||
so line-point pairs are normalised; line-line pairs and a point
|
||||
constrained to itself are rejected (the solver cannot hold them).
|
||||
"""
|
||||
try:
|
||||
handle_a = entity_a.handle if isinstance(entity_a, SolverPoint) else entity_a.handle
|
||||
handle_b = entity_b.handle if isinstance(entity_b, SolverPoint) else entity_b.handle
|
||||
if isinstance(entity_a, SolverLine) and isinstance(entity_b, SolverLine):
|
||||
logger.warning("distance: line-to-line distance is not supported")
|
||||
return False
|
||||
if isinstance(entity_a, SolverLine) and isinstance(entity_b, SolverPoint):
|
||||
# Normalise to (point, line) ordering.
|
||||
entity_a, entity_b = entity_b, entity_a
|
||||
if entity_a is entity_b and distance != 0.0:
|
||||
logger.warning("distance: refusing point-to-itself constraint")
|
||||
return False
|
||||
handle_a = entity_a.handle
|
||||
handle_b = entity_b.handle
|
||||
|
||||
if isinstance(entity_a, SolverPoint) and isinstance(entity_b, SolverLine):
|
||||
self.distance(handle_a, handle_b, distance, self.wp)
|
||||
elif isinstance(entity_a, SolverLine) and isinstance(entity_b, SolverPoint):
|
||||
self.distance(handle_b, handle_a, distance, self.wp)
|
||||
elif isinstance(entity_a, SolverPoint) and isinstance(entity_b, SolverPoint):
|
||||
self.distance(handle_a, handle_b, distance, self.wp)
|
||||
elif isinstance(entity_a, SolverLine) and isinstance(entity_b, SolverLine):
|
||||
self.distance(handle_a, handle_b, distance, self.wp)
|
||||
else:
|
||||
logger.warning(f"distance: unsupported types {type(entity_a)}, {type(entity_b)}")
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user