Comment obtenir facilement la courbe d'un raccord (en Arc) CDC ou de canalisation ?
if this article is not in your language, use the Google Translate widget (bottom of page for Mobile version) ⬈
Pour extraire la courbe d'un raccord (raccord en Arc) on peut passer par l'analyse de la géométrie, mais voici une autre façon utilisant moins de ressources.
Pour tracer un arc, il faut minimum 3 paramètres.
L'objectif ici est de retrouver au moins 3 paramètres par analyse des connecteurs :
- la localisation des connecteurs
- la localisation des connecteurs
- les vecteurs normaux aux extrémités de l'élément
Ainsi par projection, on peut retrouver/calculer le centre de l'arc (lignes rouges ci-dessous)
import clr
import sys
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS
#import Revit API
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)
#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
def get_curve_fitting(elem):
"""
return the arc geometry an the length
"""
if hasattr(elem, "MEPModel"):
conSet = elem.MEPModel.ConnectorManager.Connectors
if conSet.Size == 2:
pair_sys_origin = [[con.CoordinateSystem, con.Origin] for con in conSet]
pta = pair_sys_origin[0][1].ToPoint()
ptb = pair_sys_origin[1][1].ToPoint()
vector = pair_sys_origin[0][0].BasisZ.Negate().ToVector()
arc = DS.Arc.ByStartPointEndPointStartTangent(pta, ptb, vector)
return arc, arc.Length
else:
return "The fitting have more than 2 connectors", None
return "The Element is not a fitting", None
toList = lambda x : x if hasattr(x, '__iter__') else [x]
#Preparing input from dynamo to revit
fitting = UnwrapElement(IN[0])
OUT = get_curve_fitting(fitting)
Résultat avec un raccord de canalisation et une courbure de chemin de câble
0 commentaires:
Enregistrer un commentaire