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 longueur fixe.
1) Script Interface
Je me place dans le dossier Bibliothèque d’Allplan (par défaut localisé ici C:\Data\Allplan\2023\Std\Library\PythonParts) et je crée un nouveau fichier :
HelloWorld.pyp
Comme vu précédemment, les fichiers interface sont écrits en XML.
Ils commencent par l’information suivante :
<?xml version= »1.0″ encoding= »utf-8″?>
Ce prologue indique la version du langage XML utilisé ainsi que le codage des caractères dans le document.
Vient ensuite la balise générale Element dans laquelle nous indiquons les informations du script principal :
<Element>
<Script>
<Name>APIHub\hello_world.py</Name>
<Title>HelloWorld</Title>
<Version>1.0</Version>
</Script></Element>
Nous trouvons d’abord le chemin du fichier Python, le titre affiché dans Allplan et la version du script.
Voici le fichier complet :
2) Script Principal
Toujours dans le dossier STD, je crée maintenant un nouveau fichier dans le répertoire PythonPartsScripts que je nomme :
hello_world.py
On commence par importer les différents modules dont nous allons avoir besoin :
import NemAll_Python_BaseElements as BaseElements
import NemAll_Python_BasisElements as BasisElements
import NemAll_Python_Geometry as Geometry
import NemAll_Python_IFW_ElementAdapter as ElementAdapter
from BuildingElement import BuildingElement
from CreateElementResult import CreateElementResult
from PythonPartUtil import PythonPartUtil
A noter : la liste complète des modules est disponible ici.
Les scripts ont besoin d’au moins 2 fonctions :
-
check_allplan_version
Cette fonction est là pour s’assurer de la bonne exécution du script dans votre version d’Allplan (par défaut toutes les versions sont acceptées) :
def check_allplan_version(build_ele, version):
# Support all versions
return True
-
create_element
Là nous lançons la création des objets :
def create_element(build_ele, doc):
model_ele_list = []
pyp_util = PythonPartUtil()
…
return CreateElementResult(model_ele_list)
A noter : d’une manière générale, je pars sur l’hypothèse que les objets que nous allons étudier restent sous leur forme paramétrique PythonPart ; je commence par initialiser ma liste des objets à créer puis j’instancie ma classe PythonPartUtil.
Je questionne Allplan afin de récupérer les valeurs courantes (layer, plume, couleur, etc…) :
# Define common properties
com_prop = BaseElements.CommonProperties()
com_prop.GetGlobalProperties()
Voici ma ligne que l’on définit par son point d’origine et d’arrivée :
# Create 2D line
line = Geometry.Line2D(0, 0, 1000, 0)
A noter : les 2 premiers chiffres représentent les coordonnées de départ (0, 0) et ensuite ceux finaux (1000, 0). Nous formons ainsi une ligne horizontale de 1000mm de longueur.
J’ajoute cette ligne à ma vue :
# Add line to 2d view
pyp_util.add_pythonpart_view_2d(BasisElements.ModelElement2D(com_prop, line))
Ainsi j’applique des propriétés graphiques (com_prop) à mon objet (line) et je place le tout dans un environnement 2D (add_pythonpart_view_2d).
A noter : Allplan nous offre le choix sur la visibilité de nos objets => en 2D (add_pythonpart_view_2d), en 3D (add_pythonpart_view_3d) ou bien les deux (add_pythonpart_view_2d3d).
Dernière étape, je crée mon PythonPart :
# Create the PythonPart
model_ele_list = pyp_util.create_pythonpart(build_ele)
Voici le fichier complet :
Notre 1er script est achevé, Allplan génère une ligne avec la bonne longueur et les paramètres courants.
Nous verrons dans le prochain article comment ajouter une poignée pour personnaliser la longueur.
0 commentaires