L'objet Script (Nouveau sur 1.0)
Un Objet script fonctionne de la même manière que les autres objets de dessin, mais la géométrie est créée à partir d'un script Python.
Les opérations d'usinage peuvent être basées sur des objets script de la même manière qu'avec les objets de dessin statiques. Ils peuvent également être déplacés, pivotés et copiés. Toute modification apportée par le script sera automatiquement détectée par les opérations d'usinage associées.
Les scripts peuvent être utiles pour générer des formes paramétriques (telles qu'un engrenage ou un assemblage à queue), créer des copies ou manipuler d'autres objets de dessin. Les objets script peuvent également être utilisés pour fournir des fonctionnalités générales telles qu'une animation.
Les scripts de dessin créent généralement des primitives (des objets de dessin) et les ajoutent à la propriété collection de Entities en utilisant:
this.Entities.Add(...)
L'exemple suivant dessine une forme à N cotés d'un rayon donné.
# variable that define the shape... n = 7 radius = 10# create a polyline object... poly = Polyline() poly.Closed = True for i in range(0,n): th = i*2*Math.PI/n poly.Add( radius * Math.Cos(th), radius * Math.Sin(th), 0)# add the polyline to the list of drawing objects... this.Entities.Add(poly)# multiple drawing objects can be added... this.Entities.Add(Circle(0,0,radius))
Ce qui produit ce résultat
Les objets script s'exécutent généralement lorsque c'est nécessaire pour mettre à jour la géométrie, mais peuvent être forcés à s'exécuter en les sélectionnant dans l'arbre de dessin et en appuyant sur F5.
Utilisez Edition - Décomposer pour transformer les objets de script en objets de dessin statiques, qui peuvent alors être utilisés avec les versions précédentes de CamBam ou manipulés à l'aide des opérations CAO de CamBam.
Lorsqu'un objet script est inséré à l'aide du menu Dessiner - Objet script ou en cliquant sur l'icône de la barre d'outils, un script par défaut est inséré. Le contenu de ce script peut être défini dans la propriété script par défaut des options de CamBam.
Propriétés
(Général) |
|
Infos |
A des fins générales, champ de texte multiligne qui peut être utilisé pour stocker des notes ou les paramètres des plugins. |
Divers |
|
Entités |
La propriété Entités contient une liste d'objets de dessin générés par le script. |
Script |
|
Exécuter à la mise à jour | Si la valeur est à Vrai, le script sera exécuté automatiquement si nécessaire, par exemple lors du chargement d'un dessin ou si le script est modifié. |
Script |
Le texte du script à exécuter. |
Transformation |
|
Transformer |
Affiche une matrice de transformation permettant de modifier l'échelle, la position et la rotation d'un objet sur tous les axes par entrée de valeurs numériques. |
Copier des objets de dessin
Faire des copies d'autres objets de dessin est une technique simple mais puissante pour faciliter la gestion des dessin. Les entités peuvent être copiées en recherchant leur ID, en ajoutant des objets d'un calque spécifique ou en les incluant depuis des dessins externes.
L'exemple suivant fait 4 copies d'un objet source avec un décalage de chaque copie de 18mm le long de l'axe X.
Cela ressemble beaucoup à l'utilisation de la fonction Transformer - Copie en réseau avec l'avantage que toutes modifications apportées à l'objet source seront automatiquement reflétées dans les copies lors de la prochaine exécution du script en appuyant sur F5.
# find drawing object with ID=7 ent = doc.FindPrimitive(7)for iin range (1,5): clone = ent.Clone() clone.Transform.Translate(i*18,0,0) this.Entities.Add(clone)
Utilisation des calques
Coder les ID des objets source en "dur" dans les script peut être une source d'erreur. Si les ID d'objet source changent, les scripts de référence échoueront.
Une alternative consiste à copier des objets à partir d'un Calque source spécifié par son nom. Vous pouvez explorer le fichier Solids-example.cb du dossier samples pour avoir un exemple de cette utilisation ; modifiez par exemple la polyligne (3), puis sélectionnez Entité Script (4) et tapez sur la touche F5 pour rafraichir l'affichage ; l'objet 3D sera redessiné en tenant compte des modifications faites sur la polyligne.
for entin doc.Layers["Border" ].Entities: this.Entities.Add(ent.Clone())
Copie à partir de fichiers externes
cbfile = CADFile() filename ="samples\\skull-big-foam.cb" cbfile.Open(FileUtils.GetFullPath(CamBamConfig.Defaults.SystemPath,filename))for entin cbfile.Layers["Default" ].Entities: this.Entities.Add(ent.Clone())
Inclure des scripts
L'objet script inclut des scripts contenus dans la propriété Script du calque parent, ainsi que la propriété Script au niveau du fichier de dessin. Cela permet de définir des fonctions, des classes ou des variables une seule fois dans le dessin, puis de les référencer dans un nombre quelconque d'objets de dessin.
CamBam insère un bloc d'en-tête généré en interne avant chaque script afin d'importer les espaces de noms couramment utilisés. Cela permet de garder les scripts utilisateur succincts. L'en-tête interne contient le code suivant.
import clr clr.AddReference('System' )from Systemimport * clr.AddReference('System.Drawing' )from System.Drawingimport *from CamBamimport *from CamBam.CADimport *from CamBam.CAMimport *from CamBam.UIimport CamBamUIfrom CamBam.Geomimport *
Lorsque le script est exécuté, les composants du script sont ajoutés ensembles, de sorte que le script exécuté est donné par:
En-tête + Drawing.Script + Layer.Script + ScriptEntity.Script
Importation de scripts et de modules externes
Les scripts peuvent également être importés à partir de sources externes à l'aide de l'instruction import standard du language Python. Cela fournit un moyen de gérer une bibliothèque commune d'objets de dessin et d'autres fonctions qui peuvent être partagés par plusieurs dessins. Toute modification apportée aux modules sera automatiquement détectée chaque fois que des scripts s'y référant seront exécutés.
Cet exemple importe le module Pulleys.py à partir du dossier scripts.
# import the module import Pulleys # declare a timing pulley object with pitch=5mm and 18 teeth HTD5_18 = Pulleys.HTDPulley(5.0,18) # add the pulley outline to the script object's drawing entities this.Entities.Add(HTD5_18.getFrontView())
La ligne 'import Pulleys' demande à Python de rechercher un module appelé 'Pulleys'. Python recherchera dans un chemin d'accès incluant le dossier du dessin courant et le dossier CamBam system \ scripts.
Il y a un script dans le dossier system \ script de CamBam appelé Pulleys.py qui correspond au module qui doit être trouvé et importé. CamBam fournit également les modules suivants: Pulleys.py, StepperMotors.py et Bearings.py. Le fichier exemple C-BEAM-Belt-Drive.cb qui se trouve dans le dossier samples utilise ces modules pour générer des objets de dessin.
Les modules sont importés dans leur propre espace de nom, tous les noms utilisés dans le module doivent être préfixés avec le nom du module, par exemple 'Pulleys.HTDPulley'. Il est également possible d'importer les noms de modules dans l'espace de nom des scripts en cours en utilisant une ligne comme:
import Pulleys# import just the HTDPulley name from Pulleysimport HTDPulley# or import all names from the Pulleys module from Pulleysimport *
Des noms tels que 'HTDPulley' peuvent alors être utilisés sans le préfixe 'Pulleys'.
Les modules de script sont à peu près comme n'importe quel autre script, sauf qu'ils doivent être «autonomes». Le bloc d'en-tête généré en interne décrit ci-dessus ne sera pas automatiquement ajouté, de sorte que tous les modules et espaces de noms requis doivent être importés dans le module.
Le chemin de recherche du module peut être défini dans le script pour permettre l'importation de modules Python standard.
# append the module search path import sys sys.path.append("C:\Python27\Lib" )# import the Python CSV handling module import csv reader = csv.reader(open('C:\devt\test.csv' ,'rb' ))for rowin reader:
Animations
Les scripts peuvent être utilisés pour animer des objets de dessin en appliquant des transformations telles que des rotations et des translations, puis en mettant à jour chaque image dans une boucle. Il est possible de faire pivoter, mettre à l'échelle et faire un panoramique sur le dessin pendant l'animation.
Les scripts d'animation doivent être marqués avec Exécuter à la mise à jour, défini sur Faux, sinon ils seront exécutés dès que le fichier sera chargé.
Le script doit également définir la propriété Animating de la vue en cours lorsque l'animation démarre, puis l'effacer à la fin du script. Cela permet à la vue de fournir certaines optimisations ainsi que d'empêcher l'affichage estompé des objets non sélectionnés au cours de l'animation.
Le script doit également conserver l'état de transformation d'origine des objets en cours d'animation, puis restaurer les transformations à la fin du script, sinon le dessin sera laissé dans un état avec les objets source transformés comme à la dernière image d'animation.
L'exemple suivant tournera et déplacera un objet avec ID = 1 le long de l'axe X.
# find drawing object with ID=1 ent = doc.FindPrimitive(1)# save the current transformation tsave = ent.Transform# start animating view.Animating = 1 cycles = 4for fin range (0,cycles*360):# apply transformations to the source object trans_translate = Matrix4x4F.Translation(f*0.1,0,0) trans_rotate = Matrix4x4F.RotationZ(-f/180.0*Math.PI) ent.Transform = tsave * trans_rotate * trans_translate# update the display view.RefreshView() app.Sleep(5)# restore the original transformation ent.Transform = tsave view.Animating = 0
Pour un autre exemple d'animation, vous pouvez ouvrir le fichier Klannimate.cb qui se trouve dans le dossier samples. Dépliez le calque Animate - select script, press F5, sélectionnez Entité Script (20) et tapez sur la touche F5 pour lancer l'animation.