if this article is not in your language, use the Google Translate widget (bottom of page for Mobile version)⬈
Sous Revit une fois le DWG importé (insertion ou liaison) la géométrie des hachures est représenté par des Solides aplanis, l'analyse de ces derniers permet de retrouver certaines informations liées aux hachures (dont les contours).
import clr
import sys
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
importinstance = UnwrapElement(IN[0])
out = []
opt = Options()
geoSet = importinstance.get_Geometry(opt)
for geo in geoSet:
if isinstance(geo, GeometryInstance):
for g in geo.GetInstanceGeometry():
# alternative -> 'if isinstance(g, Solid) and g.Volume == 0:'
if isinstance(g, Solid):
for f in g.Faces:
if isinstance(f, PlanarFace) and f.FaceNormal.IsAlmostEqualTo(XYZ(0,0,1)):
# get Layer Name
gStyle = doc.GetElement(f.GraphicsStyleId)
gstyleName = gStyle.GraphicsStyleCategory.Name
for loopCurve in f.GetEdgesAsCurveLoops():
try:
ds_polycurv = DS.PolyCurve.ByJoinedCurves(x.ToProtoType() for x in loopCurve)
out.append([ds_polycurv, "Calque/Categorie : " + gstyleName])
except StandardError:
# Cannot create a Line. Points are probably coincident
# Impossible de créer une Line. Les Points sont probablement coïncidents
pass
OUT = out
Note 1: Vous pouvez filtrer les contours par nom de calque en rajoutant une condition
Note 2 :
Dans cet exemple il n'est pas traité les éventuelles transformations à réaliser si l'import DWG a été déplacé au sein de Revit (Transform)
0 commentaires:
Enregistrer un commentaire