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/BVH.py +296 -0
- topologicpy/Edge.py +40 -16
- topologicpy/Graph.py +124 -79
- topologicpy/Plotly.py +33 -6
- topologicpy/Topology.py +16 -0
- topologicpy/Vector.py +0 -1
- topologicpy/Wire.py +159 -60
- topologicpy/version.py +1 -1
- {topologicpy-0.7.57.dist-info → topologicpy-0.7.60.dist-info}/METADATA +1 -1
- {topologicpy-0.7.57.dist-info → topologicpy-0.7.60.dist-info}/RECORD +13 -12
- {topologicpy-0.7.57.dist-info → topologicpy-0.7.60.dist-info}/LICENSE +0 -0
- {topologicpy-0.7.57.dist-info → topologicpy-0.7.60.dist-info}/WHEEL +0 -0
- {topologicpy-0.7.57.dist-info → topologicpy-0.7.60.dist-info}/top_level.txt +0 -0
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
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
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
|
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
|
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
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
|
33
|
+
The start vertex of the arc.
|
34
34
|
middleVertex : topologic_core.Vertex
|
35
|
-
The
|
35
|
+
The middle vertex (apex) of the arc.
|
36
36
|
endVertex : topologic_core.Vertex
|
37
|
-
The
|
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.
|
55
|
+
from topologicpy.Topology import Topology
|
55
56
|
import numpy as np
|
56
|
-
|
57
57
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
#
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
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
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
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.
|
1
|
+
__version__ = '0.7.60'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: topologicpy
|
3
|
-
Version: 0.7.
|
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=
|
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=
|
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=
|
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=
|
26
|
-
topologicpy/Vector.py,sha256=
|
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=
|
29
|
+
topologicpy/Wire.py,sha256=rGLAwjd5p80rxvkOkcrE1MPXkU9oZ1iRK7n_wOTLbd0,162382
|
29
30
|
topologicpy/__init__.py,sha256=D7ky87CAQMiS2KE6YLvcTLkTgA2PY7rASe6Z23pjp9k,872
|
30
|
-
topologicpy/version.py,sha256=
|
31
|
-
topologicpy-0.7.
|
32
|
-
topologicpy-0.7.
|
33
|
-
topologicpy-0.7.
|
34
|
-
topologicpy-0.7.
|
35
|
-
topologicpy-0.7.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|