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é.

Si la valeur est à Faux, le script doit être exécuté manuellement en sélectionnant l'objet et en appuyant sur F5. Cela peut être utile pour les scripts qui ne produisent pas de dessin tels que les animations qui doivent uniquement être exécutées à la demande.

Script

Le texte du script à exécuter.

Le texte peut être modifié en cliquant sur le bouton à droite de la propriété, en double-cliquant sur les objets de dessin créés par le script ou en double cliquant sur l'objet script dans l'arborescence.

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 i in 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 ent in 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 ent in 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 System import *
clr.AddReference('System.Drawing')
from System.Drawing import *
from CamBam import *
from CamBam.CAD import *
from CamBam.CAM import *
from CamBam.UI import CamBamUI
from CamBam.Geom import *

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 Pulleys import HTDPulley
# or import all names from the Pulleys module
from Pulleys import *

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 row in reader:
	print str(row)

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 = 4

for f in 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.

Copyright (c) 2011 HexRay Ltd