Script python qui ne marche pas complètement.

Script python qui ne marche pas complètement.

David_TESSON
Advisor Advisor
1 078 Visites
6 Réponses
Message 1 sur 7

Script python qui ne marche pas complètement.

David_TESSON
Advisor
Advisor

Bonjour,

Pour un dynamo, je souhaite créer des filtres dans des nomenclatures.

En utilisant les nœuds de base, pas de problème pour des filtres contenants du texte ou une valeur, par contre impossible de faire un filtre sur un champ "Oui/Non". J'ai essayé avec 0/1, "0"/"1", "Oui"/"Non", "Yes"/"No", un nœud boolean, rien y fait !, le nœud fait une erreur

Du coup je tente en python mais je n' y connait rien et j'ai récupéré ce script qui permet d'appliquer un filtre à une nomenclature.

Le script marche, mais que sur la première nomenclature et pas sur les autres. Il n'y a pas de message d'erreur, ça ce termine correctement mais les nomenclatures n'ont pas le filtre (sauf la première).

Savez-vous pourquoi le script ci-dessous n'applique pas le filtre à toute les nomenclatures ?

Capture.JPG

import clr
clr.AddReference("ProtoGeometry")
from Autodesk.DesignScript.Geometry import *
# Dynamo Example
import clr
clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
# RevitServices
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
# doc and uiapp

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

Views = IN[0]
FieldId = IN[1]
Value = IN[2]

Filters = list()
for Id in FieldId:
	F = ScheduleFilter(ScheduleFieldId(Id),ScheduleFilterType.Equal,Value)
Filters.append(F)

TransactionManager.Instance.EnsureInTransaction(doc)

for View,Filter in zip(Views,Filters):
	(UnwrapElement(View).Definition).InsertFilter(Filter,0)

TransactionManager.Instance.TransactionTaskDone()

OUT = IN[0]

Merci

0 J'aime
Solutions acceptées (1)
1 079 Visites
6 Réponses
Replies (6)
Message 2 sur 7

Mikael_QUIJADA
Mentor
Mentor
Solution acceptée

Salut,

 

Je n'ai pas encore de connaissances sur le python appliqué a Dynamo.

Mais je pense qu'il y a problème d'indentation au niveau de méthode "append" :

Il faudrait que Filter.append(F) soit aligné avec F = .....

image.png

image.png

 

En python l'indentation (4 espaces ou touche tab) est très importante 🙂

Mikaël QUIJADA
Expert Revit Structure
EESignature
0 J'aime
Message 3 sur 7

David_TESSON
Advisor
Advisor

Merci @Mikael_QUIJADA 

Effectivement c'est tout a fait ca ! Sensible le gars python 😀

Lors de la copie du script depuis le net l’indentation avait sauté et quand je l'ai lancé, un message d'erreur pour ça est apparu, j'ai comparé avec d'autres scripts pour voir la structure et j'en ai corrigé certains, mais pas tous.

Merci

 

0 J'aime
Message 4 sur 7

Mikael_QUIJADA
Mentor
Mentor

L'indentation est une chose fondamentale pour python, c'est elle qui indique ce qui appartient à une instruction.

En fait c'est surtout l'ide (environnement de travail) de Dynamo qui est à la ramasse 🙂

Dans un éditeur plus conventionnel les choses sont plus claires :

 

forum 1.gifforum 2.gif

Mikaël QUIJADA
Expert Revit Structure
EESignature
Message 5 sur 7

Kevin_Megel
Mentor
Mentor

Hello, l'indentation est importante pas que pour python, pour plein d'autre langages.

https://fr.m.wikipedia.org/wiki/Style_d%27indentation

 

 

 

 

 

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 6 sur 7

Mikael_QUIJADA
Mentor
Mentor

En principe l'indentation est utilisée pour rendre le code plus clair mais n'est pas obligatoire juste esthétique.

Très peu de langages fonctionnent sur une indentation obligatoire.

Mikaël QUIJADA
Expert Revit Structure
EESignature
Message 7 sur 7

David_TESSON
Advisor
Advisor

Effectivement pour moi l'indentation est plus pour la lisibilité que pour la fonctionnalité.

En LISP ou en DCL je l'utilise pour rendre plus clair, mais ca n'a aucune incidence.

Apres je ne connait pas beaucoup de language de prog !

0 J'aime