topologicpy 0.8.7__py3-none-any.whl → 0.8.9__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 +122 -0
- topologicpy/Graph.py +238 -126
- topologicpy/Vector.py +114 -0
- topologicpy/Vertex.py +19 -6
- topologicpy/Wire.py +5 -22
- topologicpy/version.py +1 -1
- {topologicpy-0.8.7.dist-info → topologicpy-0.8.9.dist-info}/METADATA +1 -1
- {topologicpy-0.8.7.dist-info → topologicpy-0.8.9.dist-info}/RECORD +11 -11
- {topologicpy-0.8.7.dist-info → topologicpy-0.8.9.dist-info}/LICENSE +0 -0
- {topologicpy-0.8.7.dist-info → topologicpy-0.8.9.dist-info}/WHEEL +0 -0
- {topologicpy-0.8.7.dist-info → topologicpy-0.8.9.dist-info}/top_level.txt +0 -0
topologicpy/Cell.py
CHANGED
@@ -2352,6 +2352,128 @@ class Cell():
|
|
2352
2352
|
volume = None
|
2353
2353
|
return volume
|
2354
2354
|
|
2355
|
+
@staticmethod
|
2356
|
+
def Wedge(origin=None,
|
2357
|
+
width=1,
|
2358
|
+
length=1,
|
2359
|
+
height=1,
|
2360
|
+
flipHorizontal = False,
|
2361
|
+
flipVertical = False,
|
2362
|
+
direction=[0,0,1],
|
2363
|
+
placement="center",
|
2364
|
+
tolerance=0.0001,
|
2365
|
+
silent=False):
|
2366
|
+
"""
|
2367
|
+
Creates a Wedge.
|
2368
|
+
|
2369
|
+
Parameters
|
2370
|
+
----------
|
2371
|
+
origin : topologic_core.Vertex , optional
|
2372
|
+
The location of the origin of the Wedge. The default is None which results in the Wedge being placed at (0, 0, 0).
|
2373
|
+
width : float , optional
|
2374
|
+
The overall width of the Wedge. The default is 1.0.
|
2375
|
+
length : float , optional
|
2376
|
+
The overall length of the Wedge. The default is 1.0.
|
2377
|
+
height : float , optional
|
2378
|
+
The overall height of the Wedge. The default is 1.0.
|
2379
|
+
direction : list , optional
|
2380
|
+
The vector representing the up direction of the Wedge. The default is [0, 0, 1].
|
2381
|
+
placement : str , optional
|
2382
|
+
The description of the placement of the origin of the Wedge. This can be "center", "lowerleft", "upperleft", "lowerright", "upperright". It is case insensitive. The default is "center".
|
2383
|
+
tolerance : float , optional
|
2384
|
+
The desired tolerance. The default is 0.0001.
|
2385
|
+
silent : bool , optional
|
2386
|
+
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
2387
|
+
|
2388
|
+
Returns
|
2389
|
+
-------
|
2390
|
+
topologic_core.Cell
|
2391
|
+
The created Wedge.
|
2392
|
+
|
2393
|
+
"""
|
2394
|
+
from topologicpy.Vertex import Vertex
|
2395
|
+
from topologicpy.Face import Face
|
2396
|
+
from topologicpy.Topology import Topology
|
2397
|
+
|
2398
|
+
if not isinstance(width, int) and not isinstance(width, float):
|
2399
|
+
if not silent:
|
2400
|
+
print("Cell.Wedge - Error: The width input parameter is not a valid number. Returning None.")
|
2401
|
+
return None
|
2402
|
+
if not isinstance(length, int) and not isinstance(length, float):
|
2403
|
+
if not silent:
|
2404
|
+
print("Cell.Wedge - Error: The length input parameter is not a valid number. Returning None.")
|
2405
|
+
return None
|
2406
|
+
if not isinstance(height, int) and not isinstance(height, float):
|
2407
|
+
if not silent:
|
2408
|
+
print("Cell.Wedge - Error: The height input parameter is not a valid number. Returning None.")
|
2409
|
+
return None
|
2410
|
+
if width <= tolerance:
|
2411
|
+
if not silent:
|
2412
|
+
print("Cell.Wedge - Error: The width input parameter must be a positive number greater than the tolerance input parameter. Returning None.")
|
2413
|
+
return None
|
2414
|
+
if length <= tolerance:
|
2415
|
+
if not silent:
|
2416
|
+
print("Cell.Wedge - Error: The length input parameter must be a positive number greater than the tolerance input parameter. Returning None.")
|
2417
|
+
return None
|
2418
|
+
if height <= tolerance:
|
2419
|
+
if not silent:
|
2420
|
+
print("Cell.Wedge - Error: The a input parameter must be a positive number greater than the tolerance input parameter. Returning None.")
|
2421
|
+
return None
|
2422
|
+
if origin == None:
|
2423
|
+
origin = Vertex.Origin()
|
2424
|
+
if not Topology.IsInstance(origin, "vertex"):
|
2425
|
+
if not silent:
|
2426
|
+
print("Cell.Wedge - Error: The origin input parameter is not a valid topologic vertex. Returning None.")
|
2427
|
+
return None
|
2428
|
+
if not isinstance(direction, list):
|
2429
|
+
if not silent:
|
2430
|
+
print("Cell.Wedge - Error: The direction input parameter is not a valid list. Returning None.")
|
2431
|
+
return None
|
2432
|
+
if not len(direction) == 3:
|
2433
|
+
if not silent:
|
2434
|
+
print("Cell.Wedge - Error: The direction input parameter is not a valid vector. Returning None.")
|
2435
|
+
return None
|
2436
|
+
|
2437
|
+
# Define the vertices of the T-shape (counterclockwise)
|
2438
|
+
v1 = Vertex.ByCoordinates(0,0,0)
|
2439
|
+
v2 = Vertex.ByCoordinates(width, 0, 0)
|
2440
|
+
v3 = Vertex.ByCoordinates(width, length, 0)
|
2441
|
+
v4 = Vertex.ByCoordinates(0, length, 0)
|
2442
|
+
v5 = Vertex.ByCoordinates(0, length, height)
|
2443
|
+
v6 = Vertex.ByCoordinates(0, 0, height)
|
2444
|
+
|
2445
|
+
f1 = Face.ByVertices([v1, v2, v3, v4], tolerance=tolerance)
|
2446
|
+
f2 = Face.ByVertices([v1, v2, v6], tolerance=tolerance)
|
2447
|
+
f3 = Face.ByVertices([v4, v5, v3], tolerance=tolerance)
|
2448
|
+
f4 = Face.ByVertices([v1, v6, v5, v4], tolerance=tolerance)
|
2449
|
+
f5 = Face.ByVertices([v2, v3, v5, v6], tolerance=tolerance)
|
2450
|
+
cell = Cell.ByFaces([f1, f2, f3, f4, f5])
|
2451
|
+
cell = Topology.Translate(cell, -width/2, -length/2, -height/2)
|
2452
|
+
cell = Topology.Translate(cell, Vertex.X(origin), Vertex.Y(origin), Vertex.Z(origin))
|
2453
|
+
if flipHorizontal == True:
|
2454
|
+
xScale = -1
|
2455
|
+
else:
|
2456
|
+
xScale = 1
|
2457
|
+
if flipVertical == True:
|
2458
|
+
zScale = -1
|
2459
|
+
else:
|
2460
|
+
zScale = 1
|
2461
|
+
if xScale == -1 or zScale == -1:
|
2462
|
+
cell = Topology.Scale(cell, origin=origin, x=xScale, y=1, z=zScale)
|
2463
|
+
if placement.lower() == "lowerleft":
|
2464
|
+
cell = Topology.Translate(cell, origin=origin, x=width/2, y=length/2, z=height/2)
|
2465
|
+
elif placement.lower() == "upperright":
|
2466
|
+
cell = Topology.Translate(cell, origin=origin, x=-width/2, y=-length/2, z=-height/2)
|
2467
|
+
elif placement.lower() == "upperleft":
|
2468
|
+
cell = Topology.Translate(cell, origin=origin, x=width/2, y=-length/2, z=-height/2)
|
2469
|
+
elif placement.lower() == "lowerright":
|
2470
|
+
cell = Topology.Translate(cell, origin=origin, x=-width/2, y=length/2, z=height/2)
|
2471
|
+
|
2472
|
+
if direction != [0, 0, 1]:
|
2473
|
+
cell = Topology.Orient(cell, origin=origin, dirA=[0, 0, 1], dirB=direction)
|
2474
|
+
|
2475
|
+
return cell
|
2476
|
+
|
2355
2477
|
@staticmethod
|
2356
2478
|
def Wires(cell) -> list:
|
2357
2479
|
"""
|
topologicpy/Graph.py
CHANGED
@@ -264,6 +264,164 @@ class _DrawTree(object):
|
|
264
264
|
return self.__str__()
|
265
265
|
|
266
266
|
class Graph:
|
267
|
+
@staticmethod
|
268
|
+
def AddEdge(graph, edge, transferVertexDictionaries: bool = False, transferEdgeDictionaries: bool = False, tolerance: float = 0.0001, silent: bool = False):
|
269
|
+
"""
|
270
|
+
Adds the input edge to the input Graph.
|
271
|
+
|
272
|
+
Parameters
|
273
|
+
----------
|
274
|
+
graph : topologic_core.Graph
|
275
|
+
The input graph.
|
276
|
+
edge : topologic_core.Edge
|
277
|
+
The input edge.
|
278
|
+
transferVertexDictionaries : bool, optional
|
279
|
+
If set to True, the dictionaries of the vertices are transferred to the graph.
|
280
|
+
transferEdgeDictionaries : bool, optional
|
281
|
+
If set to True, the dictionaries of the edges are transferred to the graph.
|
282
|
+
tolerance : float , optional
|
283
|
+
The desired tolerance. The default is 0.0001.
|
284
|
+
silent : bool , optional
|
285
|
+
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
286
|
+
|
287
|
+
Returns
|
288
|
+
-------
|
289
|
+
topologic_core.Graph
|
290
|
+
The input graph with the input edge added to it.
|
291
|
+
|
292
|
+
"""
|
293
|
+
from topologicpy.Vertex import Vertex
|
294
|
+
from topologicpy.Edge import Edge
|
295
|
+
from topologicpy.Dictionary import Dictionary
|
296
|
+
from topologicpy.Topology import Topology
|
297
|
+
|
298
|
+
def addIfUnique(graph_vertices, vertex, tolerance=0.0001):
|
299
|
+
unique = True
|
300
|
+
returnVertex = vertex
|
301
|
+
for gv in graph_vertices:
|
302
|
+
if (Vertex.Distance(vertex, gv) < tolerance):
|
303
|
+
if transferVertexDictionaries == True:
|
304
|
+
gd = Topology.Dictionary(gv)
|
305
|
+
vd = Topology.Dictionary(vertex)
|
306
|
+
gk = gd.Keys()
|
307
|
+
vk = vd.Keys()
|
308
|
+
d = None
|
309
|
+
if (len(gk) > 0) and (len(vk) > 0):
|
310
|
+
d = Dictionary.ByMergedDictionaries([gd, vd])
|
311
|
+
elif (len(gk) > 0) and (len(vk) < 1):
|
312
|
+
d = gd
|
313
|
+
elif (len(gk) < 1) and (len(vk) > 0):
|
314
|
+
d = vd
|
315
|
+
if d:
|
316
|
+
_ = Topology.SetDictionary(gv, d, silent=True)
|
317
|
+
unique = False
|
318
|
+
returnVertex = gv
|
319
|
+
break
|
320
|
+
if unique:
|
321
|
+
graph_vertices.append(vertex)
|
322
|
+
return [graph_vertices, returnVertex]
|
323
|
+
|
324
|
+
if not Topology.IsInstance(graph, "Graph"):
|
325
|
+
if not silent:
|
326
|
+
print("Graph.AddEdge - Error: The input graph is not a valid graph. Returning None.")
|
327
|
+
return None
|
328
|
+
if not Topology.IsInstance(edge, "Edge"):
|
329
|
+
if not silent:
|
330
|
+
print("Graph.AddEdge - Error: The input edge is not a valid edge. Returning the input graph.")
|
331
|
+
return graph
|
332
|
+
graph_vertices = Graph.Vertices(graph)
|
333
|
+
graph_edges = Graph.Edges(graph, graph_vertices, tolerance=tolerance)
|
334
|
+
vertices = Topology.Vertices(edge)
|
335
|
+
new_vertices = []
|
336
|
+
for vertex in vertices:
|
337
|
+
graph_vertices, nv = addIfUnique(graph_vertices, vertex, tolerance=tolerance)
|
338
|
+
new_vertices.append(nv)
|
339
|
+
new_edge = Edge.ByVertices([new_vertices[0], new_vertices[1]], tolerance=tolerance)
|
340
|
+
if transferEdgeDictionaries == True:
|
341
|
+
d = Topology.Dictionary(edge)
|
342
|
+
keys = Dictionary.Keys(d)
|
343
|
+
if isinstance(keys, list):
|
344
|
+
if len(keys) > 0:
|
345
|
+
_ = Topology.SetDictionary(new_edge, d, silent=True)
|
346
|
+
graph_edges.append(new_edge)
|
347
|
+
new_graph = Graph.ByVerticesEdges(graph_vertices, graph_edges)
|
348
|
+
return new_graph
|
349
|
+
|
350
|
+
@staticmethod
|
351
|
+
def AddVertex(graph, vertex, tolerance: float = 0.0001, silent: bool = False):
|
352
|
+
"""
|
353
|
+
Adds the input vertex to the input graph.
|
354
|
+
|
355
|
+
Parameters
|
356
|
+
----------
|
357
|
+
graph : topologic_core.Graph
|
358
|
+
The input graph.
|
359
|
+
vertex : topologic_core.Vertex
|
360
|
+
The input vertex.
|
361
|
+
tolerance : float , optional
|
362
|
+
The desired tolerance. The default is 0.0001.
|
363
|
+
silent : bool , optional
|
364
|
+
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
365
|
+
|
366
|
+
Returns
|
367
|
+
-------
|
368
|
+
topologic_core.Graph
|
369
|
+
The input graph with the input vertex added to it.
|
370
|
+
|
371
|
+
"""
|
372
|
+
from topologicpy.Topology import Topology
|
373
|
+
|
374
|
+
if not Topology.IsInstance(graph, "Graph"):
|
375
|
+
if not silent:
|
376
|
+
print("Graph.AddVertex - Error: The input graph is not a valid graph. Returning None.")
|
377
|
+
return None
|
378
|
+
if not Topology.IsInstance(vertex, "Vertex"):
|
379
|
+
if not silent:
|
380
|
+
print("Graph.AddVertex - Error: The input vertex is not a valid vertex. Returning the input graph.")
|
381
|
+
return graph
|
382
|
+
_ = graph.AddVertices([vertex], tolerance) # Hook to Core
|
383
|
+
return graph
|
384
|
+
|
385
|
+
@staticmethod
|
386
|
+
def AddVertices(graph, vertices, tolerance: float = 0.0001, silent: bool = False):
|
387
|
+
"""
|
388
|
+
Adds the input vertex to the input graph.
|
389
|
+
|
390
|
+
Parameters
|
391
|
+
----------
|
392
|
+
graph : topologic_core.Graph
|
393
|
+
The input graph.
|
394
|
+
vertices : list
|
395
|
+
The input list of vertices.
|
396
|
+
tolerance : float , optional
|
397
|
+
The desired tolerance. The default is 0.0001.
|
398
|
+
silent : bool , optional
|
399
|
+
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
400
|
+
|
401
|
+
Returns
|
402
|
+
-------
|
403
|
+
topologic_core.Graph
|
404
|
+
The input graph with the input vertex added to it.
|
405
|
+
|
406
|
+
"""
|
407
|
+
from topologicpy.Topology import Topology
|
408
|
+
|
409
|
+
if not Topology.IsInstance(graph, "Graph"):
|
410
|
+
if not silent:
|
411
|
+
print("Graph.AddVertices - Error: The input graph is not a valid graph. Returning None.")
|
412
|
+
return None
|
413
|
+
if not isinstance(vertices, list):
|
414
|
+
if not silent:
|
415
|
+
print("Graph.AddVertices - Error: The input list of vertices is not a valid list. Returning None.")
|
416
|
+
return None
|
417
|
+
vertices = [v for v in vertices if Topology.IsInstance(v, "Vertex")]
|
418
|
+
if len(vertices) < 1:
|
419
|
+
if not silent:
|
420
|
+
print("Graph.AddVertices - Error: Could not find any valid vertices in the input list of vertices. Returning None.")
|
421
|
+
return None
|
422
|
+
_ = graph.AddVertices(vertices, tolerance) # Hook to Core
|
423
|
+
return graph
|
424
|
+
|
267
425
|
def AdjacencyDictionary(graph, vertexLabelKey: str = None, edgeKey: str = "Length", includeWeights: bool = False, reverse: bool = False, mantissa: int = 6):
|
268
426
|
"""
|
269
427
|
Returns the adjacency dictionary of the input Graph.
|
@@ -517,167 +675,101 @@ class Graph:
|
|
517
675
|
return adjList
|
518
676
|
|
519
677
|
@staticmethod
|
520
|
-
def
|
678
|
+
def AdjacentVertices(graph, vertex, silent: bool = False):
|
521
679
|
"""
|
522
|
-
|
680
|
+
Returns the list of vertices connected to the input vertex.
|
523
681
|
|
524
682
|
Parameters
|
525
683
|
----------
|
526
684
|
graph : topologic_core.Graph
|
527
685
|
The input graph.
|
528
|
-
|
529
|
-
|
530
|
-
transferVertexDictionaries : bool, optional
|
531
|
-
If set to True, the dictionaries of the vertices are transferred to the graph.
|
532
|
-
transferEdgeDictionaries : bool, optional
|
533
|
-
If set to True, the dictionaries of the edges are transferred to the graph.
|
534
|
-
tolerance : float , optional
|
535
|
-
The desired tolerance. The default is 0.0001.
|
686
|
+
vertex : topologic_core.Vertex
|
687
|
+
the input vertex.
|
536
688
|
silent : bool , optional
|
537
689
|
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
538
690
|
|
539
691
|
Returns
|
540
692
|
-------
|
541
|
-
|
542
|
-
The
|
693
|
+
list
|
694
|
+
The list of adjacent vertices.
|
543
695
|
|
544
696
|
"""
|
545
|
-
from topologicpy.Vertex import Vertex
|
546
|
-
from topologicpy.Edge import Edge
|
547
|
-
from topologicpy.Dictionary import Dictionary
|
548
697
|
from topologicpy.Topology import Topology
|
549
698
|
|
550
|
-
def addIfUnique(graph_vertices, vertex, tolerance=0.0001):
|
551
|
-
unique = True
|
552
|
-
returnVertex = vertex
|
553
|
-
for gv in graph_vertices:
|
554
|
-
if (Vertex.Distance(vertex, gv) < tolerance):
|
555
|
-
if transferVertexDictionaries == True:
|
556
|
-
gd = Topology.Dictionary(gv)
|
557
|
-
vd = Topology.Dictionary(vertex)
|
558
|
-
gk = gd.Keys()
|
559
|
-
vk = vd.Keys()
|
560
|
-
d = None
|
561
|
-
if (len(gk) > 0) and (len(vk) > 0):
|
562
|
-
d = Dictionary.ByMergedDictionaries([gd, vd])
|
563
|
-
elif (len(gk) > 0) and (len(vk) < 1):
|
564
|
-
d = gd
|
565
|
-
elif (len(gk) < 1) and (len(vk) > 0):
|
566
|
-
d = vd
|
567
|
-
if d:
|
568
|
-
_ = Topology.SetDictionary(gv, d, silent=True)
|
569
|
-
unique = False
|
570
|
-
returnVertex = gv
|
571
|
-
break
|
572
|
-
if unique:
|
573
|
-
graph_vertices.append(vertex)
|
574
|
-
return [graph_vertices, returnVertex]
|
575
|
-
|
576
699
|
if not Topology.IsInstance(graph, "Graph"):
|
577
700
|
if not silent:
|
578
|
-
print("Graph.
|
701
|
+
print("Graph.AdjacentVertices - Error: The input graph is not a valid graph. Returning None.")
|
579
702
|
return None
|
580
|
-
if not Topology.IsInstance(
|
703
|
+
if not Topology.IsInstance(vertex, "Vertex"):
|
581
704
|
if not silent:
|
582
|
-
print("Graph.
|
583
|
-
return
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
new_vertices = []
|
588
|
-
for vertex in vertices:
|
589
|
-
graph_vertices, nv = addIfUnique(graph_vertices, vertex, tolerance=tolerance)
|
590
|
-
new_vertices.append(nv)
|
591
|
-
new_edge = Edge.ByVertices([new_vertices[0], new_vertices[1]], tolerance=tolerance)
|
592
|
-
if transferEdgeDictionaries == True:
|
593
|
-
d = Topology.Dictionary(edge)
|
594
|
-
keys = Dictionary.Keys(d)
|
595
|
-
if isinstance(keys, list):
|
596
|
-
if len(keys) > 0:
|
597
|
-
_ = Topology.SetDictionary(new_edge, d, silent=True)
|
598
|
-
graph_edges.append(new_edge)
|
599
|
-
new_graph = Graph.ByVerticesEdges(graph_vertices, graph_edges)
|
600
|
-
return new_graph
|
705
|
+
print("Graph.AdjacentVertices - Error: The input vertex is not a valid vertex. Returning None.")
|
706
|
+
return None
|
707
|
+
vertices = []
|
708
|
+
_ = graph.AdjacentVertices(vertex, vertices) # Hook to Core
|
709
|
+
return list(vertices)
|
601
710
|
|
602
711
|
@staticmethod
|
603
|
-
def
|
712
|
+
def AdjacentVerticesByCompassDirection(graph, vertex, compassDirection: str = "Up", tolerance: float = 0.0001, silent: bool = False):
|
604
713
|
"""
|
605
|
-
|
714
|
+
Returns the list of vertices connected to the input vertex that are in the input compass direction.
|
606
715
|
|
607
716
|
Parameters
|
608
717
|
----------
|
609
718
|
graph : topologic_core.Graph
|
610
719
|
The input graph.
|
611
720
|
vertex : topologic_core.Vertex
|
612
|
-
|
721
|
+
the input vertex.
|
722
|
+
compassDirection : str , optional
|
723
|
+
The compass direction. See Vector.CompassDirections(). The default is "Up".
|
613
724
|
tolerance : float , optional
|
614
|
-
|
725
|
+
The desired tolerance. The default is 0.0001.
|
615
726
|
silent : bool , optional
|
616
727
|
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
617
728
|
|
618
729
|
Returns
|
619
730
|
-------
|
620
|
-
|
621
|
-
The
|
731
|
+
list
|
732
|
+
The list of adjacent vertices that are in the compass direction.
|
622
733
|
|
623
734
|
"""
|
735
|
+
from topologicpy.Vector import Vector
|
736
|
+
from topologicpy.Edge import Edge
|
624
737
|
from topologicpy.Topology import Topology
|
625
|
-
|
626
|
-
if not Topology.IsInstance(graph, "
|
738
|
+
|
739
|
+
if not Topology.IsInstance(graph, "graph"):
|
627
740
|
if not silent:
|
628
|
-
print("Graph.
|
741
|
+
print("Graph.AdjacentVerticesByCompassDirection - Error: The input graph parameter is not a valid graph. Returning None.")
|
629
742
|
return None
|
630
|
-
if not Topology.IsInstance(vertex, "
|
743
|
+
if not Topology.IsInstance(vertex, "vertex"):
|
631
744
|
if not silent:
|
632
|
-
print("Graph.
|
633
|
-
return graph
|
634
|
-
_ = graph.AddVertices([vertex], tolerance) # Hook to Core
|
635
|
-
return graph
|
636
|
-
|
637
|
-
@staticmethod
|
638
|
-
def AddVertices(graph, vertices, tolerance: float = 0.0001, silent: bool = False):
|
639
|
-
"""
|
640
|
-
Adds the input vertex to the input graph.
|
641
|
-
|
642
|
-
Parameters
|
643
|
-
----------
|
644
|
-
graph : topologic_core.Graph
|
645
|
-
The input graph.
|
646
|
-
vertices : list
|
647
|
-
The input list of vertices.
|
648
|
-
tolerance : float , optional
|
649
|
-
The desired tolerance. The default is 0.0001.
|
650
|
-
silent : bool , optional
|
651
|
-
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
652
|
-
|
653
|
-
Returns
|
654
|
-
-------
|
655
|
-
topologic_core.Graph
|
656
|
-
The input graph with the input vertex added to it.
|
657
|
-
|
658
|
-
"""
|
659
|
-
from topologicpy.Topology import Topology
|
660
|
-
|
661
|
-
if not Topology.IsInstance(graph, "Graph"):
|
662
|
-
if not silent:
|
663
|
-
print("Graph.AddVertices - Error: The input graph is not a valid graph. Returning None.")
|
745
|
+
print("Graph.AdjacentVerticesByCompassDirection - Error: The input vertex parameter is not a valid vertex. Returning None.")
|
664
746
|
return None
|
665
|
-
if not isinstance(
|
747
|
+
if not isinstance(compassDirection, str):
|
666
748
|
if not silent:
|
667
|
-
print("Graph.
|
749
|
+
print("Graph.AdjacentVerticesByCompassDirection - Error: The input compassDirection parameter is not a valid string. Returning None.")
|
668
750
|
return None
|
669
|
-
|
670
|
-
|
751
|
+
|
752
|
+
directions = [v.lower() for v in Vector.CompassDirections()]
|
753
|
+
|
754
|
+
if not compassDirection.lower() in directions:
|
671
755
|
if not silent:
|
672
|
-
print("Graph.
|
756
|
+
print("Graph.AdjacentVerticesByCompassDirection - Error: The input compassDirection parameter is not a valid compass direction. Returning None.")
|
673
757
|
return None
|
674
|
-
|
675
|
-
|
676
|
-
|
758
|
+
|
759
|
+
adjacent_vertices = Graph.AdjacentVertices(graph, vertex)
|
760
|
+
return_vertices = []
|
761
|
+
for v in adjacent_vertices:
|
762
|
+
e = Edge.ByVertices(vertex, v)
|
763
|
+
vector = Edge.Direction(e)
|
764
|
+
compass_direction = Vector.CompassDirection(vector, tolerance=tolerance)
|
765
|
+
if compass_direction.lower() == compassDirection.lower():
|
766
|
+
return_vertices.append(v)
|
767
|
+
return return_vertices
|
768
|
+
|
677
769
|
@staticmethod
|
678
|
-
def
|
770
|
+
def AdjacentVerticesByVector(graph, vertex, vector: list = [0,0,1], tolerance: float = 0.0001, silent: bool = False):
|
679
771
|
"""
|
680
|
-
Returns the list of vertices connected to the input vertex.
|
772
|
+
Returns the list of vertices connected to the input vertex that are in the input vector direction.
|
681
773
|
|
682
774
|
Parameters
|
683
775
|
----------
|
@@ -685,28 +777,48 @@ class Graph:
|
|
685
777
|
The input graph.
|
686
778
|
vertex : topologic_core.Vertex
|
687
779
|
the input vertex.
|
780
|
+
vector : list , optional
|
781
|
+
The vector direction. The default is [0,0,1].
|
782
|
+
tolerance : float , optional
|
783
|
+
The desired tolerance. The default is 0.0001.
|
688
784
|
silent : bool , optional
|
689
785
|
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
690
786
|
|
691
787
|
Returns
|
692
788
|
-------
|
693
789
|
list
|
694
|
-
The list of adjacent vertices.
|
790
|
+
The list of adjacent vertices that are in the vector direction.
|
695
791
|
|
696
792
|
"""
|
793
|
+
from topologicpy.Vector import Vector
|
794
|
+
from topologicpy.Edge import Edge
|
697
795
|
from topologicpy.Topology import Topology
|
698
|
-
|
699
|
-
if not Topology.IsInstance(graph, "
|
796
|
+
|
797
|
+
if not Topology.IsInstance(graph, "graph"):
|
700
798
|
if not silent:
|
701
|
-
print("Graph.
|
799
|
+
print("Graph.AdjacentVerticesByVector- Error: The input graph parameter is not a valid graph. Returning None.")
|
702
800
|
return None
|
703
|
-
if not Topology.IsInstance(vertex, "
|
801
|
+
if not Topology.IsInstance(vertex, "vertex"):
|
704
802
|
if not silent:
|
705
|
-
print("Graph.
|
803
|
+
print("Graph.AdjacentVerticesByVector- Error: The input vertex parameter is not a valid vertex. Returning None.")
|
706
804
|
return None
|
707
|
-
|
708
|
-
|
709
|
-
|
805
|
+
if not isinstance(vector, list):
|
806
|
+
if not silent:
|
807
|
+
print("Graph.AdjacentVerticesByVector- Error: The input vector parameter is not a valid vector. Returning None.")
|
808
|
+
return None
|
809
|
+
if len(vector) != 3:
|
810
|
+
if not silent:
|
811
|
+
print("Graph.AdjacentVerticesByVector- Error: The input vector parameter is not a valid vector. Returning None.")
|
812
|
+
return None
|
813
|
+
|
814
|
+
adjacent_vertices = Graph.AdjacentVertices(graph, vertex)
|
815
|
+
return_vertices = []
|
816
|
+
for v in adjacent_vertices:
|
817
|
+
e = Edge.ByVertices(vertex, v)
|
818
|
+
edge_vector = Edge.Direction(e)
|
819
|
+
if Vector.CompassDirection(vector, tolerance=tolerance).lower() == Vector.CompassDirection(edge_vector, tolerance=tolerance).lower():
|
820
|
+
return_vertices.append(v)
|
821
|
+
return return_vertices
|
710
822
|
|
711
823
|
@staticmethod
|
712
824
|
def AllPaths(graph, vertexA, vertexB, timeLimit=10, silent: bool = False):
|
@@ -8789,7 +8901,7 @@ class Graph:
|
|
8789
8901
|
return max_flow
|
8790
8902
|
|
8791
8903
|
@staticmethod
|
8792
|
-
def MeshData(
|
8904
|
+
def MeshData(graph, tolerance: float = 0.0001):
|
8793
8905
|
"""
|
8794
8906
|
Returns the mesh data of the input graph.
|
8795
8907
|
|
@@ -8815,14 +8927,14 @@ class Graph:
|
|
8815
8927
|
from topologicpy.Dictionary import Dictionary
|
8816
8928
|
from topologicpy.Topology import Topology
|
8817
8929
|
|
8818
|
-
g_vertices = Graph.Vertices(
|
8930
|
+
g_vertices = Graph.Vertices(graph)
|
8819
8931
|
m_vertices = []
|
8820
8932
|
v_dicts = []
|
8821
8933
|
for g_vertex in g_vertices:
|
8822
8934
|
m_vertices.append(Vertex.Coordinates(g_vertex))
|
8823
8935
|
d = Dictionary.PythonDictionary(Topology.Dictionary(g_vertex))
|
8824
8936
|
v_dicts.append(d)
|
8825
|
-
g_edges = Graph.Edges(
|
8937
|
+
g_edges = Graph.Edges(graph)
|
8826
8938
|
m_edges = []
|
8827
8939
|
e_dicts = []
|
8828
8940
|
for g_edge in g_edges:
|
topologicpy/Vector.py
CHANGED
@@ -359,6 +359,120 @@ class Vector(list):
|
|
359
359
|
ang2 = arctan2(*p2[::-1])
|
360
360
|
return round(rad2deg((ang1 - ang2) % (2 * pi)), mantissa)
|
361
361
|
|
362
|
+
@staticmethod
|
363
|
+
def CompassDirection(vector, tolerance: float = 0.0001, silent: bool = False):
|
364
|
+
"""
|
365
|
+
Returns the compass direction of the input direction.
|
366
|
+
The possible returned values are:
|
367
|
+
- North, East, South, West
|
368
|
+
- Northeast, Southeast, Southwest, Northwest
|
369
|
+
- A combination of the above (e.g. Up_Noertheast)
|
370
|
+
- Up, Down
|
371
|
+
- Origin
|
372
|
+
|
373
|
+
Parameters
|
374
|
+
----------
|
375
|
+
vector : list
|
376
|
+
The input vector.
|
377
|
+
tolerance : float , optional
|
378
|
+
The desired tolerance. The default is 0.0001.
|
379
|
+
silent : bool , optional
|
380
|
+
If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
|
381
|
+
|
382
|
+
Returns
|
383
|
+
-------
|
384
|
+
str
|
385
|
+
The compass direction of the input vector. The possible values are:
|
386
|
+
- North, East, South, West
|
387
|
+
- Northeast, Southeast, Southwest, Northwest
|
388
|
+
- A combination of the above (e.g. Up_Noertheast)
|
389
|
+
- Up, Down
|
390
|
+
- Origin
|
391
|
+
|
392
|
+
"""
|
393
|
+
import math
|
394
|
+
|
395
|
+
if not isinstance(vector, list):
|
396
|
+
if not silent:
|
397
|
+
print("Vector.CompassDirection - Error: The input vector parameter is not a valid vector. Returning None.")
|
398
|
+
return None
|
399
|
+
if len(vector) != 3:
|
400
|
+
if not silent:
|
401
|
+
print("Vector.CompassDirection - Error: The input vector parameter is not a valid vector. Returning None.")
|
402
|
+
return None
|
403
|
+
|
404
|
+
x, y, z = vector
|
405
|
+
|
406
|
+
# Handle the origin
|
407
|
+
if abs(x) < tolerance and abs(y) < tolerance and abs(z) < tolerance:
|
408
|
+
return "Origin"
|
409
|
+
|
410
|
+
# Normalize vector to prevent magnitude bias
|
411
|
+
magnitude = math.sqrt(x**2 + y**2 + z**2)
|
412
|
+
x, y, z = x / magnitude, y / magnitude, z / magnitude
|
413
|
+
|
414
|
+
# Apply tolerance to components
|
415
|
+
x = 0 if abs(x) < tolerance else x
|
416
|
+
y = 0 if abs(y) < tolerance else y
|
417
|
+
z = 0 if abs(z) < tolerance else z
|
418
|
+
|
419
|
+
# Compass-based direction in the XY-plane
|
420
|
+
if x == 0 and y > 0:
|
421
|
+
horizontal_dir = "North"
|
422
|
+
elif x == 0 and y < 0:
|
423
|
+
horizontal_dir = "South"
|
424
|
+
elif y == 0 and x > 0:
|
425
|
+
horizontal_dir = "East"
|
426
|
+
elif y == 0 and x < 0:
|
427
|
+
horizontal_dir = "West"
|
428
|
+
elif x > 0 and y > 0:
|
429
|
+
horizontal_dir = "Northeast"
|
430
|
+
elif x < 0 and y > 0:
|
431
|
+
horizontal_dir = "Northwest"
|
432
|
+
elif x < 0 and y < 0:
|
433
|
+
horizontal_dir = "Southwest"
|
434
|
+
elif x > 0 and y < 0:
|
435
|
+
horizontal_dir = "Southeast"
|
436
|
+
else:
|
437
|
+
horizontal_dir = ""
|
438
|
+
|
439
|
+
# Add vertical direction
|
440
|
+
if z > 0:
|
441
|
+
if horizontal_dir:
|
442
|
+
return f"Up_{horizontal_dir}"
|
443
|
+
return "Up"
|
444
|
+
elif z < 0:
|
445
|
+
if horizontal_dir:
|
446
|
+
return f"Down_{horizontal_dir}"
|
447
|
+
return "Down"
|
448
|
+
else:
|
449
|
+
return horizontal_dir
|
450
|
+
|
451
|
+
@staticmethod
|
452
|
+
def CompassDirections():
|
453
|
+
"""
|
454
|
+
Returns the list of allowed compass directions.
|
455
|
+
|
456
|
+
Parameters
|
457
|
+
----------
|
458
|
+
|
459
|
+
Returns
|
460
|
+
-------
|
461
|
+
list
|
462
|
+
The list of compass directions. These are:
|
463
|
+
- ["Origin", "Up", "Down",
|
464
|
+
"North", "Northeast", "East", "Southeast", "South", "Southwest", "West", "Northwest",
|
465
|
+
"Up_North", "Up_Northeast", "Up_East", "Up_Southeast", "Up_South", "Up_Southwest", "Up_West", "Up_Northwest",
|
466
|
+
"Down_North", "Down_Northeast", "Down_East", "Down_Southeast", "Down_South", "Down_Southwest", "Down_West", "Down_Northwest",
|
467
|
+
]
|
468
|
+
|
469
|
+
"""
|
470
|
+
return ["Origin", "Up", "Down",
|
471
|
+
"North", "Northeast", "East", "Southeast", "South", "Southwest", "West", "Northwest",
|
472
|
+
"Up_North", "Up_Northeast", "Up_East", "Up_Southeast", "Up_South", "Up_Southwest", "Up_West", "Up_Northwest",
|
473
|
+
"Down_North", "Down_Northeast", "Down_East", "Down_Southeast", "Down_South", "Down_Southwest", "Down_West", "Down_Northwest"
|
474
|
+
]
|
475
|
+
|
362
476
|
@staticmethod
|
363
477
|
def Coordinates(vector, outputType="xyz", mantissa: int = 6, silent: bool = False):
|
364
478
|
"""
|
topologicpy/Vertex.py
CHANGED
@@ -35,7 +35,7 @@ except:
|
|
35
35
|
|
36
36
|
class Vertex():
|
37
37
|
@staticmethod
|
38
|
-
def AlignCoordinates(vertex, xList=None, yList=None, zList=None, transferDictionary=False, mantissa=6, silent=False):
|
38
|
+
def AlignCoordinates(vertex, xList: list = None, yList: list = None, zList: list = None, xEpsilon: float = 0.0001, yEpsilon: float = 0.0001, zEpsilon: float = 0.0001, transferDictionary: bool = False, mantissa: int = 6, silent: bool = False):
|
39
39
|
"""
|
40
40
|
Aligns the coordinates of the input vertex with the list of x,y, and z coordinates.
|
41
41
|
|
@@ -49,6 +49,12 @@ class Vertex():
|
|
49
49
|
The input numerical list of y-coordinates. The default is None.
|
50
50
|
zList : list , optional
|
51
51
|
The input numerical list of z-coordinates. The default is None.
|
52
|
+
xEpsilon : float , optional
|
53
|
+
The desired tolerance for the x coordinates. The default is 0.0001.
|
54
|
+
yEpsilon : float , optional
|
55
|
+
The desired tolerance for the y coordinates. The default is 0.0001.
|
56
|
+
zEpsilon : float , optional
|
57
|
+
The desired tolerance for the z coordinates. The default is 0.0001.
|
52
58
|
transferDictionary : bool , optional
|
53
59
|
if set to True, the dictionary of the input vertex is transferred to the new vertex.
|
54
60
|
mantissa : int , optional
|
@@ -70,17 +76,24 @@ class Vertex():
|
|
70
76
|
print("Vertex.AlignCoordinates - Error: The input vertex parameter is not a topologic vertex. Returning None.")
|
71
77
|
return None
|
72
78
|
|
73
|
-
|
79
|
+
x, y, z = Vertex.Coordinates(vertex, mantissa=mantissa)
|
74
80
|
if isinstance(xList, list):
|
75
81
|
if len(xList) > 0:
|
76
|
-
closest_x = xList[Helper.ClosestMatch(
|
82
|
+
closest_x = round(xList[Helper.ClosestMatch(x, xList)], mantissa)
|
77
83
|
if isinstance(yList, list):
|
78
84
|
if len(yList) > 0:
|
79
|
-
closest_y = yList[Helper.ClosestMatch(
|
85
|
+
closest_y = round(yList[Helper.ClosestMatch(y, yList)], mantissa)
|
80
86
|
if isinstance(zList, list):
|
81
87
|
if len(zList) > 0:
|
82
|
-
closest_z = zList[Helper.ClosestMatch(
|
83
|
-
|
88
|
+
closest_z = round(zList[Helper.ClosestMatch(z, zList)], mantissa)
|
89
|
+
|
90
|
+
if abs(x - closest_x) < xEpsilon:
|
91
|
+
x = closest_x
|
92
|
+
if abs(y - closest_y) < yEpsilon:
|
93
|
+
y = closest_y
|
94
|
+
if abs(z - closest_z) < zEpsilon:
|
95
|
+
z = closest_z
|
96
|
+
return_vertex = Vertex.ByCoordinates(x, y, z)
|
84
97
|
if transferDictionary == True:
|
85
98
|
return_vertex = Topology.SetDictionary(return_vertex, Topology.Dictionary(vertex), silent=silent)
|
86
99
|
return return_vertex
|
topologicpy/Wire.py
CHANGED
@@ -51,7 +51,6 @@ class Wire():
|
|
51
51
|
|
52
52
|
"""
|
53
53
|
from topologicpy.Vertex import Vertex
|
54
|
-
from topologicpy.Wire import Wire
|
55
54
|
from topologicpy.Topology import Topology
|
56
55
|
import numpy as np
|
57
56
|
|
@@ -183,7 +182,6 @@ class Wire():
|
|
183
182
|
|
184
183
|
"""
|
185
184
|
from topologicpy.Edge import Edge
|
186
|
-
from topologicpy.Wire import Wire
|
187
185
|
from topologicpy.Topology import Topology
|
188
186
|
|
189
187
|
if not Topology.IsInstance(edge, "Edge"):
|
@@ -233,7 +231,6 @@ class Wire():
|
|
233
231
|
|
234
232
|
"""
|
235
233
|
from topologicpy.Vertex import Vertex
|
236
|
-
from topologicpy.Wire import Wire
|
237
234
|
from topologicpy.Face import Face
|
238
235
|
from topologicpy.Topology import Topology
|
239
236
|
from topologicpy.Dictionary import Dictionary
|
@@ -453,7 +450,6 @@ class Wire():
|
|
453
450
|
from topologicpy.Edge import Edge
|
454
451
|
from topologicpy.Face import Face
|
455
452
|
from topologicpy.Dictionary import Dictionary
|
456
|
-
from topologicpy.Wire import Wire
|
457
453
|
from topologicpy.Cluster import Cluster
|
458
454
|
from topologicpy.Topology import Topology
|
459
455
|
from topologicpy.Vector import Vector
|
@@ -724,7 +720,6 @@ class Wire():
|
|
724
720
|
The created wire.
|
725
721
|
|
726
722
|
"""
|
727
|
-
from topologicpy.Wire import Wire
|
728
723
|
from topologicpy.Face import Face
|
729
724
|
from topologicpy.Topology import Topology
|
730
725
|
from topologicpy.Dictionary import Dictionary
|
@@ -1472,7 +1467,6 @@ class Wire():
|
|
1472
1467
|
|
1473
1468
|
"""
|
1474
1469
|
from topologicpy.Vertex import Vertex
|
1475
|
-
from topologicpy.Wire import Wire
|
1476
1470
|
from topologicpy.Topology import Topology
|
1477
1471
|
|
1478
1472
|
if not isinstance(width, int) and not isinstance(width, float):
|
@@ -1595,7 +1589,7 @@ class Wire():
|
|
1595
1589
|
else:
|
1596
1590
|
yScale = 1
|
1597
1591
|
if xScale == -1 or yScale == -1:
|
1598
|
-
cross_shape = Topology.Scale(cross_shape, x=xScale, y=yScale, z=1)
|
1592
|
+
cross_shape = Topology.Scale(cross_shape, origin=origin, x=xScale, y=yScale, z=1)
|
1599
1593
|
if reverse == True:
|
1600
1594
|
cross_shape = Wire.Reverse(cross_shape)
|
1601
1595
|
if placement.lower() == "lowerleft":
|
@@ -1657,7 +1651,6 @@ class Wire():
|
|
1657
1651
|
|
1658
1652
|
"""
|
1659
1653
|
from topologicpy.Vertex import Vertex
|
1660
|
-
from topologicpy.Wire import Wire
|
1661
1654
|
from topologicpy.Topology import Topology
|
1662
1655
|
|
1663
1656
|
if not isinstance(width, int) and not isinstance(width, float):
|
@@ -1745,7 +1738,7 @@ class Wire():
|
|
1745
1738
|
else:
|
1746
1739
|
yScale = 1
|
1747
1740
|
if xScale == -1 or yScale == -1:
|
1748
|
-
c_shape = Topology.Scale(c_shape, x=xScale, y=yScale, z=1)
|
1741
|
+
c_shape = Topology.Scale(c_shape, origin=origin, x=xScale, y=yScale, z=1)
|
1749
1742
|
if reverse == True:
|
1750
1743
|
c_shape = Wire.Reverse(c_shape)
|
1751
1744
|
if placement.lower() == "lowerleft":
|
@@ -2287,7 +2280,6 @@ class Wire():
|
|
2287
2280
|
import math
|
2288
2281
|
from topologicpy.Vertex import Vertex
|
2289
2282
|
from topologicpy.Edge import Edge
|
2290
|
-
from topologicpy.Wire import Wire
|
2291
2283
|
from topologicpy.Face import Face
|
2292
2284
|
from topologicpy.Topology import Topology
|
2293
2285
|
from topologicpy.Vector import Vector
|
@@ -2777,7 +2769,6 @@ class Wire():
|
|
2777
2769
|
|
2778
2770
|
"""
|
2779
2771
|
from topologicpy.Vertex import Vertex
|
2780
|
-
from topologicpy.Wire import Wire
|
2781
2772
|
from topologicpy.Topology import Topology
|
2782
2773
|
|
2783
2774
|
if not isinstance(width, int) and not isinstance(width, float):
|
@@ -2869,7 +2860,7 @@ class Wire():
|
|
2869
2860
|
else:
|
2870
2861
|
yScale = 1
|
2871
2862
|
if xScale == -1 or yScale == -1:
|
2872
|
-
i_shape = Topology.Scale(i_shape, x=xScale, y=yScale, z=1)
|
2863
|
+
i_shape = Topology.Scale(i_shape, origin=origin, x=xScale, y=yScale, z=1)
|
2873
2864
|
if reverse == True:
|
2874
2865
|
i_shape = Wire.Reverse(i_shape)
|
2875
2866
|
if placement.lower() == "lowerleft":
|
@@ -3024,7 +3015,6 @@ class Wire():
|
|
3024
3015
|
|
3025
3016
|
"""
|
3026
3017
|
from topologicpy.Vertex import Vertex
|
3027
|
-
from topologicpy.Wire import Wire
|
3028
3018
|
from topologicpy.Topology import Topology
|
3029
3019
|
|
3030
3020
|
if not isinstance(width, int) and not isinstance(width, float):
|
@@ -3106,7 +3096,7 @@ class Wire():
|
|
3106
3096
|
else:
|
3107
3097
|
yScale = 1
|
3108
3098
|
if xScale == -1 or yScale == -1:
|
3109
|
-
l_shape = Topology.Scale(l_shape, x=xScale, y=yScale, z=1)
|
3099
|
+
l_shape = Topology.Scale(l_shape, origin=origing, x=xScale, y=yScale, z=1)
|
3110
3100
|
if reverse == True:
|
3111
3101
|
l_shape = Wire.Reverse(l_shape)
|
3112
3102
|
if placement.lower() == "lowerleft":
|
@@ -3163,9 +3153,7 @@ class Wire():
|
|
3163
3153
|
import math
|
3164
3154
|
from topologicpy.Vertex import Vertex
|
3165
3155
|
from topologicpy.Edge import Edge
|
3166
|
-
from topologicpy.Wire import Wire
|
3167
3156
|
from topologicpy.Face import Face
|
3168
|
-
from topologicpy.Cluster import Cluster
|
3169
3157
|
from topologicpy.Topology import Topology
|
3170
3158
|
from topologicpy.Vector import Vector
|
3171
3159
|
from topologicpy.Dictionary import Dictionary
|
@@ -3632,7 +3620,6 @@ class Wire():
|
|
3632
3620
|
"""
|
3633
3621
|
from topologicpy.Vertex import Vertex
|
3634
3622
|
from topologicpy.Edge import Edge
|
3635
|
-
from topologicpy.Wire import Wire
|
3636
3623
|
from topologicpy.Cluster import Cluster
|
3637
3624
|
from topologicpy.Topology import Topology
|
3638
3625
|
|
@@ -3727,7 +3714,6 @@ class Wire():
|
|
3727
3714
|
"""
|
3728
3715
|
from topologicpy.Vertex import Vertex
|
3729
3716
|
from topologicpy.Edge import Edge
|
3730
|
-
from topologicpy.Wire import Wire
|
3731
3717
|
from topologicpy.Cluster import Cluster
|
3732
3718
|
from topologicpy.Topology import Topology
|
3733
3719
|
import inspect
|
@@ -4537,7 +4523,6 @@ class Wire():
|
|
4537
4523
|
return x*radius, y*radius
|
4538
4524
|
|
4539
4525
|
from topologicpy.Vertex import Vertex
|
4540
|
-
from topologicpy.Wire import Wire
|
4541
4526
|
from topologicpy.Topology import Topology
|
4542
4527
|
|
4543
4528
|
if not Topology.IsInstance(origin, "Vertex"):
|
@@ -4788,7 +4773,6 @@ class Wire():
|
|
4788
4773
|
baseWire = Topology.Orient(baseWire, origin=origin, dirA=[0, 0, 1], dirB=direction)
|
4789
4774
|
return baseWire
|
4790
4775
|
|
4791
|
-
|
4792
4776
|
@staticmethod
|
4793
4777
|
def TShape(origin=None,
|
4794
4778
|
width=1,
|
@@ -4832,7 +4816,6 @@ class Wire():
|
|
4832
4816
|
|
4833
4817
|
"""
|
4834
4818
|
from topologicpy.Vertex import Vertex
|
4835
|
-
from topologicpy.Wire import Wire
|
4836
4819
|
from topologicpy.Topology import Topology
|
4837
4820
|
|
4838
4821
|
if not isinstance(width, int) and not isinstance(width, float):
|
@@ -4916,7 +4899,7 @@ class Wire():
|
|
4916
4899
|
else:
|
4917
4900
|
yScale = 1
|
4918
4901
|
if xScale == -1 or yScale == -1:
|
4919
|
-
t_shape = Topology.Scale(t_shape, x=xScale, y=yScale, z=1)
|
4902
|
+
t_shape = Topology.Scale(t_shape, origin=origin, x=xScale, y=yScale, z=1)
|
4920
4903
|
if reverse == True:
|
4921
4904
|
t_shape = Wire.Reverse(t_shape)
|
4922
4905
|
if placement.lower() == "lowerleft":
|
topologicpy/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = '0.8.
|
1
|
+
__version__ = '0.8.9'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: topologicpy
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.9
|
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=mKVCAu9K8qzcWXtPDVH5usXZV1DNNNJl4n3rU5Lh1ZM,12931
|
4
|
-
topologicpy/Cell.py,sha256=
|
4
|
+
topologicpy/Cell.py,sha256=9bF1pS0oyYmUzyXZ4zAQrwJPrQ7KeHRAo8OZudp_2Kg,114341
|
5
5
|
topologicpy/CellComplex.py,sha256=-s8RKGa2H1eqLO7g6qyQvvuFMFJ0aIgXvIr9kOVgpjA,51608
|
6
6
|
topologicpy/Cluster.py,sha256=o5jdMRpcGfSGGiXQdFg-e9XcnBF5AqTj3xb1nSpwJWE,58606
|
7
7
|
topologicpy/Color.py,sha256=q9xsGmxFMz7sQKmygwSVS12GaTRB-OT0-_i6t3-cthE,20307
|
@@ -11,7 +11,7 @@ topologicpy/Dictionary.py,sha256=t0O7Du-iPq46FyKqZfcjHfsUK1E8GS_e67R2V5cpkbw,331
|
|
11
11
|
topologicpy/Edge.py,sha256=lWwJdQkAhiH5POB7TN6HSLv03g2jXHzBU7e2fE3eAno,71340
|
12
12
|
topologicpy/EnergyModel.py,sha256=UoQ9Jm-hYsN383CbcLKw-y6BKitRHj0uyh84yQ-8ACg,53856
|
13
13
|
topologicpy/Face.py,sha256=D1g4O5i5QMPZvIoX06Z-FsyNsYBDkCiHWJp00uqnr5o,180742
|
14
|
-
topologicpy/Graph.py,sha256=
|
14
|
+
topologicpy/Graph.py,sha256=yjD778MyWFLmUEryGFEzFZOJmnrZwkqrVYvpmH76Oxs,497462
|
15
15
|
topologicpy/Grid.py,sha256=2s9cSlWldivn1i9EUz4OOokJyANveqmRe_vR93CAndI,18245
|
16
16
|
topologicpy/Helper.py,sha256=DAAE_Ie_ekeMnCvcW08xXRwSAGCkjrS4lbz-o3ELuY4,27172
|
17
17
|
topologicpy/Honeybee.py,sha256=Y_El6M8x3ixvvIe_VcRiwj_4C89ZZg5_WlT7adbCkpw,21849
|
@@ -24,13 +24,13 @@ topologicpy/Shell.py,sha256=fLRnQ79vtdBDRW1Xn8Gaap34XheGbw7UBFd-ALJ2Y1g,87978
|
|
24
24
|
topologicpy/Speckle.py,sha256=AlsGlSDuKRtX5jhVsPNSSjjbZis079HbUchDH_5RJmE,18187
|
25
25
|
topologicpy/Sun.py,sha256=42tDWMYpwRG7Z2Qjtp94eRgBuqySq7k8TgNUZDK7QxQ,36837
|
26
26
|
topologicpy/Topology.py,sha256=qw64d3Ct6u7W8Fy_-JIg3_xsyOzDIQ1hdnpxF2p_wH4,463931
|
27
|
-
topologicpy/Vector.py,sha256=
|
28
|
-
topologicpy/Vertex.py,sha256=
|
29
|
-
topologicpy/Wire.py,sha256=
|
27
|
+
topologicpy/Vector.py,sha256=3gW0Y7mTcpc6ctjSfRWQXGKjIyHASKrMyIyPDT0kO2E,39573
|
28
|
+
topologicpy/Vertex.py,sha256=8_7iGDPlNWsiNfxcuNRO5u7P07i1Y58Gprw7KtA2Wmw,78505
|
29
|
+
topologicpy/Wire.py,sha256=Pt2li4cZ1omQKcMDCOqdB01ZKqjA4KBR0K3lGNVUoDs,233398
|
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=NlRwwFdz-gLvpPJ1P15liW62rdqtILNRJEm3y_yv3z8,22
|
32
|
+
topologicpy-0.8.9.dist-info/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
|
33
|
+
topologicpy-0.8.9.dist-info/METADATA,sha256=cFgD49CaDIZRj1a8FDEMkyw2dINg6WQZxTqbp55p--4,10512
|
34
|
+
topologicpy-0.8.9.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
35
|
+
topologicpy-0.8.9.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
|
36
|
+
topologicpy-0.8.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|