topologicpy 0.7.57__py3-none-any.whl → 0.7.60__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/Plotly.py CHANGED
@@ -273,6 +273,9 @@ class Plotly:
273
273
 
274
274
  @staticmethod
275
275
  def DataByGraph(graph,
276
+ sagitta: float = 0,
277
+ absolute: bool = False,
278
+ sides: int = 8,
276
279
  vertexColor: str = "black",
277
280
  vertexSize: float = 6,
278
281
  vertexLabelKey: str = None,
@@ -298,6 +301,13 @@ class Plotly:
298
301
  ----------
299
302
  graph : topologic_core.Graph
300
303
  The input graph.
304
+ sagitta : float , optional
305
+ The length of the sagitta. In mathematics, the sagitta is the line connecting the center of a chord to the apex (or highest point) of the arc subtended by that chord. The default is 0 which means a straight edge is drawn instead of an arc. The default is 0.
306
+ absolute : bool , optional
307
+ If set to True, the sagitta length is treated as an absolute value. Otherwise, it is treated as a ratio based on the length of the edge. The default is False.
308
+ For example, if the length of the edge is 10, the sagitta is set to 0.5, and absolute is set to False, the sagitta length will be 5. The default is True.
309
+ sides : int , optional
310
+ The number of sides of the arc. The default is 8.
301
311
  vertexColor : str , optional
302
312
  The desired color of the output vertices. This can be any plotly color string and may be specified as:
303
313
  - A hex string (e.g. '#ff0000')
@@ -352,6 +362,7 @@ class Plotly:
352
362
  """
353
363
  from topologicpy.Vertex import Vertex
354
364
  from topologicpy.Edge import Edge
365
+ from topologicpy.Wire import Wire
355
366
  from topologicpy.Dictionary import Dictionary
356
367
  from topologicpy.Topology import Topology
357
368
  from topologicpy.Graph import Graph
@@ -397,10 +408,12 @@ class Plotly:
397
408
  mode = "markers+text"
398
409
  else:
399
410
  mode = "markers"
400
- # Normalize categories to a range between 0 and 1 for the color scale
401
- min_category = 0
402
- max_category = max(len(vertexGroups), 1)
403
- normalized_categories = [(cat - min_category) / (max_category - min_category) for cat in v_groupList]
411
+ normalized_categories = vertexColor # Start with the default vertexColor
412
+ if len(vertexGroups) > 0:
413
+ # Normalize categories to a range between 0 and 1 for the color scale
414
+ min_category = 0
415
+ max_category = max(len(vertexGroups), 1)
416
+ normalized_categories = [(cat - min_category) / (max_category - min_category) for cat in v_groupList]
404
417
  v_trace=go.Scatter3d(x=Xn,
405
418
  y=Yn,
406
419
  z=Zn,
@@ -429,9 +442,23 @@ class Plotly:
429
442
  e_labels = []
430
443
  e_groupList = []
431
444
  edges = Graph.Edges(graph)
445
+ new_edges = []
446
+ if sagitta > 0:
447
+ for edge in edges:
448
+ d = Topology.Dictionary(edge)
449
+ arc = Wire.ArcByEdge(edge, sagitta=sagitta, absolute=absolute, sides=sides, close=False)
450
+ if Topology.IsInstance(arc, "Wire"):
451
+ arc_edges = Topology.Edges(arc)
452
+ for arc_edge in arc_edges:
453
+ arc_edge = Topology.SetDictionary(arc_edge, d)
454
+ new_edges.append(arc_edge)
455
+ else:
456
+ new_edges.append(edge)
457
+ else:
458
+ new_edges = edges
432
459
 
433
460
  if edgeLabelKey or edgeGroupKey:
434
- for e in edges:
461
+ for e in new_edges:
435
462
  sv = Edge.StartVertex(e)
436
463
  ev = Edge.EndVertex(e)
437
464
  Xe+=[Vertex.X(sv, mantissa=mantissa), Vertex.X(ev, mantissa=mantissa), None] # x-coordinates of edge ends
@@ -453,7 +480,7 @@ class Plotly:
453
480
  e_label = e_label+" ("+e_group+")"
454
481
  e_labels.append(e_label)
455
482
  else:
456
- for e in edges:
483
+ for e in new_edges:
457
484
  sv = Edge.StartVertex(e)
458
485
  ev = Edge.EndVertex(e)
459
486
  Xe+=[Vertex.X(sv, mantissa=mantissa), Vertex.X(ev, mantissa=mantissa), None] # x-coordinates of edge ends
topologicpy/Topology.py CHANGED
@@ -1344,7 +1344,23 @@ class Topology():
1344
1344
  if not x_flag and not y_flag and not z_flag:
1345
1345
  print("Topology.BoundingBox - Error: the input axes parameter is not a recognized string. Returning None.")
1346
1346
  return None
1347
+ if Topology.IsInstance(topology, "Vertex"):
1348
+ minX = Vertex.X(topology)
1349
+ minY = Vertex.Y(topology)
1350
+ minZ = Vertex.Z(topology)
1351
+ dictionary = Dictionary.ByKeysValues(["xrot","yrot","zrot", "minx", "miny", "minz", "maxx", "maxy", "maxz", "width", "length", "height"], [0, 0, 0, minX, minY, minZ, minX, minY, minZ, 0, 0, 0])
1352
+ box = Vertex.ByCoordinates(minX, minY, minZ)
1353
+ box = Topology.SetDictionary(box, dictionary)
1354
+ return box
1347
1355
  vertices = Topology.SubTopologies(topology, subTopologyType="vertex")
1356
+ if len(vertices) == 1: # A Cluster made of one vertex. Rare, but can happen!
1357
+ minX = Vertex.X(vertices[0])
1358
+ minY = Vertex.Y(vertices[0])
1359
+ minZ = Vertex.Z(vertices[0])
1360
+ dictionary = Dictionary.ByKeysValues(["xrot","yrot","zrot", "minx", "miny", "minz", "maxx", "maxy", "maxz", "width", "length", "height"], [0, 0, 0, minX, minY, minZ, minX, minY, minZ, 0, 0, 0])
1361
+ box = Vertex.ByCoordinates(minX, minY, minZ)
1362
+ box = Topology.SetDictionary(box, dictionary)
1363
+ return box
1348
1364
  topology = Cluster.ByTopologies(vertices)
1349
1365
  boundingBox = bb(topology)
1350
1366
  minX = boundingBox[0]
topologicpy/Vector.py CHANGED
@@ -955,7 +955,6 @@ class Vector(list):
955
955
  transformation_matrix = rotation_matrix
956
956
 
957
957
  return transformation_matrix
958
-
959
958
  tran_mat = transformation_matrix(vectorA, vectorB)
960
959
 
961
960
  return [list(tran_mat[0]), list(tran_mat[1]), list(tran_mat[2]), list(tran_mat[3])]
topologicpy/Wire.py CHANGED
@@ -23,24 +23,26 @@ import itertools
23
23
 
24
24
  class Wire():
25
25
  @staticmethod
26
- def Arc(startVertex, middleVertex, endVertex, sides: int = 16, close: bool = True, tolerance: float = 0.0001):
26
+ def Arc(startVertex, middleVertex, endVertex, sides: int = 16, close: bool = True, tolerance: float = 0.0001, silent: bool = False):
27
27
  """
28
28
  Creates an arc. The base chord will be parallel to the x-axis and the height will point in the positive y-axis direction.
29
29
 
30
30
  Parameters
31
31
  ----------
32
32
  startVertex : topologic_core.Vertex
33
- The location of the start vertex of the arc.
33
+ The start vertex of the arc.
34
34
  middleVertex : topologic_core.Vertex
35
- The location of the middle vertex (apex) of the arc.
35
+ The middle vertex (apex) of the arc.
36
36
  endVertex : topologic_core.Vertex
37
- The location of the end vertex of the arc.
37
+ The end vertex of the arc.
38
38
  sides : int , optional
39
39
  The number of sides of the arc. The default is 16.
40
40
  close : bool , optional
41
41
  If set to True, the arc will be closed by connecting the last vertex to the first vertex. Otherwise, it will be left open.
42
42
  tolerance : float , optional
43
43
  The desired tolerance. The default is 0.0001.
44
+ silent : bool , optional
45
+ If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
44
46
 
45
47
  Returns
46
48
  -------
@@ -49,68 +51,165 @@ class Wire():
49
51
 
50
52
  """
51
53
  from topologicpy.Vertex import Vertex
52
- from topologicpy.Edge import Edge
53
54
  from topologicpy.Wire import Wire
54
- from topologicpy.Vector import Vector
55
+ from topologicpy.Topology import Topology
55
56
  import numpy as np
56
-
57
57
 
58
- def calculate_circle_center_and_radius(sv, mv, ev):
59
- """
60
- Calculate the center and radius of the circle passing through three points.
61
-
62
- Parameters:
63
- sv (tuple): The start vertex as (x, y, z).
64
- mv (tuple): The middle vertex as (x, y, z).
65
- ev (tuple): The end vertex as (x, y, z).
66
-
67
- Returns:
68
- tuple: The center of the circle as (x, y, z) and the radius.
69
- """
70
- # Convert points to numpy arrays for easier manipulation
71
- A = np.array(sv)
72
- B = np.array(mv)
73
- C = np.array(ev)
74
-
75
- # Calculate the lengths of the sides of the triangle
76
- a = np.linalg.norm(B - C)
77
- b = np.linalg.norm(C - A)
78
- c = np.linalg.norm(A - B)
79
-
80
- # Calculate the circumcenter using the formula
81
- D = 2 * (A[0] * (B[1] - C[1]) + B[0] * (C[1] - A[1]) + C[0] * (A[1] - B[1]))
82
- Ux = ((A[0]**2 + A[1]**2) * (B[1] - C[1]) + (B[0]**2 + B[1]**2) * (C[1] - A[1]) + (C[0]**2 + C[1]**2) * (A[1] - B[1])) / D
83
- Uy = ((A[0]**2 + A[1]**2) * (C[0] - B[0]) + (B[0]**2 + B[1]**2) * (A[0] - C[0]) + (C[0]**2 + C[1]**2) * (B[0] - A[0])) / D
84
- center = np.array([Ux, Uy, A[2]])
85
-
86
- # Calculate the radius
87
- radius = np.linalg.norm(center - A)
58
+ def circle_arc_points(p1, p2, p3, n):
59
+ # Convert points to numpy arrays
60
+ p1, p2, p3 = np.array(p1), np.array(p2), np.array(p3)
61
+
62
+ # Calculate vectors
63
+ v1 = p2 - p1
64
+ v2 = p3 - p1
65
+
66
+ # Find the normal to the plane containing the three points
67
+ normal = np.cross(v1, v2)
68
+ normal = normal / np.linalg.norm(normal)
69
+
70
+ # Calculate midpoints of p1-p2 and p1-p3
71
+ midpoint1 = (p1 + p2) / 2
72
+ midpoint2 = (p1 + p3) / 2
73
+
74
+ # Find the circumcenter using the perpendicular bisectors
75
+ def perpendicular_bisector(pA, pB, midpoint):
76
+ direction = np.cross(normal, pB - pA)
77
+ direction = direction / np.linalg.norm(direction)
78
+ return direction, midpoint
79
+
80
+ direction1, midpoint1 = perpendicular_bisector(p1, p2, midpoint1)
81
+ direction2, midpoint2 = perpendicular_bisector(p1, p3, midpoint2)
82
+
83
+ # Solve for circumcenter
84
+ A = np.array([direction1, -direction2]).T
85
+ b = midpoint2 - midpoint1
86
+ t1, t2 = np.linalg.lstsq(A, b, rcond=None)[0]
88
87
 
89
- return center, radius
90
-
91
-
92
- e2 = Edge.ByVertices(middleVertex, endVertex)
93
-
94
- center, radius = calculate_circle_center_and_radius(Vertex.Coordinates(startVertex), Vertex.Coordinates(middleVertex), Vertex.Coordinates(endVertex))
95
- center = Vertex.ByCoordinates(list(center))
96
-
97
- e1 = Edge.ByVertices(center, startVertex)
98
- e2 = Edge.ByVertices(center, endVertex)
99
- ang1 = Vector.CompassAngle(Vector.North(), Edge.Direction(e1))
100
- ang2 = Vector.CompassAngle(Vector.North(), Edge.Direction(e2))
101
- arc1 = Wire.Circle(origin=center, radius=radius, fromAngle=ang1, toAngle=ang2, sides=sides*4, close=False)
102
- arc2 = Wire.Circle(origin=center, radius=radius, fromAngle=ang2, toAngle=ang1, sides=sides*4, close=False)
103
- if Vertex.IsInternal(middleVertex, arc1):
104
- arc = arc1
105
- else:
106
- arc = arc2
107
- final_vertices = []
108
- for i in range(sides+1):
109
- v = Wire.VertexByParameter(arc, float(i)/float(sides))
110
- final_vertices.append(v)
111
- arc = Wire.ByVertices(final_vertices, close=close)
88
+ circumcenter = midpoint1 + t1 * direction1
89
+
90
+ # Calculate radius
91
+ radius = np.linalg.norm(circumcenter - p1)
92
+
93
+ # Generate points along the arc
94
+ def interpolate_on_arc(p_start, p_end, center, radius, n_points):
95
+ v_start = p_start - center
96
+ v_end = p_end - center
97
+
98
+ angle_between = np.arccos(np.dot(v_start, v_end) / (np.linalg.norm(v_start) * np.linalg.norm(v_end)))
99
+ axis = np.cross(v_start, v_end)
100
+ axis = axis / np.linalg.norm(axis)
101
+
102
+ angles = np.linspace(0, angle_between, n_points)
103
+ arc_points = []
104
+
105
+ for angle in angles:
106
+ rotation_matrix = rotation_matrix_around_axis(axis, angle)
107
+ point_on_arc = center + np.dot(rotation_matrix, v_start)
108
+ arc_points.append(point_on_arc)
109
+
110
+ return arc_points
111
+
112
+ # Helper function to rotate a point around an arbitrary axis
113
+ def rotation_matrix_around_axis(axis, theta):
114
+ cos_theta = np.cos(theta)
115
+ sin_theta = np.sin(theta)
116
+ x, y, z = axis
117
+ return np.array([
118
+ [cos_theta + x*x*(1-cos_theta), x*y*(1-cos_theta) - z*sin_theta, x*z*(1-cos_theta) + y*sin_theta],
119
+ [y*x*(1-cos_theta) + z*sin_theta, cos_theta + y*y*(1-cos_theta), y*z*(1-cos_theta) - x*sin_theta],
120
+ [z*x*(1-cos_theta) - y*sin_theta, z*y*(1-cos_theta) + x*sin_theta, cos_theta + z*z*(1-cos_theta)]
121
+ ])
122
+
123
+ # Get points on the arc from p1 to p3 via p2
124
+ arc1 = interpolate_on_arc(p1, p2, circumcenter, radius, n//2)
125
+ arc2 = interpolate_on_arc(p2, p3, circumcenter, radius, n//2)
126
+
127
+ return np.vstack([arc1, arc2])
128
+
129
+ if not Topology.IsInstance(startVertex, "Vertex"):
130
+ if not silent:
131
+ print("Wire.Arc - Error: The input startVertex is not a valid vertex. Returning None.")
132
+ return None
133
+ if not Topology.IsInstance(middleVertex, "Vertex"):
134
+ if not silent:
135
+ print("Wire.Arc - Error: The input middleVertex is not a valid vertex. Returning None.")
136
+ return None
137
+ if not Topology.IsInstance(endVertex, "Vertex"):
138
+ if not silent:
139
+ print("Wire.Arc - Error: The input endVertex is not a valid vertex. Returning None.")
140
+ return None
141
+ arc_points = circle_arc_points(np.array(Vertex.Coordinates(startVertex)), np.array(Vertex.Coordinates(middleVertex)), np.array(Vertex.Coordinates(endVertex)), sides)
142
+ vertices = []
143
+ for arc_point in arc_points:
144
+ vertices.append(Vertex.ByCoordinates(list(arc_point)))
145
+ arc = Wire.ByVertices(vertices, close=False)
146
+ if not Topology.IsInstance(arc, "Wire"):
147
+ if not silent:
148
+ print("Wire.Arc - Error: Could not create an arc. Returning None.")
149
+ return None
150
+ # Reinterpolate the arc with equal segments
151
+ vertices = []
152
+ for i in range(0,sides+1,1):
153
+ u = i/sides
154
+ v = Wire.VertexByParameter(arc, u)
155
+ vertices.append(v)
156
+ arc = Wire.ByVertices(vertices, close=close)
157
+ if not Topology.IsInstance(arc, "Wire"):
158
+ if not silent:
159
+ print("Wire.Arc - Error: Could not create an arc. Returning None.")
160
+ return None
112
161
  return arc
113
162
 
163
+ def ArcByEdge(edge, sagitta: float = 1, absolute: bool = True, sides: int = 16, close: bool = True, tolerance: float = 0.0001, silent: bool = False):
164
+ """
165
+ Creates an arc. The base chord will be parallel to the x-axis and the height will point in the positive y-axis direction.
166
+
167
+ Parameters
168
+ ----------
169
+ edge : topologic_core.Edge
170
+ The location of the start vertex of the arc.
171
+ sagitta : float , optional
172
+ The length of the sagitta. In mathematics, the sagitta is the line connecting the center of a chord to the apex (or highest point) of the arc subtended by that chord. The default is 1.
173
+ absolute : bool , optional
174
+ If set to True, the sagitta length is treated as an absolute value. Otherwise, it is treated as a ratio based on the length of the edge.
175
+ For example, if the length of the edge is 10, the sagitta is set to 0.5, and absolute is set to False, the sagitta length will be 5. The default is True.
176
+ sides : int , optional
177
+ The number of sides of the arc. The default is 16.
178
+ close : bool , optional
179
+ If set to True, the arc will be closed by connecting the last vertex to the first vertex. Otherwise, it will be left open.
180
+ tolerance : float , optional
181
+ The desired tolerance. The default is 0.0001.
182
+ silent : bool , optional
183
+ If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
184
+
185
+ Returns
186
+ -------
187
+ topologic_core.Wire
188
+ The created arc.
189
+
190
+ """
191
+ from topologicpy.Edge import Edge
192
+ from topologicpy.Wire import Wire
193
+ from topologicpy.Topology import Topology
194
+
195
+ if not Topology.IsInstance(edge, "Edge"):
196
+ if not silent:
197
+ print("Wire.ArcByEdge - Error: The input edge parameter is not a valid edge. Returning None.")
198
+ return None
199
+ if sagitta <= 0:
200
+ if not silent:
201
+ print("Wire.ArcByEdge - Error: The input sagitta parameter is not a valid positive number. Returning None.")
202
+ return None
203
+ sv = Edge.StartVertex(edge)
204
+ ev = Edge.EndVertex(edge)
205
+ if absolute == True:
206
+ length = sagitta
207
+ else:
208
+ length = Edge.Length(edge)*sagitta
209
+ norm = Edge.NormalEdge(edge, length=length)
210
+ cv = Edge.EndVertex(norm)
211
+ return Wire.Arc(sv, cv, ev, sides=sides, close=close)
212
+
114
213
  @staticmethod
115
214
  def BoundingRectangle(topology, optimize: int = 0, mantissa: int = 6, tolerance=0.0001):
116
215
  """
topologicpy/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '0.7.57'
1
+ __version__ = '0.7.60'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: topologicpy
3
- Version: 0.7.57
3
+ Version: 0.7.60
4
4
  Summary: An Advanced Spatial Modelling and Analysis Software Library for Architecture, Engineering, and Construction.
5
5
  Author-email: Wassim Jabi <wassim.jabi@gmail.com>
6
6
  License: MIT License
@@ -1,5 +1,6 @@
1
1
  topologicpy/ANN.py,sha256=XAuUjNvDRK1hhXfo82S-zXmnAPZGEdHJMRdfpu0aJ8I,47901
2
2
  topologicpy/Aperture.py,sha256=p9pUzTQSBWoUaDiug1V1R1hnEIEwYSXFg2t7iRAmNRY,2723
3
+ topologicpy/BVH.py,sha256=dfVQyn5OPN1_50nusS0AxAcmUfqTzpl0vWT7RBEz-WM,12870
3
4
  topologicpy/Cell.py,sha256=_vEYx1kNc3JZJUCCS8nhLM_j8EV4SyZYt3DjNHNRoDw,107707
4
5
  topologicpy/CellComplex.py,sha256=YNmNkH6IUplM9f7agZQd6IL2xnHf5ds3JkGQk4jiSXQ,48029
5
6
  topologicpy/Cluster.py,sha256=TZXuxzdaUr6OHSWnjWpjCOMlVj6YHBH8aUVbDVsncVA,54999
@@ -7,29 +8,29 @@ topologicpy/Color.py,sha256=FrxX2yILqWvYrqD8kBaknfMfOR_phJOmhvTvFc07bY4,18065
7
8
  topologicpy/Context.py,sha256=ppApYKngZZCQBFWaxIMi2z2dokY23c935IDCBosxDAE,3055
8
9
  topologicpy/DGL.py,sha256=Dd6O08D-vSxpjHYgKm45JpKiaeGvWlg1BRMzYMAXGNc,138991
9
10
  topologicpy/Dictionary.py,sha256=cURg452wwk2WeSxWY46ncgAUo5XD1c2c5EtO6ESZHaY,27304
10
- topologicpy/Edge.py,sha256=vhYHkobSLGSWV-oe2oJFFDobqFToDyb7s71yQ840AAA,65166
11
+ topologicpy/Edge.py,sha256=7Mxu9w9AY8uEk-xJpwMlWkuAgK96YIvUo0jtS5xuPq0,66123
11
12
  topologicpy/EnergyModel.py,sha256=NM3_nAdY9_YDtbp9CaEZ0x0xVsetTqVDzm_VSjmq_mI,53746
12
13
  topologicpy/Face.py,sha256=YjU6TxxW2Mf5InumMvzXUXVVRdtjxyRGauRIhGXzkao,116411
13
- topologicpy/Graph.py,sha256=l1Q_ES-iLPET0EpNGzboBHYjKot79z9Qq6Px2vDvo2U,407613
14
+ topologicpy/Graph.py,sha256=NoHGYCCoCFP2nDLrzkM7x4hpemo6KiVeOq5Cm0BR78c,411204
14
15
  topologicpy/Grid.py,sha256=3-sn7CHWGcXk18XCnHjsUttNJTWwmN63g_Insj__p04,18218
15
16
  topologicpy/Helper.py,sha256=i-AfI29NMsZXBaymjilfvxQbuS3wpYbpPw4RWu1YCHs,16358
16
17
  topologicpy/Honeybee.py,sha256=Oc8mfGBNSjs6wxkPzCKmEw1ZPQPbp9XtiYWaAF62oSk,21893
17
18
  topologicpy/Matrix.py,sha256=umgR7An919-wGInXJ1wpqnoQ2jCPdyMe2rcWTZ16upk,8079
18
19
  topologicpy/Neo4j.py,sha256=BezQ-sdpU8B0W4X_kaF7alZrlN0-h4779HFrB3Fsn-w,22033
19
- topologicpy/Plotly.py,sha256=xkBzK4TDGBpZ97aFbWWFQpoqENyLbcwESd1oD9EDIx0,106387
20
+ topologicpy/Plotly.py,sha256=FeRneK3QfMdWZzwnr2lLWvFLQIjwuyq9ms-DghvuZnI,108134
20
21
  topologicpy/Polyskel.py,sha256=EFsuh2EwQJGPLiFUjvtXmAwdX-A4r_DxP5hF7Qd3PaU,19829
21
22
  topologicpy/PyG.py,sha256=LU9LCCzjxGPUM31qbaJXZsTvniTtgugxJY7y612t4A4,109757
22
23
  topologicpy/Shell.py,sha256=joahFtpRQTWJpQOmi3qU4Xe0Sx2XXeayHlXTNx8CzMk,87610
23
24
  topologicpy/Speckle.py,sha256=rUS6PCaxIjEF5_fUruxvMH47FMKg-ohcoU0qAUb-yNM,14267
24
25
  topologicpy/Sun.py,sha256=42tDWMYpwRG7Z2Qjtp94eRgBuqySq7k8TgNUZDK7QxQ,36837
25
- topologicpy/Topology.py,sha256=jTff8K144q4sccF93u8lrLqsH5r5ar5w40zPcmKgm0I,396181
26
- topologicpy/Vector.py,sha256=WQQUbwrg7VKImtxuBUi2i-FRiPT77WlrzLP05gdXKM8,33079
26
+ topologicpy/Topology.py,sha256=cFYSb93kxqcsdGLdeVcdE9td-KZ9X967sEn98NQAYfM,397243
27
+ topologicpy/Vector.py,sha256=A1g83zDHep58iVPY8WQ8iHNrSOfGWFEzvVeDuMnjDNY,33078
27
28
  topologicpy/Vertex.py,sha256=bLY60YWoMsgCgHk7F7k9F93Sq2FJ6AzUcTfJ83NZfHA,71107
28
- topologicpy/Wire.py,sha256=OoPb7SJl0VpZDZpGL0-VkYJ35zPANS7gHDt9tixOSxc,157629
29
+ topologicpy/Wire.py,sha256=rGLAwjd5p80rxvkOkcrE1MPXkU9oZ1iRK7n_wOTLbd0,162382
29
30
  topologicpy/__init__.py,sha256=D7ky87CAQMiS2KE6YLvcTLkTgA2PY7rASe6Z23pjp9k,872
30
- topologicpy/version.py,sha256=i3eXr4TreTY2cKyyMkt49YK22jCkMWn3M2kxi8z-nJM,23
31
- topologicpy-0.7.57.dist-info/LICENSE,sha256=BRNw73R2WdDBICtwhI3wm3cxsaVqLTAGuRwrTltcfxs,1068
32
- topologicpy-0.7.57.dist-info/METADATA,sha256=AsGmeeIIy0llFWnyj1Cp7w8nVawRLopOJAqyW-MAmv0,10918
33
- topologicpy-0.7.57.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
34
- topologicpy-0.7.57.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
35
- topologicpy-0.7.57.dist-info/RECORD,,
31
+ topologicpy/version.py,sha256=OPMe-rPXSkz9Cu9DTdHOcBcmqfzAZp01-uadL4eOXFY,23
32
+ topologicpy-0.7.60.dist-info/LICENSE,sha256=BRNw73R2WdDBICtwhI3wm3cxsaVqLTAGuRwrTltcfxs,1068
33
+ topologicpy-0.7.60.dist-info/METADATA,sha256=zVoxaGqEvSXMGH8W2SJlq4eqAF7XCCZDWEDTjPSSNhw,10918
34
+ topologicpy-0.7.60.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
35
+ topologicpy-0.7.60.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
36
+ topologicpy-0.7.60.dist-info/RECORD,,