topologicpy 0.8.14__py3-none-any.whl → 0.8.15__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 +1 -1
- topologicpy/Matrix.py +77 -0
- topologicpy/Topology.py +53 -79
- topologicpy/version.py +1 -1
- {topologicpy-0.8.14.dist-info → topologicpy-0.8.15.dist-info}/METADATA +1 -1
- {topologicpy-0.8.14.dist-info → topologicpy-0.8.15.dist-info}/RECORD +9 -9
- {topologicpy-0.8.14.dist-info → topologicpy-0.8.15.dist-info}/LICENSE +0 -0
- {topologicpy-0.8.14.dist-info → topologicpy-0.8.15.dist-info}/WHEEL +0 -0
- {topologicpy-0.8.14.dist-info → topologicpy-0.8.15.dist-info}/top_level.txt +0 -0
topologicpy/Cell.py
CHANGED
@@ -1909,7 +1909,7 @@ class Cell():
|
|
1909
1909
|
uRect = Wire.Rectangle(origin=origin, width=height*1.2, length=length*1.2, direction=[1, 0, 0], placement="center")
|
1910
1910
|
for i in range(1, uSides):
|
1911
1911
|
sliceFaces.append(Topology.Translate(Face.ByWire(uRect, tolerance=tolerance), width/uSides*i - width*0.5, 0, 0))
|
1912
|
-
vRect = Wire.Rectangle(origin=origin,
|
1912
|
+
vRect = Wire.Rectangle(origin=origin, length=height*1.2, width=width*1.2, direction=[0, 1, 0], placement="center")
|
1913
1913
|
for i in range(1, vSides):
|
1914
1914
|
sliceFaces.append(Topology.Translate(Face.ByWire(vRect, tolerance=tolerance), 0, length/vSides*i - length*0.5, 0))
|
1915
1915
|
if len(sliceFaces) > 0:
|
topologicpy/Matrix.py
CHANGED
@@ -47,6 +47,83 @@ class Matrix:
|
|
47
47
|
matC.append(tempRow)
|
48
48
|
return matC
|
49
49
|
|
50
|
+
@staticmethod
|
51
|
+
def ByCoordinateSystems(source, target, mantissa: int = 6, silent: bool = False):
|
52
|
+
"""
|
53
|
+
Calculates the 4x4 transformation matrix that maps the source coordinate system to the target coordinate system.
|
54
|
+
An example of a coordinate system matrix is:
|
55
|
+
source = [
|
56
|
+
[0, 0, 0], # Origin
|
57
|
+
[1, 0, 0], # X-axis
|
58
|
+
[0, 1, 0], # Y-axis
|
59
|
+
[0, 0, 1] # Z-axis
|
60
|
+
]
|
61
|
+
|
62
|
+
Parameters
|
63
|
+
----------
|
64
|
+
source : list
|
65
|
+
The 4X3 matrix representing source coordinate system. The rows are in the order: Origin, X-Axis, Y-Axis, Z-Axis.
|
66
|
+
target : list
|
67
|
+
The 4X3 matrix representing target coordinate system. The rows are in the order: Origin, X-Axis, Y-Axis, Z-Axis.
|
68
|
+
mantissa : int , optional
|
69
|
+
The desired length of the mantissa. The default is 6.
|
70
|
+
silent : bool , optional
|
71
|
+
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
72
|
+
|
73
|
+
Returns
|
74
|
+
-------
|
75
|
+
list
|
76
|
+
The 4x4 transformation matrix.
|
77
|
+
"""
|
78
|
+
import numpy as np
|
79
|
+
|
80
|
+
if not isinstance(source, list):
|
81
|
+
if not silent:
|
82
|
+
print("Matrix.ByCoordinateSystems - Error: The source input parameter is not a valid list. Returning None.")
|
83
|
+
return None
|
84
|
+
if not isinstance(target, list):
|
85
|
+
if not silent:
|
86
|
+
print("Matrix.ByCoordinateSystems - Error: The taget input parameter is not a valid list. Returning None.")
|
87
|
+
return None
|
88
|
+
|
89
|
+
# Convert to numpy arrays
|
90
|
+
source_matrix = np.array(source)
|
91
|
+
target_matrix = np.array(target)
|
92
|
+
|
93
|
+
if source_matrix.shape != (4, 3):
|
94
|
+
if not silent:
|
95
|
+
print("Matrix.ByCoordinateSystems - Error: The source input parameter must be 4x3 matrix. Returning None.")
|
96
|
+
return None
|
97
|
+
if target_matrix.shape != (4, 3):
|
98
|
+
if not silent:
|
99
|
+
print("Matrix.ByCoordinateSystems - Error: The target input parameter must be 4x3 matrix. Returning None.")
|
100
|
+
return None
|
101
|
+
|
102
|
+
# Convert input matrices to homogeneous transformations
|
103
|
+
source_to_world = np.eye(4)
|
104
|
+
source_to_world[:3, 0] = source_matrix[1, :] # X-axis
|
105
|
+
source_to_world[:3, 1] = source_matrix[2, :] # Y-axis
|
106
|
+
source_to_world[:3, 2] = source_matrix[3, :] # Z-axis
|
107
|
+
source_to_world[:3, 3] = source_matrix[0, :] # Origin
|
108
|
+
|
109
|
+
target_to_world = np.eye(4)
|
110
|
+
target_to_world[:3, 0] = target_matrix[1, :] # X-axis
|
111
|
+
target_to_world[:3, 1] = target_matrix[2, :] # Y-axis
|
112
|
+
target_to_world[:3, 2] = target_matrix[3, :] # Z-axis
|
113
|
+
target_to_world[:3, 3] = target_matrix[0, :] # Origin
|
114
|
+
|
115
|
+
# Compute the world-to-source transformation (inverse of source_to_world)
|
116
|
+
world_to_source = np.linalg.inv(source_to_world)
|
117
|
+
|
118
|
+
# Compute the source-to-target transformation
|
119
|
+
source_to_target = target_to_world @ world_to_source
|
120
|
+
|
121
|
+
# Convert the result to a list and round values
|
122
|
+
result_list = source_to_target.tolist()
|
123
|
+
rounded_result = [[round(value, mantissa) for value in row] for row in result_list]
|
124
|
+
|
125
|
+
return rounded_result
|
126
|
+
|
50
127
|
@staticmethod
|
51
128
|
def ByRotation(angleX=0, angleY=0, angleZ=0, order="xyz"):
|
52
129
|
def rotateXMatrix(radians):
|
topologicpy/Topology.py
CHANGED
@@ -1498,6 +1498,8 @@ class Topology():
|
|
1498
1498
|
edges = [e for e in edges if e]
|
1499
1499
|
faces = [f for f in faces if f]
|
1500
1500
|
|
1501
|
+
return_topology = None
|
1502
|
+
|
1501
1503
|
if not vertices:
|
1502
1504
|
return None
|
1503
1505
|
|
@@ -1527,7 +1529,7 @@ class Topology():
|
|
1527
1529
|
if topologyType == "wire" and edges:
|
1528
1530
|
topEdges = [Edge.ByVertices([topVerts[e[0]], topVerts[e[1]]], tolerance=tolerance) for e in edges]
|
1529
1531
|
if topEdges:
|
1530
|
-
|
1532
|
+
return_topology = topologyByEdges(topEdges, topologyType)
|
1531
1533
|
elif faces:
|
1532
1534
|
for aFace in faces:
|
1533
1535
|
faceEdges = [Edge.ByVertices([topVerts[aFace[i]], topVerts[aFace[i + 1]]], tolerance=tolerance) for i in range(len(aFace) - 1)]
|
@@ -1545,14 +1547,14 @@ class Topology():
|
|
1545
1547
|
except:
|
1546
1548
|
pass
|
1547
1549
|
if topFaces:
|
1548
|
-
|
1550
|
+
return_topology = topologyByFaces(topFaces, topologyType=topologyType, tolerance=tolerance)
|
1549
1551
|
elif edges:
|
1550
1552
|
topEdges = [Edge.ByVertices([topVerts[e[0]], topVerts[e[1]]], tolerance=tolerance) for e in edges]
|
1551
1553
|
if topEdges:
|
1552
|
-
|
1554
|
+
return_topology = topologyByEdges(topEdges, topologyType)
|
1553
1555
|
else:
|
1554
|
-
|
1555
|
-
return
|
1556
|
+
return_topology = Cluster.ByTopologies(topVerts)
|
1557
|
+
return return_topology
|
1556
1558
|
|
1557
1559
|
@staticmethod
|
1558
1560
|
def ByBIMPath(path, guidKey: str = "guid", colorKey: str = "color", typeKey: str = "type",
|
@@ -6264,7 +6266,7 @@ class Topology():
|
|
6264
6266
|
@staticmethod
|
6265
6267
|
def IsSimilar(topologyA, topologyB, removeCoplanarFaces: bool = False, mantissa: int = 6, epsilon: float = 0.1, tolerance: float = 0.0001, silent: bool = False):
|
6266
6268
|
"""
|
6267
|
-
|
6269
|
+
Calculates if the input topologies are similar. See https://en.wikipedia.org/wiki/Similarity_(geometry).
|
6268
6270
|
|
6269
6271
|
Parameters
|
6270
6272
|
----------
|
@@ -6286,7 +6288,8 @@ class Topology():
|
|
6286
6288
|
Returns
|
6287
6289
|
-------
|
6288
6290
|
[bool, list]
|
6289
|
-
True if the input topologies are similar
|
6291
|
+
True if the input topologies are similar, False otherwise and the matrix needed to tranform topologyA to match topologyB.
|
6292
|
+
If the topologies are not similar, the transformation matrix is None.
|
6290
6293
|
|
6291
6294
|
"""
|
6292
6295
|
from topologicpy.Vertex import Vertex
|
@@ -6308,7 +6311,6 @@ class Topology():
|
|
6308
6311
|
if removeCoplanarFaces == True:
|
6309
6312
|
topologyA = Topology.RemoveCoplanarFaces(topologyA, epsilon=epsilon, tolerance=tolerance)
|
6310
6313
|
topologyB = Topology.RemoveCoplanarFaces(topologyB, epsilon=epsilon, tolerance=tolerance)
|
6311
|
-
Topology.Show(topologyA, topologyB)
|
6312
6314
|
len_vertices_a = len(Topology.Vertices(topologyA))
|
6313
6315
|
if len_vertices_a < 1 and not Topology.IsInstance(topologyA, "vertex"):
|
6314
6316
|
if not silent:
|
@@ -6398,90 +6400,58 @@ class Topology():
|
|
6398
6400
|
if len(faces_a) > 0 and len(faces_b) > 0:
|
6399
6401
|
largest_faces_a = Topology.LargestFaces(topologyA)
|
6400
6402
|
largest_faces_b = Topology.LargestFaces(topologyB)
|
6401
|
-
|
6403
|
+
else:
|
6404
|
+
if not silent:
|
6405
|
+
print("Topology.IsSimilar - Error: The topologies do not have faces. Returning None.")
|
6406
|
+
return False, None
|
6402
6407
|
|
6403
6408
|
# Process largest faces
|
6404
|
-
largest_faces_a = Topology.LargestFaces(topologyA)
|
6405
|
-
largest_faces_b = Topology.LargestFaces(topologyB)
|
6406
|
-
face_a_d = Dictionary.ByKeyValue("faceColor", "red")
|
6407
|
-
face_b_d = Dictionary.ByKeyValue("faceColor", "blue")
|
6408
6409
|
for face_a in largest_faces_a:
|
6410
|
+
l_edge_a = Topology.LongestEdges(face_a)[0]
|
6411
|
+
length_a = Edge.Length(l_edge_a)
|
6409
6412
|
centroid_a = Topology.Centroid(face_a)
|
6410
|
-
|
6413
|
+
origin_a = Vertex.Coordinates(centroid_a)
|
6414
|
+
zaxis_a = Face.Normal(face_a)
|
6411
6415
|
third_vertex_a = Face.ThirdVertex(face_a) # Pick a third vertex for orientation
|
6412
|
-
|
6416
|
+
xaxis_a = Vector.Normalize(Vector.ByVertices(centroid_a, third_vertex_a))
|
6417
|
+
yaxis_a = Vector.Cross(xaxis_a, zaxis_a)
|
6418
|
+
# Build Coordinate System matrix. The origin will be (0,0,0) once the trans matrix is applied.
|
6419
|
+
cs_a = [[0,0,0]]+[xaxis_a]+[yaxis_a]+[zaxis_a]
|
6420
|
+
tran_matrix_a = Matrix.ByTranslation(translateX=-origin_a[0], translateY=-origin_a[1], translateZ=-origin_a[2])
|
6413
6421
|
|
6422
|
+
# Check against the faces of B:
|
6414
6423
|
for face_b in largest_faces_b:
|
6415
|
-
|
6424
|
+
l_edge_b = Topology.LongestEdges(face_b)[0]
|
6425
|
+
length_b = Edge.Length(l_edge_b)
|
6426
|
+
scale_factor = length_b/length_a
|
6427
|
+
scale_matrix = Matrix.ByScaling(scaleX=scale_factor, scaleY=scale_factor, scaleZ=scale_factor)
|
6416
6428
|
centroid_b = Topology.Centroid(face_b)
|
6417
|
-
|
6429
|
+
origin_b = Vertex.Coordinates(centroid_b)
|
6430
|
+
zaxis_b = Face.Normal(face_b)
|
6418
6431
|
third_vertex_b = Face.ThirdVertex(face_b)
|
6419
|
-
|
6420
|
-
|
6432
|
+
xaxis_b = Vector.Normalize(Vector.ByVertices(centroid_b, third_vertex_b))
|
6433
|
+
yaxis_b = Vector.Cross(xaxis_b, zaxis_b)
|
6434
|
+
cs_b = [origin_b]+[xaxis_b]+[yaxis_b]+[zaxis_b]
|
6421
6435
|
# Compute transformation matrix
|
6422
|
-
|
6423
|
-
|
6424
|
-
|
6425
|
-
|
6426
|
-
translation_matrix = Matrix.ByTranslation(
|
6427
|
-
Vertex.X(centroid_b) - Vertex.X(centroid_a),
|
6428
|
-
Vertex.Y(centroid_b) - Vertex.Y(centroid_a),
|
6429
|
-
Vertex.Z(centroid_b) - Vertex.Z(centroid_a)
|
6430
|
-
)
|
6431
|
-
combined_matrix = Matrix.Multiply(rotation_matrix, scaling_matrix)
|
6432
|
-
combined_matrix = Matrix.Multiply(translation_matrix, combined_matrix)
|
6433
|
-
|
6434
|
-
transformed_centroid_a = Topology.Transform(centroid_a, combined_matrix)
|
6435
|
-
|
6436
|
-
# One last translation to synchronise the two centroids.
|
6437
|
-
translation_matrix = Matrix.ByTranslation(
|
6438
|
-
Vertex.X(centroid_b) - Vertex.X(transformed_centroid_a),
|
6439
|
-
Vertex.Y(centroid_b) - Vertex.Y(transformed_centroid_a),
|
6440
|
-
Vertex.Z(centroid_b) - Vertex.Z(transformed_centroid_a)
|
6441
|
-
)
|
6442
|
-
combined_matrix = Matrix.Multiply(translation_matrix, combined_matrix)
|
6436
|
+
# translate to origin, scale, then transform coordinate systems
|
6437
|
+
combined_matrix = Matrix.Multiply(scale_matrix, tran_matrix_a)
|
6438
|
+
matching_matrix = Matrix.ByCoordinateSystems(cs_a, cs_b)
|
6439
|
+
combined_matrix = Matrix.Multiply(matching_matrix, combined_matrix)
|
6443
6440
|
# Apply transformation and compare
|
6444
|
-
|
6445
|
-
|
6446
|
-
|
6447
|
-
|
6448
|
-
|
6449
|
-
|
6450
|
-
|
6441
|
+
try:
|
6442
|
+
transformedA = Topology.Transform(topologyA, combined_matrix)
|
6443
|
+
status = Topology.IsVertexCongruent(transformedA, topologyB, mantissa=mantissa, epsilon=epsilon, tolerance=tolerance, silent=silent)
|
6444
|
+
if status:
|
6445
|
+
return True, combined_matrix
|
6446
|
+
except:
|
6447
|
+
pass
|
6451
6448
|
|
6452
6449
|
return False, None
|
6453
|
-
# for l_f_a in largest_faces_a:
|
6454
|
-
# l_e_a = Face.NormalEdge(l_f_a)
|
6455
|
-
# centroid_a = Edge.StartVertex(l_e_a)
|
6456
|
-
# dir_a = Vector.Normalize(Edge.Direction(l_e_a))
|
6457
|
-
# trans_matrix_a = Matrix.ByTranslation(-Vertex.X(centroid_a), -Vertex.Y(centroid_a), -Vertex.Z(centroid_a))
|
6458
|
-
# sf_a = 1/Face.Area(l_f_a)
|
6459
|
-
# scaling_matrix_a = Matrix.ByScaling(sf_a, sf_a, sf_a)
|
6460
|
-
# for l_f_b in largest_faces_b:
|
6461
|
-
# l_e_b = Face.NormalEdge(l_f_b)
|
6462
|
-
# centroid_b = Edge.StartVertex(l_e_b)
|
6463
|
-
# dir_b = Vector.Normalize(Edge.Direction(l_e_b))
|
6464
|
-
# rotation_matrix = Matrix.ByVectors(dir_a, dir_b)
|
6465
|
-
# sf_b = 1/Face.Area(l_f_b)
|
6466
|
-
# scaling_matrix_b = Matrix.ByScaling(sf_b, sf_b, sf_b)
|
6467
|
-
# trans_matrix_b = Matrix.ByTranslation(-Vertex.X(centroid_b), -Vertex.Y(centroid_b), -Vertex.Z(centroid_b))
|
6468
|
-
# combined_matrix_a = Matrix.Multiply(rotation_matrix, scaling_matrix_a)
|
6469
|
-
# combined_matrix_a = Matrix.Multiply(combined_matrix_a, trans_matrix_a)
|
6470
|
-
# combined_matrix_b = Matrix.Multiply(scaling_matrix_b, trans_matrix_b)
|
6471
|
-
# top_a = Topology.Transform(topologyA, combined_matrix_a)
|
6472
|
-
# top_b = Topology.Transform(topologyB, combined_matrix_b)
|
6473
|
-
# Topology.Show(top_a, top_b)
|
6474
|
-
# if Topology.IsVertexCongruent(top_a, top_b, mantissa=mantissa, epsilon=epsilon, tolerance=tolerance, silent=silent):
|
6475
|
-
# Topology.Show(top_a, top_b)
|
6476
|
-
# final_matrix = Matrix.Multiply(Matrix.Invert(combined_matrix_b), combined_matrix_a)
|
6477
|
-
# return True, final_matrix
|
6478
6450
|
|
6479
|
-
return False, None
|
6480
|
-
|
6481
6451
|
@staticmethod
|
6482
6452
|
def IsVertexCongruent(topologyA, topologyB, mantissa: int = 6, epsilon: float = 0.1, tolerance: float = 0.0001, silent : bool = False):
|
6483
6453
|
"""
|
6484
|
-
Returns True if the input topologies are vertex
|
6454
|
+
Returns True if the input topologies are vertex congruent (have same number of vertices and all vertices are congruent within a tolerance). Returns False otherwise.
|
6485
6455
|
|
6486
6456
|
Parameters
|
6487
6457
|
----------
|
@@ -6491,6 +6461,9 @@ class Topology():
|
|
6491
6461
|
The second input topology.
|
6492
6462
|
mantissa : int , optional
|
6493
6463
|
The desired length of the mantissa. The default is 6.
|
6464
|
+
epsilon : float , optional
|
6465
|
+
The desired accepted tolerance for the number of matched number of vertices. For example, an epsilon of 0.1 indicates that
|
6466
|
+
the algorithm will return True even if 10% of the vertices do not match. The default is 0.1.
|
6494
6467
|
tolerance : float , optional
|
6495
6468
|
The desired tolerance. The default is 0.0001.
|
6496
6469
|
silent : bool , optional
|
@@ -6504,7 +6477,7 @@ class Topology():
|
|
6504
6477
|
"""
|
6505
6478
|
from topologicpy.Vertex import Vertex
|
6506
6479
|
|
6507
|
-
def coordinates_unmatched_ratio(list1, list2, tolerance):
|
6480
|
+
def coordinates_unmatched_ratio(list1, list2, mantissa, tolerance):
|
6508
6481
|
"""
|
6509
6482
|
Calculates the percentage of coordinates in list1 that do not have a corresponding
|
6510
6483
|
coordinate in list2 within a specified tolerance, with each match being unique.
|
@@ -6543,7 +6516,7 @@ class Topology():
|
|
6543
6516
|
total_coordinates = len(list1)
|
6544
6517
|
unmatched_ratio = (unmatched_count / total_coordinates)
|
6545
6518
|
|
6546
|
-
return unmatched_ratio
|
6519
|
+
return round(unmatched_ratio, mantissa)
|
6547
6520
|
|
6548
6521
|
if not Topology.IsInstance(topologyA, "topology"):
|
6549
6522
|
if not silent:
|
@@ -6568,11 +6541,12 @@ class Topology():
|
|
6568
6541
|
return None
|
6569
6542
|
# Number of vertices
|
6570
6543
|
max_len = max([len_vertices_a, len_vertices_b])
|
6571
|
-
|
6544
|
+
ratio = round(float(abs(len_vertices_a - len_vertices_b))/float(max_len), mantissa)
|
6545
|
+
if ratio > epsilon:
|
6572
6546
|
return False
|
6573
6547
|
coords_a = [Vertex.Coordinates(v, mantissa=mantissa) for v in vertices_a]
|
6574
6548
|
coords_b = [Vertex.Coordinates(v, mantissa=mantissa) for v in vertices_b]
|
6575
|
-
unmatched_ratio = coordinates_unmatched_ratio(coords_a, coords_b, tolerance=tolerance)
|
6549
|
+
unmatched_ratio = coordinates_unmatched_ratio(coords_a, coords_b, mantissa=mantissa, tolerance=tolerance)
|
6576
6550
|
if unmatched_ratio <= epsilon:
|
6577
6551
|
return True
|
6578
6552
|
return False
|
topologicpy/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = '0.8.
|
1
|
+
__version__ = '0.8.15'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: topologicpy
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.15
|
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
|
@@ -1,7 +1,7 @@
|
|
1
1
|
topologicpy/ANN.py,sha256=m_WxD1lgQqDhUpaM20Lia6TmJACDYaAE96wigsi-99U,47932
|
2
2
|
topologicpy/Aperture.py,sha256=p9pUzTQSBWoUaDiug1V1R1hnEIEwYSXFg2t7iRAmNRY,2723
|
3
3
|
topologicpy/BVH.py,sha256=1q2lR5eDs7Wnwv7M-Kr7Cj3GG_iy7d1ddaZqWGHdX-w,12932
|
4
|
-
topologicpy/Cell.py,sha256=
|
4
|
+
topologicpy/Cell.py,sha256=BN6hjYpN6Fse0mn7d7oHh65D7c6Mt1Yu7iK3lEp_Cj0,118262
|
5
5
|
topologicpy/CellComplex.py,sha256=udDzbMub3d2QYn1XGMzt3F9Su2VXuAGvn0eoTtOIn3g,58207
|
6
6
|
topologicpy/Cluster.py,sha256=o5jdMRpcGfSGGiXQdFg-e9XcnBF5AqTj3xb1nSpwJWE,58606
|
7
7
|
topologicpy/Color.py,sha256=q9xsGmxFMz7sQKmygwSVS12GaTRB-OT0-_i6t3-cthE,20307
|
@@ -15,7 +15,7 @@ topologicpy/Graph.py,sha256=FBmiMObzztPwZFJ2T846Ivz0Y1kpzMF0sF-PDUMPk4o,498946
|
|
15
15
|
topologicpy/Grid.py,sha256=2s9cSlWldivn1i9EUz4OOokJyANveqmRe_vR93CAndI,18245
|
16
16
|
topologicpy/Helper.py,sha256=4H5KPiv_eiEs489UOOyGLe9RaeoZIfmMh3mk_YCHmXg,29100
|
17
17
|
topologicpy/Honeybee.py,sha256=uDVtDbloydNoaBFcSNukKL_2PLyD6XKkCp1VHz1jtaU,21751
|
18
|
-
topologicpy/Matrix.py,sha256=
|
18
|
+
topologicpy/Matrix.py,sha256=i22RLP5ebUAMuU7V1tZ__Z4lf1pg9fzq9nENsDZUV74,22779
|
19
19
|
topologicpy/Neo4j.py,sha256=BKOF29fRgXmdpMGkrNzuYbyqgCJ6ElPPMYlfTxXiVbc,22392
|
20
20
|
topologicpy/Plotly.py,sha256=RU_VioIRLGIYzwyKI9OQHOx9OxxGppdpagysgTbdxIE,115942
|
21
21
|
topologicpy/Polyskel.py,sha256=DDUayC29LI1EkxdK09F0DgGyH-NCOU1LE3J2Imz0rEI,19832
|
@@ -23,14 +23,14 @@ topologicpy/PyG.py,sha256=LU9LCCzjxGPUM31qbaJXZsTvniTtgugxJY7y612t4A4,109757
|
|
23
23
|
topologicpy/Shell.py,sha256=--dJoSdz6BapxVEyG2DI0W5apO_xwLORj5qmR15yl2Y,87983
|
24
24
|
topologicpy/Speckle.py,sha256=AlsGlSDuKRtX5jhVsPNSSjjbZis079HbUchDH_5RJmE,18187
|
25
25
|
topologicpy/Sun.py,sha256=42tDWMYpwRG7Z2Qjtp94eRgBuqySq7k8TgNUZDK7QxQ,36837
|
26
|
-
topologicpy/Topology.py,sha256=
|
26
|
+
topologicpy/Topology.py,sha256=O91rRl32hG3YvKowSDGbxaq3zdM16RIChT4HF9hNODM,463786
|
27
27
|
topologicpy/Vector.py,sha256=GkGt-aJ591IJ2IPffMAudvITLDPi2qZibZc4UAav6m8,42407
|
28
28
|
topologicpy/Vertex.py,sha256=xr8KSgKnx-hgVp-eIvMPAKRv04R-wk-_4zc57xVyEqE,80793
|
29
29
|
topologicpy/Wire.py,sha256=x7tOeR1o5qi5cXp_d9JrQrSXfYztCWiBC1OnVl6Yp7A,228463
|
30
30
|
topologicpy/__init__.py,sha256=vlPCanUbxe5NifC4pHcnhSzkmmYcs_UrZrTlVMsxcFs,928
|
31
|
-
topologicpy/version.py,sha256=
|
32
|
-
topologicpy-0.8.
|
33
|
-
topologicpy-0.8.
|
34
|
-
topologicpy-0.8.
|
35
|
-
topologicpy-0.8.
|
36
|
-
topologicpy-0.8.
|
31
|
+
topologicpy/version.py,sha256=HbO2F5YBMLHRpphNJizV3_Sp8T0xTu3xaqHhjkNWPRc,23
|
32
|
+
topologicpy-0.8.15.dist-info/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
|
33
|
+
topologicpy-0.8.15.dist-info/METADATA,sha256=ft8T8ED9kou73cq52cvDshxjosXDKXdtXLqososiUNM,10513
|
34
|
+
topologicpy-0.8.15.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
35
|
+
topologicpy-0.8.15.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
|
36
|
+
topologicpy-0.8.15.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|