topologicpy 0.8.41__py3-none-any.whl → 0.8.42__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- topologicpy/Cell.py +9 -6
- topologicpy/CellComplex.py +7 -3
- topologicpy/Edge.py +54 -22
- topologicpy/Face.py +37 -11
- topologicpy/Plotly.py +6 -5
- topologicpy/Topology.py +5 -5
- topologicpy/Wire.py +3 -28
- topologicpy/version.py +1 -1
- {topologicpy-0.8.41.dist-info → topologicpy-0.8.42.dist-info}/METADATA +1 -1
- {topologicpy-0.8.41.dist-info → topologicpy-0.8.42.dist-info}/RECORD +13 -13
- {topologicpy-0.8.41.dist-info → topologicpy-0.8.42.dist-info}/WHEEL +0 -0
- {topologicpy-0.8.41.dist-info → topologicpy-0.8.42.dist-info}/licenses/LICENSE +0 -0
- {topologicpy-0.8.41.dist-info → topologicpy-0.8.42.dist-info}/top_level.txt +0 -0
topologicpy/Cell.py
CHANGED
@@ -2762,7 +2762,7 @@ class Cell():
|
|
2762
2762
|
return prism
|
2763
2763
|
|
2764
2764
|
@staticmethod
|
2765
|
-
def RemoveCollinearEdges(cell, angTolerance: float = 0.1, tolerance: float = 0.0001):
|
2765
|
+
def RemoveCollinearEdges(cell, angTolerance: float = 0.1, tolerance: float = 0.0001, silent: bool = False):
|
2766
2766
|
"""
|
2767
2767
|
Removes any collinear edges in the input cell.
|
2768
2768
|
|
@@ -2774,6 +2774,8 @@ class Cell():
|
|
2774
2774
|
The desired angular tolerance. The default is 0.1.
|
2775
2775
|
tolerance : float , optional
|
2776
2776
|
The desired tolerance. The default is 0.0001.
|
2777
|
+
silent : bool , optional
|
2778
|
+
If set to True, error and warning messages are suppressed. The default is False.
|
2777
2779
|
|
2778
2780
|
Returns
|
2779
2781
|
-------
|
@@ -2786,15 +2788,16 @@ class Cell():
|
|
2786
2788
|
import inspect
|
2787
2789
|
|
2788
2790
|
if not Topology.IsInstance(cell, "Cell"):
|
2789
|
-
|
2790
|
-
|
2791
|
-
|
2792
|
-
|
2791
|
+
if not silent:
|
2792
|
+
print("Cell.RemoveCollinearEdges - Error: The input cell parameter is not a valid cell. Returning None.")
|
2793
|
+
curframe = inspect.currentframe()
|
2794
|
+
calframe = inspect.getouterframes(curframe, 2)
|
2795
|
+
print('caller name:', calframe[1][3])
|
2793
2796
|
return None
|
2794
2797
|
faces = Cell.Faces(cell)
|
2795
2798
|
clean_faces = []
|
2796
2799
|
for face in faces:
|
2797
|
-
clean_faces.append(Face.RemoveCollinearEdges(face, angTolerance=angTolerance, tolerance=tolerance))
|
2800
|
+
clean_faces.append(Face.RemoveCollinearEdges(face, angTolerance=angTolerance, tolerance=tolerance, silent=silent))
|
2798
2801
|
return Cell.ByFaces(clean_faces, tolerance=tolerance)
|
2799
2802
|
|
2800
2803
|
@staticmethod
|
topologicpy/CellComplex.py
CHANGED
@@ -104,7 +104,7 @@ class CellComplex():
|
|
104
104
|
tolerance : float , optional
|
105
105
|
The desired tolerance. The default is 0.0001.
|
106
106
|
silent : bool , optional
|
107
|
-
|
107
|
+
If set to True, error and warning messages are suppressed. The default is False.
|
108
108
|
|
109
109
|
Returns
|
110
110
|
-------
|
@@ -990,7 +990,7 @@ class CellComplex():
|
|
990
990
|
return None
|
991
991
|
|
992
992
|
@staticmethod
|
993
|
-
def RemoveCollinearEdges(cellComplex, angTolerance: float = 0.1, tolerance: float = 0.0001):
|
993
|
+
def RemoveCollinearEdges(cellComplex, angTolerance: float = 0.1, tolerance: float = 0.0001, silent: bool = True):
|
994
994
|
"""
|
995
995
|
Removes any collinear edges in the input cellComplex.
|
996
996
|
|
@@ -1002,6 +1002,8 @@ class CellComplex():
|
|
1002
1002
|
The desired angular tolerance. The default is 0.1.
|
1003
1003
|
tolerance : float , optional
|
1004
1004
|
The desired tolerance. The default is 0.0001.
|
1005
|
+
silent : bool , optional
|
1006
|
+
If set to True, error and warning messages are suppressed. The default is False.
|
1005
1007
|
|
1006
1008
|
Returns
|
1007
1009
|
-------
|
@@ -1023,7 +1025,7 @@ class CellComplex():
|
|
1023
1025
|
cells = CellComplex.Cells(cellComplex)
|
1024
1026
|
clean_cells = []
|
1025
1027
|
for cell in cells:
|
1026
|
-
clean_cells.append(Cell.RemoveCollinearEdges(cell, angTolerance=angTolerance, tolerance=tolerance))
|
1028
|
+
clean_cells.append(Cell.RemoveCollinearEdges(cell, angTolerance=angTolerance, tolerance=tolerance, silent=silent))
|
1027
1029
|
return CellComplex.ByCells(clean_cells, tolerance=tolerance)
|
1028
1030
|
|
1029
1031
|
@staticmethod
|
@@ -1098,6 +1100,8 @@ class CellComplex():
|
|
1098
1100
|
The desired length of the mantissa. The default is 6.
|
1099
1101
|
tolerance : float , optional
|
1100
1102
|
The desired tolerance. The default is 0.0001.
|
1103
|
+
silent : bool , optional
|
1104
|
+
If set to True, error and warning messages are suppressed. The default is False.
|
1101
1105
|
|
1102
1106
|
Returns
|
1103
1107
|
-------
|
topologicpy/Edge.py
CHANGED
@@ -256,31 +256,63 @@ class Edge():
|
|
256
256
|
@staticmethod
|
257
257
|
def ByOffset2D(edge, offset: float = 1.0, tolerance: float = 0.0001):
|
258
258
|
"""
|
259
|
-
Creates
|
260
|
-
|
261
|
-
Parameters
|
262
|
-
----------
|
263
|
-
edge : topologic_core.Edge
|
264
|
-
The input edge.
|
265
|
-
offset : float , optional
|
266
|
-
The desired offset. The default is 1.
|
267
|
-
tolerance : float , optional
|
268
|
-
The desired tolerance. The default is 0.0001.
|
269
|
-
|
270
|
-
Returns
|
271
|
-
-------
|
272
|
-
topologic_core.Edge
|
273
|
-
An edge offset from the input edge.
|
274
|
-
|
259
|
+
Creates an edge offset from the input edge in the XY plane.
|
275
260
|
"""
|
276
261
|
from topologicpy.Topology import Topology
|
277
|
-
from topologicpy.
|
262
|
+
from topologicpy.Vertex import Vertex
|
263
|
+
from topologicpy.Edge import Edge
|
278
264
|
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
265
|
+
sv = Edge.StartVertex(edge)
|
266
|
+
ev = Edge.EndVertex(edge)
|
267
|
+
|
268
|
+
x1, y1, _ = Vertex.Coordinates(sv)
|
269
|
+
x2, y2, _ = Vertex.Coordinates(ev)
|
270
|
+
|
271
|
+
dx = x2 - x1
|
272
|
+
dy = y2 - y1
|
273
|
+
length = (dx**2 + dy**2)**0.5
|
274
|
+
if length < tolerance:
|
275
|
+
return None
|
276
|
+
|
277
|
+
# Perpendicular vector to the left
|
278
|
+
nx = -dy / length
|
279
|
+
ny = dx / length
|
280
|
+
|
281
|
+
ox = nx * offset
|
282
|
+
oy = ny * offset
|
283
|
+
|
284
|
+
new_sv = Vertex.ByCoordinates(x1 + ox, y1 + oy, 0)
|
285
|
+
new_ev = Vertex.ByCoordinates(x2 + ox, y2 + oy, 0)
|
286
|
+
|
287
|
+
return Edge.ByVertices(new_sv, new_ev)
|
288
|
+
# @staticmethod
|
289
|
+
# def ByOffset2D(edge, offset: float = 1.0, tolerance: float = 0.0001):
|
290
|
+
# """
|
291
|
+
# Creates and edge offset from the input edge. This method is intended for edges that are in the XY plane.
|
292
|
+
|
293
|
+
# Parameters
|
294
|
+
# ----------
|
295
|
+
# edge : topologic_core.Edge
|
296
|
+
# The input edge.
|
297
|
+
# offset : float , optional
|
298
|
+
# The desired offset. The default is 1.
|
299
|
+
# tolerance : float , optional
|
300
|
+
# The desired tolerance. The default is 0.0001.
|
301
|
+
|
302
|
+
# Returns
|
303
|
+
# -------
|
304
|
+
# topologic_core.Edge
|
305
|
+
# An edge offset from the input edge.
|
306
|
+
|
307
|
+
# """
|
308
|
+
# from topologicpy.Topology import Topology
|
309
|
+
# from topologicpy.Vector import Vector
|
310
|
+
|
311
|
+
# n = Edge.Normal(edge)
|
312
|
+
# n = Vector.Normalize(n)
|
313
|
+
# n = Vector.Multiply(n, offset, tolerance=tolerance)
|
314
|
+
# edge = Topology.Translate(edge, n[0], n[1], n[2])
|
315
|
+
# return edge
|
284
316
|
|
285
317
|
@staticmethod
|
286
318
|
def ByStartVertexEndVertex(vertexA, vertexB, tolerance: float = 0.0001, silent=False):
|
topologicpy/Face.py
CHANGED
@@ -827,7 +827,7 @@ class Face():
|
|
827
827
|
return Face.ByVertices(vertices, tolerance=tolerance)
|
828
828
|
|
829
829
|
@staticmethod
|
830
|
-
def ByWire(wire, tolerance: float = 0.0001, silent=False):
|
830
|
+
def ByWire(wire, tolerance: float = 0.0001, silent: bool = False):
|
831
831
|
"""
|
832
832
|
Creates a face from the input closed wire.
|
833
833
|
|
@@ -942,14 +942,21 @@ class Face():
|
|
942
942
|
"""
|
943
943
|
from topologicpy.Wire import Wire
|
944
944
|
from topologicpy.Topology import Topology
|
945
|
+
import inspect
|
945
946
|
|
946
947
|
if not Topology.IsInstance(externalBoundary, "Wire"):
|
947
948
|
if not silent:
|
948
949
|
print("Face.ByWires - Error: The input externalBoundary parameter is not a valid topologic wire. Returning None.")
|
950
|
+
curframe = inspect.currentframe()
|
951
|
+
calframe = inspect.getouterframes(curframe, 2)
|
952
|
+
print('caller name:', calframe[1][3])
|
949
953
|
return None
|
950
954
|
if not Wire.IsClosed(externalBoundary):
|
951
955
|
if not silent:
|
952
956
|
print("Face.ByWires - Error: The input externalBoundary parameter is not a closed topologic wire. Returning None.")
|
957
|
+
curframe = inspect.currentframe()
|
958
|
+
calframe = inspect.getouterframes(curframe, 2)
|
959
|
+
print('caller name:', calframe[1][3])
|
953
960
|
return None
|
954
961
|
ibList = [x for x in internalBoundaries if Topology.IsInstance(x, "Wire") and Wire.IsClosed(x)]
|
955
962
|
face = None
|
@@ -958,6 +965,9 @@ class Face():
|
|
958
965
|
except:
|
959
966
|
if not silent:
|
960
967
|
print("Face.ByWires - Error: The operation failed. Returning None.")
|
968
|
+
curframe = inspect.currentframe()
|
969
|
+
calframe = inspect.getouterframes(curframe, 2)
|
970
|
+
print('caller name:', calframe[1][3])
|
961
971
|
face = None
|
962
972
|
return face
|
963
973
|
|
@@ -3404,7 +3414,7 @@ class Face():
|
|
3404
3414
|
return None
|
3405
3415
|
eb = Wire.RemoveCollinearEdges(Face.Wire(face), angTolerance=angTolerance, tolerance=tolerance, silent=silent)
|
3406
3416
|
ib = [Wire.RemoveCollinearEdges(w, angTolerance=angTolerance, tolerance=tolerance, silent=silent) for w in Face.InternalBoundaries(face)]
|
3407
|
-
return Face.ByWires(eb, ib)
|
3417
|
+
return Face.ByWires(eb, ib, silent=silent)
|
3408
3418
|
|
3409
3419
|
@staticmethod
|
3410
3420
|
def RHS(origin= None, width: float = 1.0, length: float = 1.0, thickness: float = 0.25, outerFillet: float = 0.0, innerFillet: float = 0.0, sides: int = 16, direction: list = [0, 0, 1], placement: str = "center", tolerance: float = 0.0001, silent: bool = False):
|
@@ -3602,35 +3612,51 @@ class Face():
|
|
3602
3612
|
return Face.RHS(origin = origin, width = size, length = size, thickness = thickness, outerFillet = outerFillet, innerFillet = innerFillet, sides = sides, direction = direction, placement = placement, tolerance = tolerance, silent = silent)
|
3603
3613
|
|
3604
3614
|
@staticmethod
|
3605
|
-
def Simplify(face, tolerance=0.0001):
|
3615
|
+
def Simplify(face, method='douglas-peucker', tolerance=0.0001, silent=False):
|
3606
3616
|
"""
|
3607
|
-
Simplifies the input
|
3608
|
-
Part of this code was contributed by gaoxipeng. See https://github.com/wassimj/topologicpy/issues/35
|
3617
|
+
Simplifies the input wire edges based on the selected algorithm: Douglas-Peucker or Visvalingam–Whyatt.
|
3609
3618
|
|
3610
3619
|
Parameters
|
3611
3620
|
----------
|
3612
3621
|
face : topologic_core.Face
|
3613
3622
|
The input face.
|
3623
|
+
method : str, optional
|
3624
|
+
The simplification method to use: 'douglas-peucker' or 'visvalingam-whyatt' or 'reumann-witkam'.
|
3625
|
+
The default is 'douglas-peucker'.
|
3614
3626
|
tolerance : float , optional
|
3615
|
-
The desired tolerance.
|
3616
|
-
|
3627
|
+
The desired tolerance.
|
3628
|
+
If using the douglas-peucker method, edge lengths shorter than this amount will be removed.
|
3629
|
+
If using the visvalingam-whyatt method, triangulare areas less than is amount will be removed.
|
3630
|
+
If using the Reumann-Witkam method, the tolerance specifies the maximum perpendicular distance allowed
|
3631
|
+
between any point and the current line segment; points falling within this distance are discarded.
|
3632
|
+
The default is 0.0001.
|
3633
|
+
silent : bool , optional
|
3634
|
+
If set to True, error and warning messages are suppressed. The default is False.
|
3635
|
+
|
3617
3636
|
Returns
|
3618
3637
|
-------
|
3619
3638
|
topologic_core.Face
|
3620
3639
|
The simplified face.
|
3640
|
+
|
3621
3641
|
"""
|
3622
3642
|
from topologicpy.Wire import Wire
|
3623
3643
|
from topologicpy.Topology import Topology
|
3624
3644
|
|
3625
3645
|
if not Topology.IsInstance(face, "Face"):
|
3626
|
-
|
3646
|
+
if not silent:
|
3647
|
+
print("Face.Simplify - Error: The input face parameter is not a valid face. Returning None.")
|
3627
3648
|
return None
|
3628
3649
|
|
3629
3650
|
eb = Face.ExternalBoundary(face)
|
3630
|
-
eb = Wire.Simplify(eb, tolerance=tolerance)
|
3651
|
+
eb = Wire.Simplify(eb, method=method, tolerance=tolerance, silent=silent)
|
3631
3652
|
ibList = Face.InternalBoundaries(face)
|
3632
|
-
ibList = [Wire.Simplify(ib) for ib in ibList]
|
3633
|
-
|
3653
|
+
ibList = [Wire.Simplify(ib, method=method, tolerance=tolerance, silent=silent) for ib in ibList]
|
3654
|
+
return_face = Face.ByWires(eb, ibList, tolerance=tolerance, silent=silent)
|
3655
|
+
if not Topology.IsInstance(return_face, "Face"):
|
3656
|
+
if not silent:
|
3657
|
+
print("Face.Simplify - Error: Could not simplify the face. Returning the original input face.")
|
3658
|
+
return face
|
3659
|
+
return return_face
|
3634
3660
|
|
3635
3661
|
@staticmethod
|
3636
3662
|
def Skeleton(face, boundary: bool = True, tolerance: float = 0.001):
|
topologicpy/Plotly.py
CHANGED
@@ -743,15 +743,16 @@ class Plotly:
|
|
743
743
|
labels = []
|
744
744
|
for j, elements_cluster in enumerate(elements_clusters):
|
745
745
|
d_color = color
|
746
|
+
d_arrowSize = arrowSize
|
747
|
+
d_dash = dash
|
746
748
|
d = dict_clusters[j][0] # All dicitonaries have same values in dictionaries, so take first one.
|
747
749
|
if d:
|
748
750
|
if not colorKey == None:
|
749
|
-
d_color = Dictionary.ValueAtKey(d, key=colorKey
|
750
|
-
d_color = Color.AnyToHex(d_color)
|
751
|
+
d_color = Color.AnyToHex(Dictionary.ValueAtKey(d, key=colorKey, default=color))
|
751
752
|
if not dashKey == None:
|
752
|
-
d_dash = Dictionary.ValueAtKey(d, key=dashKey
|
753
|
+
d_dash = Dictionary.ValueAtKey(d, key=dashKey, default=dash)
|
753
754
|
if not arrowSizeKey == None:
|
754
|
-
d_arrowSize = Dictionary.ValueAtKey(d, key=arrowSizeKey
|
755
|
+
d_arrowSize = Dictionary.ValueAtKey(d, key=arrowSizeKey, default=arrowSize)
|
755
756
|
if not labelKey == None:
|
756
757
|
labels.append(str(Dictionary.ValueAtKey(d, labelKey, "")))
|
757
758
|
if not widthKey == None:
|
@@ -787,7 +788,7 @@ class Plotly:
|
|
787
788
|
marker_width = width[0]*0.25
|
788
789
|
else:
|
789
790
|
marker_width = width*0.25
|
790
|
-
if
|
791
|
+
if d_dash:
|
791
792
|
dot = "dot"
|
792
793
|
else:
|
793
794
|
dot = "solid"
|
topologicpy/Topology.py
CHANGED
@@ -6992,16 +6992,16 @@ class Topology():
|
|
6992
6992
|
return_topology = Wire.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance, silent=silent)
|
6993
6993
|
return return_topology
|
6994
6994
|
elif Topology.IsInstance(topology, "Face"):
|
6995
|
-
return_topology = Face.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance)
|
6995
|
+
return_topology = Face.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance, silent=silent)
|
6996
6996
|
return return_topology
|
6997
6997
|
elif Topology.IsInstance(topology, "Shell"):
|
6998
|
-
return_topology = Shell.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance)
|
6998
|
+
return_topology = Shell.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance, silent=silent)
|
6999
6999
|
return return_topology
|
7000
7000
|
elif Topology.IsInstance(topology, "Cell"):
|
7001
|
-
return_topology = Cell.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance)
|
7001
|
+
return_topology = Cell.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance, silent=silent)
|
7002
7002
|
return return_topology
|
7003
7003
|
elif Topology.IsInstance(topology, "CellComplex"):
|
7004
|
-
return_topology = CellComplex.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance)
|
7004
|
+
return_topology = CellComplex.RemoveCollinearEdges(topology, angTolerance=angTolerance, tolerance=tolerance, silent=silent)
|
7005
7005
|
return return_topology
|
7006
7006
|
elif Topology.IsInstance(topology, "Cluster"):
|
7007
7007
|
topologies = []
|
@@ -7009,7 +7009,7 @@ class Topology():
|
|
7009
7009
|
topologies += Cluster.FreeEdges(topology)
|
7010
7010
|
faces = Topology.Faces(topology)
|
7011
7011
|
for face in faces:
|
7012
|
-
topologies.append(Face.RemoveCollinearEdges(face, angTolerance=angTolerance, tolerance=tolerance))
|
7012
|
+
topologies.append(Face.RemoveCollinearEdges(face, angTolerance=angTolerance, tolerance=tolerance, silent=silent))
|
7013
7013
|
return_topology = Topology.SelfMerge(Cluster.ByTopologies(topologies), tolerance=tolerance)
|
7014
7014
|
return return_topology
|
7015
7015
|
|
topologicpy/Wire.py
CHANGED
@@ -465,15 +465,13 @@ class Wire():
|
|
465
465
|
from topologicpy.Cluster import Cluster
|
466
466
|
from topologicpy.Topology import Topology
|
467
467
|
from topologicpy.Vector import Vector
|
468
|
-
from topologicpy.Helper import Helper
|
468
|
+
from topologicpy.Helper import Helper
|
469
469
|
|
470
470
|
if not Topology.IsInstance(wire, "Wire"):
|
471
471
|
if not silent:
|
472
472
|
print("Wire.ByOffset - Error: The input wire parameter is not a valid wire. Returning None.")
|
473
473
|
return None
|
474
474
|
|
475
|
-
#temp_face = Face.ByWire(wire)
|
476
|
-
#original_area = Face.Area(temp_face)
|
477
475
|
if reverse == True:
|
478
476
|
fac = -1
|
479
477
|
else:
|
@@ -481,13 +479,10 @@ class Wire():
|
|
481
479
|
origin = Topology.Centroid(wire)
|
482
480
|
temp_vertices = [Topology.Vertices(wire)[0], Topology.Vertices(wire)[1], Topology.Centroid(wire)]
|
483
481
|
temp_face = Face.ByWire(Wire.ByVertices(temp_vertices, close=True, tolerance=tolerance), silent=silent)
|
484
|
-
temp_normal = Face.Normal(temp_face)
|
485
|
-
flat_wire = Topology.Flatten(wire, direction=temp_normal, origin=origin)
|
486
482
|
normal = Face.Normal(temp_face)
|
487
483
|
flat_wire = Topology.Flatten(wire, direction=normal, origin=origin)
|
488
484
|
original_edges = Topology.Edges(wire)
|
489
485
|
edges = Topology.Edges(flat_wire)
|
490
|
-
original_edges = Topology.Edges(wire)
|
491
486
|
offsets = []
|
492
487
|
offset_edges = []
|
493
488
|
final_vertices = []
|
@@ -495,9 +490,7 @@ class Wire():
|
|
495
490
|
edge_dictionaries = []
|
496
491
|
for i, edge in enumerate(edges):
|
497
492
|
d = Topology.Dictionary(original_edges[i])
|
498
|
-
d_offset = Dictionary.ValueAtKey(d, offsetKey)
|
499
|
-
if d_offset == None:
|
500
|
-
d_offset = offset
|
493
|
+
d_offset = Dictionary.ValueAtKey(d, key=offsetKey, defaultValue=offset)
|
501
494
|
d_offset = d_offset*fac
|
502
495
|
offsets.append(d_offset)
|
503
496
|
offset_edge = Edge.ByOffset2D(edge, d_offset)
|
@@ -595,23 +588,7 @@ class Wire():
|
|
595
588
|
v1 = Topology.SetDictionary(v1, Topology.Dictionary(v_a), silent=True)
|
596
589
|
if bisectors == True:
|
597
590
|
bisectors_list.append(Edge.ByVertices(v_a, v1))
|
598
|
-
|
599
|
-
|
600
|
-
# wire_edges = []
|
601
|
-
# for i in range(len(final_vertices)-1):
|
602
|
-
# v1 = final_vertices[i]
|
603
|
-
# v2 = final_vertices[i+1]
|
604
|
-
# w_e = Edge.ByVertices(v1,v2)
|
605
|
-
# #w_e = Edge.SetLength(w_e, Edge.Length(w_e)+(2*epsilon), bothSides = True)
|
606
|
-
# wire_edges.append(w_e)
|
607
|
-
# if Wire.IsClosed(wire):
|
608
|
-
# v1 = final_vertices[-1]
|
609
|
-
# v2 = final_vertices[0]
|
610
|
-
# #w_e = Edge.SetLength(w_e, Edge.Length(w_e)+(2*epsilon), bothSides = True)
|
611
|
-
# wire_edges.append(w_e)
|
612
|
-
|
613
591
|
return_wire = Wire.ByVertices(final_vertices, close=Wire.IsClosed(wire), tolerance=tolerance, silent=silent)
|
614
|
-
#wire_edges = Topology.Edges(wire_edges)
|
615
592
|
wire_edges = [Edge.SetLength(w_e, Edge.Length(w_e)+(2*epsilon), bothSides=True) for w_e in Topology.Edges(return_wire)]
|
616
593
|
return_wire_edges = Topology.Edges(return_wire)
|
617
594
|
if transferDictionaries == True:
|
@@ -651,7 +628,6 @@ class Wire():
|
|
651
628
|
print("Wire.ByOffset - Warning: The resulting wire is non-manifold, please check your offsets.")
|
652
629
|
print("Wire.ByOffset - Warning: Pursuing a workaround, but it might take longer to complete.")
|
653
630
|
|
654
|
-
#cycles = Wire.Cycles(return_wire, maxVertices = len(final_vertices))
|
655
631
|
temp_wire = Topology.SelfMerge(Cluster.ByTopologies(wire_edges))
|
656
632
|
cycles = Wire.Cycles(temp_wire, maxVertices = len(final_vertices))
|
657
633
|
if len(cycles) > 0:
|
@@ -679,7 +655,6 @@ class Wire():
|
|
679
655
|
return_cycle = Topology.TransferDictionariesBySelectors(return_cycle, Topology.Vertices(return_wire), tranVertices=True, tolerance=tolerance, numWorkers=numWorkers)
|
680
656
|
return_cycle = Topology.TransferDictionariesBySelectors(return_cycle, sel_edges, tranEdges=True, tolerance=tolerance, numWorkers=numWorkers)
|
681
657
|
return_wire = return_cycle
|
682
|
-
|
683
658
|
return_wire = Topology.Unflatten(return_wire, direction=normal, origin=origin)
|
684
659
|
if transferDictionaries == True:
|
685
660
|
return_wire = Topology.SetDictionary(return_wire, Topology.Dictionary(wire), silent=True)
|
@@ -3728,7 +3703,7 @@ class Wire():
|
|
3728
3703
|
return None
|
3729
3704
|
|
3730
3705
|
new_wire = cleanup(wire)
|
3731
|
-
wires = Wire.Split(new_wire) if not Wire.IsManifold(new_wire) else [new_wire]
|
3706
|
+
wires = Wire.Split(new_wire) if not Wire.IsManifold(new_wire, silent=silent) else [new_wire]
|
3732
3707
|
|
3733
3708
|
processed_wires = [remove_collinear_vertices(w) for w in wires]
|
3734
3709
|
|
topologicpy/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = '0.8.
|
1
|
+
__version__ = '0.8.42'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: topologicpy
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.42
|
4
4
|
Summary: An AI-Powered Spatial Modelling and Analysis Software Library for Architecture, Engineering, and Construction.
|
5
5
|
Author-email: Wassim Jabi <wassim.jabi@gmail.com>
|
6
6
|
License: AGPL v3 License
|
@@ -2,37 +2,37 @@ topologicpy/ANN.py,sha256=DrNAhNHp-jSvsPc1fb7KVPU46cYmejAvghhknOM430Y,47932
|
|
2
2
|
topologicpy/Aperture.py,sha256=wNn5miB_IrGCBYuQ18HXQYRva20dUC3id4AJCulL7to,2723
|
3
3
|
topologicpy/BVH.py,sha256=Iwp_8VDG8ETE4330k7ifWxdI4jmWmv9h8e8IIIZZFGY,13043
|
4
4
|
topologicpy/CSG.py,sha256=uDkOSmc8m1V_k7T3UCerODhOSyYNO4FRDzoOqt0kEt8,15590
|
5
|
-
topologicpy/Cell.py,sha256=
|
6
|
-
topologicpy/CellComplex.py,sha256=
|
5
|
+
topologicpy/Cell.py,sha256=M4Xv4gabSgtKYYA-Wh0lgYEbRNRVF9zr4DYejOXJc-4,176278
|
6
|
+
topologicpy/CellComplex.py,sha256=c2B3mF1c3iwOfT-V0JWt9qNcFdd6DPR0aBOE2UnZTn4,61165
|
7
7
|
topologicpy/Cluster.py,sha256=wvfMAx6aPrSAt5nQ4--KnqD4EK9MGjch6Dg985WF7JQ,58748
|
8
8
|
topologicpy/Color.py,sha256=FcR0-__giyGQqvgiOrG8GkA65arHbiS33Si-QbUADPI,23362
|
9
9
|
topologicpy/Context.py,sha256=G3CwMvN8Jw2rnQRwB-n4MaQq_wLS0vPimbXKwsdMJ80,3055
|
10
10
|
topologicpy/DGL.py,sha256=HQXy9iDnrvWGDxaBfe5pRbweQ2zLBvAf6UdjfhKkQYI,139041
|
11
11
|
topologicpy/Dictionary.py,sha256=2Sxm8twR1W4ksZho0YXQB_EltK2qbZWK4UHskP3jvFQ,40846
|
12
|
-
topologicpy/Edge.py,sha256=
|
12
|
+
topologicpy/Edge.py,sha256=dLoAPuRKbjVg_dzloTgjRnQyv_05U9nfrtLO3tqyuys,74167
|
13
13
|
topologicpy/EnergyModel.py,sha256=Pyb28gDDwhzlQIH0xqAygqS0P3SJxWyyV7OWS_AAfRs,53856
|
14
|
-
topologicpy/Face.py,sha256=
|
14
|
+
topologicpy/Face.py,sha256=pN1fssyDLYWf1vU0NOBRx69DaUL958wRSxT-7VBCuCg,203184
|
15
15
|
topologicpy/Graph.py,sha256=GykBbB8KKcy2oPV2Dsnz_vkyWGgczxLi0puVx5NJUYU,648088
|
16
16
|
topologicpy/Grid.py,sha256=EbI2NcYhQDpD5mItd7A1Lpr8Puuf87vZPWuoh7_gChQ,18483
|
17
17
|
topologicpy/Helper.py,sha256=qEsE4yaboEGW94q9lFCff0I_JwwTTQnDAFXw006yHaQ,31203
|
18
18
|
topologicpy/Honeybee.py,sha256=yctkwfdupKnp7bAOjP1Z4YaYpRrWoMEb4gz9Z5zaWwE,21751
|
19
19
|
topologicpy/Matrix.py,sha256=LqVckk2qTwKwEo79eyNsOrHVSHdO82JCREcfy6WIk4I,22716
|
20
20
|
topologicpy/Neo4j.py,sha256=ELKmON7R16j1kQD8xRHDGGCvzjIM2HGHNekdaXDUw6w,22371
|
21
|
-
topologicpy/Plotly.py,sha256=
|
21
|
+
topologicpy/Plotly.py,sha256=SqoQOFqchfDY52_mTGyBOqE_OPEfBI48YI3OyuJ7JQw,123758
|
22
22
|
topologicpy/Polyskel.py,sha256=oVfM4lqSMPTjnkHfsRU9VI8Blt6Vf0LVPkD9ebz7Wmw,27082
|
23
23
|
topologicpy/PyG.py,sha256=zvV6jtnol_aFiN6JRoMpYwBVfOU2aFs9gdWSdEo6mtU,109757
|
24
24
|
topologicpy/ShapeGrammar.py,sha256=UVb8VPwVKd6V3zDTNzpBecQPgYo1EjSsS10XJ8k5YcI,23364
|
25
25
|
topologicpy/Shell.py,sha256=fx0WTndC8blkvWe38nKsJsI_AmklOA0qsjU0gbZp4b4,90501
|
26
26
|
topologicpy/Speckle.py,sha256=-eiTqJugd7pHiHpD3pDUcDO6CGhVyPV14HFRzaqEoaw,18187
|
27
27
|
topologicpy/Sun.py,sha256=_VBBAUIDhvpkp72JBZlv7k9qx9jYubm3yM56UZ1Nc6c,36837
|
28
|
-
topologicpy/Topology.py,sha256=
|
28
|
+
topologicpy/Topology.py,sha256=FnDunqk4uq0iAqtOiQtjNArETXflx6cRBHMYv7NJqC8,467594
|
29
29
|
topologicpy/Vector.py,sha256=X12eqskn28bdB7sLY1EZhq3noPYzPbNEgHPb4a959ss,42302
|
30
30
|
topologicpy/Vertex.py,sha256=RlGQnxQSb_kAus3tJgXd-v-Ptubtt09PQPA9IMwfXmI,84835
|
31
|
-
topologicpy/Wire.py,sha256=
|
31
|
+
topologicpy/Wire.py,sha256=sJE8qwqYOomvN3snMWmj2P2-Sq25ul_OQ95YFz6DFUw,230553
|
32
32
|
topologicpy/__init__.py,sha256=RMftibjgAnHB1vdL-muo71RwMS4972JCxHuRHOlU428,928
|
33
|
-
topologicpy/version.py,sha256=
|
34
|
-
topologicpy-0.8.
|
35
|
-
topologicpy-0.8.
|
36
|
-
topologicpy-0.8.
|
37
|
-
topologicpy-0.8.
|
38
|
-
topologicpy-0.8.
|
33
|
+
topologicpy/version.py,sha256=zx8I7AqRXGv-YmSUcQeFeKLCO2nWXVogDC-GQVEnTsI,23
|
34
|
+
topologicpy-0.8.42.dist-info/licenses/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
|
35
|
+
topologicpy-0.8.42.dist-info/METADATA,sha256=YEn71WRNeRaM0zD1L8Uh4HSmaxe_JJPkC5lBpaawXcc,10535
|
36
|
+
topologicpy-0.8.42.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
37
|
+
topologicpy-0.8.42.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
|
38
|
+
topologicpy-0.8.42.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|