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

Soumettre un commentaire

Objects3D V2.0

Nouvelle étape dans la modélisation de notre PythonPart "Poteau en Béton Armé", regardons aujourd'hui comment configurer les ancrages de notre objet 3D. Par ancrage je pense tout particulièrement à...

Objects3D V1.0

Nouvelle série dans l'apprentissage des PythonParts, étudions la modélisation d'un objet 3D : un poteau en béton armé.1) Script InterfaceDans cet exemple nous allons mettre en place les premiers...

Objects2D V3.0

Dernière étape pour cet exemple de PythonParts, je vous propose de mettre en place une légende pour notre objet. Cette dernière devra reprendre les informations suivantes : le nom de mon objet ; le...

Objects2D V2.0

Dans le précédent article, nous avons vu comment préparer notre code en POO, voyons aujourd'hui comment en exploiter le potentiel avec ce nouvel exemple. En effet, nous allons compléter notre...

Objects2D V1.0

Nous allons commencer à construire des objets plus complexes sur Allplan, mais avant tout, un mot sur la Programmation Orientée Objet (POO)...1) Programmation Orientée ObjetLa Programmation Orientée...

HelloWorld V3.0

Dernière étape pour notre 1er exemple de script HelloWorld, nous allons maintenant voir comment personnaliser le rendu de notre objet.1) Script InterfaceDe retour dans notre palette, je vais tout...

HelloWorld V1.0

HelloWorld est par tradition écrit pour donner un exemple d'un langage de programmation. Nous ne ferons pas exception ici avec l'écriture de notre 1er script. Le but est simple, créer une ligne de...

Structure des PythonParts

Allplan est installé, votre IDE est prêt... parfait, voyons en détail le fonctionnement des PythonParts.1) Description des fichiersPour fonctionner, un PythonPart a besoin d'au moins 2 fichiers :...

Introduction

Dans cette série d'articles, nous allons étudier l'édition de scripts en langage de programmation Python pour le logiciel Allplan.Pour vous permettre de bien suivre ces tutoriels, je vais partir sur...