-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathFnGeometry.py
More file actions
72 lines (64 loc) · 2.02 KB
/
FnGeometry.py
File metadata and controls
72 lines (64 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def getGeoElement(ele):
geo = []
opt = Options()
opt.ComputeReferences = True
opt.IncludeNonVisibleObjects = True
opt.DetailLevel = ViewDetailLevel.Fine
geometry = ele.get_Geometry(opt)
return geometry
def getDBSolidByDBGeometries(dbGeoes):
dbSolids = []
for geo in dbGeoes:
if geo.GetType().ToString() == 'Autodesk.Revit.DB.Solid' and geo.Volume > 0:
dbSolids.append(geo)
return dbSolids
def getDBLineByDBGeometries(dbGeoes):
dbLines = []
for geo in dbGeoes:
if geo.GetType().ToString() == 'Autodesk.Revit.DB.Line':
dbLines.append(geo)
return dbLines
def getDBPlanarFacesByDBSolids(dbSolids):
planarFaces = []
for sol in dbSolids:
faces = sol.Faces
planarFaces.append(faces)
return planarFaces
def isParalel(p, q):
return p.CrossProduct(q).IsZeroLenth() #=> true/ false
def getVerticalDbPlanarfaces(dbPlanarFaces):
dbVerPlanarFaces = []
y = XYZ.BasisY
for face in dbPlanarFaces:
normal = face.FaceNormal
isParalel = isParalel(y,normal)
if isParalel:
dbVerPlanarFaces.append(face)
return dbVerPlanarFaces
def getMaxLines(dBLines):
lengths = []
for l in dBLines:
lengths.append(l.Length)
maxDbLines = []
for dbLine in dBLines:
if dbLine.Length == max(lengths):
maxDbLines.append(dbLine)
return maxDbLines
def getRightDbPlanarFaces(dbPlanarFaces):
rightDbPlanarFaces = []
direct = view.RightDirection
for planarFace in dbPlanarFaces:
faceNormal = planarFace.FaceNormal
if faceNormal.IsAlmostEqualTo(direct):
rightDbPlanarFaces.append(planarFace)
return rightDbPlanarFaces
def getTopOrBotPlanarFaces(dbPlanarFaces, isTop=True):
tbDbPlanarFaces = []
for p in dbPlanarFaces:
if isTop:
if p.FaceNormal.Z > 0:
tbDbPlanarFaces.append(p)
else:
if p.FaceNormal.Z < 0:
tbDbPlanarFaces.append(p)
return tbDbPlanarFaces