Dans l’article précédent, nous avons appris comment générer un objet (une ligne de longueur fixe) via l’API PythonParts. Aujourd’hui je vais vous montrer la mise en place de poignées pour notre script HelloWorld…
1) Script Interface
La poignée que l’on va créer va nous permettre d’intéragir avec une variable Longueur.
Il nous faut donc la créer dans l’interface.
Je reprend mon HelloWorld.pyp et, entre les balises Element, je génère tout d’abord une page :
<Page>
<Name>Page1</Name>
<Text>Général</Text></Page>
A noter :
- les pages correspondent aux différents onglets dans la palette ;
- on lui donne un nom Page1 et je place un texte qui s’affichera dans Allplan : Général ;
- le nom des pages apparaissent à partir du 2ème onglet.
A l’intérieur de ma Page1, je place alors les champs pour insérer ma variable :
<Parameter>
<Name>LineLength</Name>
<Text>Longueur</Text>
<Value>1000.0</Value>
<ValueType>Length</ValueType>
</Parameter>
Décortiquons ceci :
-
Parameter
Passage obligé, cette balise est à la source de toutes nos variables.
-
Name
Le nom de la variable, il doit être unique car il sera appelé dans nos scripts principaux.
-
Text
Ici, il s’agit du texte qui s’affiche dans Allplan.
-
Value
On saisit une valeur par défaut à notre variable, ici « 1000 ».
-
ValueType
Enfin, le type de variable que l’on souhaite utiliser.
A noter :
- il existe pléthore de possibilités (nombre entiers, liste, …) ; n’hésitez pas à regarder le PythonPart AllControls (C:\ProgramData\Nemetschek\Allplan\2023\Etc\Examples\PythonParts\PaletteExamples) ou bien ce lien ;
- Name (qui doit être unique), Text et ValueType sont les 3 champs obligatoires pour n’importe quel paramètre.
Voici le fichier complet :
2) Script Principal
On commence par importer dans notre script Python les modules nécessaires :
from HandlePropertiesService import HandlePropertiesService
from HandleDirection import HandleDirection
from HandleParameterData import HandleParameterData
from HandleParameterType import HandleParameterType
from HandleProperties import HandleProperties
On crée une nouvelle fonction move_handle qui va écouter toute modification sur la poignée :
def move_handle(build_ele, handle_prop, input_pnt, doc):
HandlePropertiesService.update_property_value(build_ele, handle_prop, input_pnt)
return create_element(build_ele, doc)
Je me place dans ma fonction create_element et j’initialise ma liste de poignées :
handle_list = []
sans oublier d’ajouter cette liste à mon instruction return :
return CreateElementResult(model_ele_list, handle_list)
Ensuite je récupère les paramètres depuis la palette :
# Extract parameters values from palette
line_length = build_ele.LineLength.value
A noter : je retrouve ici le champ Name du script interface.
Je modifie ma ligne 2D en remplaçant la longueur figée à 1000 par ma variable line_length :
# Create 2D line
line = Geometry.Line2D(0, 0, line_length, 0)
Enfin, je crée ma poignée :
# Create the handles
handle_length = HandleProperties(« LineLengthHandle »,
Geometry.Point3D(line_length, 0, 0),
Geometry.Point3D(),
[HandleParameterData(« LineLength », HandleParameterType.POINT_DISTANCE)],
HandleDirection.X_DIR
)
handle_length.info_text = « Longueur »
handle_list.append(handle_length)
Regardons en détail :
- je nomme tout d’abord cette variable : handle_length ;
- je donne un identifiant à ma poignée LineLengthHandle ;
- j’indique un point d’arrivée Geometry.Point3D(line_length, 0, 0) ;
- je place son origine Geometry.Point3D() ;
- je l’associe à ma variable LineLength du script interface ;
- je fige la direction suivant l’axe X avec HandleDirection.X_DIR ;
- pour une meilleure expérience utilisateur je peux ajouter un texte à ma poignée (visible dans Allplan) ;
- enfin, j’ajoute ma poignée à mon ensemble avec handle_list.append(handle_length).
Voici le fichier complet :
Ma simple ligne est devenue interactive avec un champ de saisie pour la longueur et ma poignée est désormais fonctionnelle :
0 commentaires