[Revit] Créer un tuyau d’un point A à un point B façon python

Plusieurs articles montrent comment créer un tuyau en C# :
http://pastebin.com/RZn1WnMW
http://thebuildingcoder.typepad.com/blog/2014/01/final-rolling-offset-using-pipecreate.html

Voici un code très court qui montre comment faire en python.

Il ne faut pas oublier d’ajouter la ligne suivante pour importer les fonctions liées aux tuyaux :

from Autodesk.Revit.DB.Plumbing import *

Pour créer un tube entre 0.0.0 et 10.0.0, le code est le suivant (on utilise le premier type de système et de tube qui nous tombe sous la main).

t = Transaction(doc, "Création d'un tuyau")
t.Start()
def pickobject():
	from Autodesk.Revit.UI.Selection import ObjectType
	__window__.Hide()
	picked = uidoc.Selection.PickObject(ObjectType.Element)
	__window__.Show()
	__window__.Topmost = True
	return picked
#Trouve un type de tuyau, un type de système et le niveau de la vue courante
idtypetuyau = FilteredElementCollector(doc).OfClass(PipeType).FirstElement().Id
idtypesystem = FilteredElementCollector(doc).OfClass(PipingSystemType).FirstElement().Id
idniveau = doc.ActiveView.GenLevel.Id
#Création du point de départ et d'arrivée du tuyau
p1 = XYZ(0, 0, 0)
p2 = XYZ(10, 0, 0)
#Création du tuyau
Pipe.Create(doc, idtypesystem, idtypetuyau, idniveau, p1, p2)
t.Commit()

3 commentaires

  1. Bonjour,

    J’ai essayé ces lignes de mon côté, et j’ai un problème avec la ligne :
    __window__.Topmost = True

    Mon problème est le suivant : voici le code complet que j’utilise :

    def Test(self) :
    __window__.Hide()
    sel = __revit__.ActiveUIDocument.Selection
    pickedRef = sel.PickObject(ObjectType.Element, « Please select a group »);
    __window__.Show()
    __window__.Topmost = True
    return pickedRef

    J’ai le message d’erreur suivant : « Syntax error : ‘return’ outside function ».
    Si je commente l’avant dernière ligne (donc avec Topmost = true), je n’ai plus de message d’erreur. Par contre, je m’attendrais à avoir une fenêtre qui s’affiche avec « Please select a group », mais ce n’est pas le cas. Je peux juste sélectionner un élement, sans voir ce message. Cela est-il lié à la ligne « __window__.Topmost = True » ?

    Si oui, comment régler le problème ?

    Merci !

    1. Bonjour,

      Aucune fenêtre n’est censée apparaître avec la méthode PickObject, le message apparait en bas à gauche dans la fenêtre de Revit comme pour les commandes standards de Revit.
      Sélectionnez un objet
      Il ne faut pas mettre « self » dans le contexte présenté.
      Voici un code qui fonctionne :
      def pickobject():
      from Autodesk.Revit.UI.Selection import ObjectType
      __window__.Hide()
      picked = uidoc.Selection.PickObject(ObjectType.Element, "Sélectionnez un objet")
      __window__.Show()
      __window__.Topmost = True
      return picked

      Ais-je bien répondu à la question ?

      1. Salut,

        Oui c’est parfait, j’ai aussi répondu sur Stackoverflow 😉
        pour mon problème avec la ligne Topmost, en fait l’indentation était la même sauf que pour cette ligne, il y avait un tab et plusieurs espaces devant, au lieu de deux tabs.. Je savais que Python était sensible à l’indentation, mais je ne savais pas qu’il faisait aussi la différence entre « tabs » et « espaces ». Maintenant je sais 😉

        Merci !
        Arnaud

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *