[VB Script] preparation de dessins

  • Auteur de la discussion ben_mtl
  • Date de début
B

ben_mtl

Nouveau
Bonjour,

Je me suis finalement lancé pour tenter d'ecrire un petit script afin d'automatiser la prepration de mes dessins quand j'importe un dxf dans CamBam...
Ca fait bien longtemps que j'ai pas fait de programmation et surtout je ne trouve pas de liste des fonctions de cambam alors si des âmes charitables peuvent m'aider un peu ca serait top !

En gros, la facon dont je procede :
- j'ouvre un dxf (manuellement)
- je positionne mon DXF au bon endroit dans le repere CamBam (manuellement) mais je regarde comment faire pour que mes elements de dessin se créent directement a la bonne place dans mon logiciel de CAD (Catia)... autre projet :p

ensuite c'est le script qui prendrait la relève :
- créer un calque "zone1"
- le rendre actif
- créer un rectangle avec des dimension et une position prédéfinie
- Selectionner la geometrie DANS ce rectangle
- la deplacer dans le calque Zone1
- Deplacer toute la geometrie du calque Zone1 d'un point A à un point B (ou selon un vecteur selon ce que je peux programmer)...

J'ai regardé plein d'exemples de scripts, j'ai commencer a bricoller un peu de code et je bloque deja :p (et j'en suis meme pas aux choses dont je n'ai aucune idée de la syntaxe !!!)

Voila ce que donne mon code pour le moment :

Ce qui fonctionne :
-la creation du calque et les operations sur celui-ci
-la creation du retangle et d'un cercle (pour un essai)
-l'affichage du cercle

Ce qui ne fonctionne pas :
-le rectangle existe dans le calque mais ne s'affiche pas sur le dessin... le cercle oui.

Alors ma première question serait de savoir pourquoi le rectangle ne s'affiche pas, ce n'est pas indispensable pour moi car il va juste me servir de "zone de selection" mais c'est surprennant...

Pour la suite des operations, je sais comment selectionner toute la geometrie d'un dessin, je sais aussi comment selectionner seulement la geometrie d'un calque... mais pour selectionner la geometrie a l'interieur d'une forme limite.. ca je ne sais pas :( quelqu'un a une idée ?

Dés que j'ai mon accès pour le forum Cambam UK je poserai la question là-bas aussi mais je compte partager mes progrés sur les 2 forums en parallèle..

Merci !

Benoit
 
D

dh42

Compagnon
Salut,

Pour ton polyrectangle qui ne s'affiche pas, pour une raison inconnue (de moi), il semble qu'il faille "appliquer les transformations" ... en tout cas ça marche chez moi.

Pour faire ça, ajoute la ligne

RectZone1.ApplyTransformation()

Juste après: newdoc.Add(RectZone1)


Quelques lien utiles:

http://www.cambam.info/doc/api/
http://www.cambam.co.uk/forum/index.php?topic=3246.0

et biens sur des tas de script à étudier ... il n'y a malheureusement pas de doc des fonctions de CB pour l'instant en dehors de la mini doc du premier lien.

pour ma part j'utilise Reflector et Autodiagrammer pour explorer les DLL et deviner comment ça marche.

Il y a aussi le script Mop-automate dans le dossier de script, et le plugin (en C) HeightMapPlugin-Src.zip ... et bien sur le forum anglais ..

http://www.vss-tech.com/autodiagrammer/
http://telecharger.tomsguide.fr/Reflector-NET,0301-21024.html

++
David
 
Dernière édition par un modérateur:
D

dh42

Compagnon
Re

Pour la suite des operations, je sais comment selectionner toute la geometrie d'un dessin, je sais aussi comment selectionner seulement la geometrie d'un calque... mais pour selectionner la geometrie a l'interieur d'une forme limite.. ca je ne sais pas :( quelqu'un a une idée ?

Les infos sont dans le code ; le fichier CB de test est en PJ.
Les résultats s'affichent dans la fenêtre de messages.



++
David Voir la pièce jointe test_contenu.rar
 
B

ben_mtl

Nouveau
Ah j'ai bien avancé finalement aujourd'hui. Encore un gros merci pour ton aide David !
En l'etat mon script est capable de joindre mes differentes geometries et de les copier dans differents calques en fonction de leur position sur le dessin (les calques sont créés par le script aussi).
Il me reste donc à deplacer le contenu de chaque calque pour tout superposer à l'origine, et si je me sens fort peut etre que je vais automatiser la creation de certaines operations d'usinage tant qu'a y etre...

Là c'est l'heure d'aller se coucher, je posterai le code demain.
 
D

dh42

Compagnon
Salut,

Ah ! passer des nuits à programmer, ça me rappelle mes débuts en programmation :-D

Pour déplacer des objets, je ne pense pas que l'on puisse déplacer toute une sélection en une seule fois ; il doit falloir s'y prendre objet par objet.

un script pour déplacer les objets sélectionnés (avec saisie de la valeur)


++
David
 
B

ben_mtl

Nouveau
Haha non pas la nuit complete mais j'y ai passé la soirée :p (decallage horaire)

Merci pour le code pour faire des translations, je met un peu plus bas le code tel qu'il etait hier soir, tu verra que j'avais commencé a explorer (sans succés) comment utiliser une matrice de transformation 4x4 sur un element a la fois en meme temps que je le change de calque mais j'etais assez loin de quelque chose qui fonctionne :p

Je met en piece jointe mon fichier test pour valider que ca fonctionne, si tu essaie le script tu verra les operations qui sont faites (transfo en polylines, jonction de lignes, changement de calque en fonction de la position..) et aussi un petit "bug" non problematique pour l'instant : mes geometries sont copiées dans leur calque respectif mais restent aussi dans le calque par defaut (avec le meme ID), ca ne change rien et une fois le script terminé il suffira de supprimer ce calque original...

Je vais ajouter la fonction de translation, tester ca puis je vais m'attaquer a "nettoyer" le code, je declare plein de variable qui sont plus ou moins utiles, en fait je peux surement condenser énormément mon code en utilisant des boucles mieux réfléchies... enfin bon pour l'instant ca fonctionne c'est deja top !

Voir la pièce jointe fichier test organisation DXF.zip
 
J

jeramenemafraise

Ouvrier
salut Ben_mtl,

je vois que tu connais bien le language VBS, super.

tu bosses en pouces ?.
j'ai essayé ton sous programme, mais je ne vois pas trop encore son utilité,pour le moment.

bonne fin de journée.
Yves.
 
B

ben_mtl

Nouveau
Salut Yves,

Non je ne connais pas vraiment le VBS mais j'apprend...
En effet je bosse en pouces, pas par choix mais plutôt par nécessité : j'habite au Quebec (Français d'origine) et ici tout est en pouces : les matériaux, les outils, la majorité des instruments de mesure, du coup ma machine CNC est aussi calibrée en pouces et Mach3 aussi... alors pas le choix ! Malgré tout je dessine souvent mes projets en millimètres avec Catia et je convertis en pouce lors de l'exportation en DXF.

Mon sous-programme est vraiment très spécifique à mon application : mon processus de CAD me sort les géométries que tu peux voir dans le fichier CamBam de test, en gros ça correspond aux différentes géométries que je dois découper en fonction de l'outil utilisé, et des paramètres d’opération.

Dans Catia (mon logiciel de CAD) je me suis fait des modèles entièrement paramétrés pour mes skis : je rentre les dimensions recherchée et ca me sort un DXF avec les différentes formes a découper en fonction de l'outil, du matériau, de l’opération..
Le problème vient du fait que Catia ne gère pas les calques, donc je ne peux pas exporter toutes mes géométries superposées les unes sur les autres dans différents calques. Pour palier à ça les géométries sont simplement décalées les unes par rapport aux autres, toujours de la même façon.

Mon sous programme se charge "tout simplement" de me remettre toutes les géométries superposées, dans différents calques en fonction de l'outils / opération d'usinage.

Par exemple :
- le calque "SKI FINAL" correspond a la forme finale de mon ski, ça me sert de référence et je ne ferai pas d’opération d'usinage a partir de cette géométrie.
- le calque "SEMELLE" correspond au parcours d'outil que doit suivre mon couteau tangentiel pour découper une feuille de plastique (semelle des skis)
- le calque "Sidewalls Bois" est une relique d'un ancien processus, pour l'instant ça ne sert a rien mais je le garde comme référence
- le calque Groove1 sert pour la découpe d'une poche dans une planche de bois, à une profondeur particulière
- le calque Groove2 fait une poche a une autre profondeur.. ainsi de suite

les différents calques "groove" sont ma solution a un problème de poche a profondeur variable, exposé dans un autre sujet il y a quelques semaines.
 
D

dh42

Compagnon
Salut,

Je met en piece jointe mon fichier test pour valider que ca fonctionne, si tu essaie le script tu verra les operations qui sont faites (transfo en polylines, jonction de lignes, changement de calque en fonction de la position..) et aussi un petit "bug" non problematique pour l'instant : mes geometries sont copiées dans leur calque respectif mais restent aussi dans le calque par defaut (avec le meme ID), ca ne change rien et une fois le script terminé il suffira de supprimer ce calque original...

Pas sur ; fait la manip suivante:

- sélectionne tous le contenu du dessin , centre(étendu), puis applique le script.

la polyligne 12 apparait 3 fois, une fois dans le calque 0, et dans les grooves 3 et 4 ... (et ça met une alerte dans la fenetre de message si tu est en niveau de diag 4)

si je sauve le fichier, puis que je le ré ouvre, les polylignes en double ne disparaissent pas, elle sont renumérotées, comme tu peux voir sur cette image.
ce qui peux être gênant si c'est sur des calques qui ne seront pas supprimés.

bug.jpg


Je pense que c'est du au fait que le 'pointeur' vers la polyligne n'a pas été enlevé de l'ancien calque. (de l' EntityCollection attaché au calque)

il faudrait probablement un truc du genre:

AncienLayer.Entities.Remove(ent)

exécuté après avoir ajouté l'entité au nouveau calque.

ou plus simple, si tu te fiche de garder les même n° d'ID pour les polylignes, tu crée une nouvelle polyligne et tu supprime l'ancienne via son pointeur.

Si mon flair ne me trompe pas, je pense que la fonction que j'ai surlignée devrait permettre de créer une nouvelle Entity, à partir d'une autre (src) ; donc une copie.

EntityCollection.jpg


++
David
 
D

dh42

Compagnon
Re

Bon, pour déplacer d'un calque à un autre, c'est bien ça ; il faut supprimer l'entrée dans le calque source.

un exemple ; pour le tester fait cette manip sous cambam.

' créer un calque et le nommer "1" (sans les guillemets) ce sera le calque de destination
' rendre un autre calque courant (c'est sur celui la que le script dessinera l'objet à déplacer)


++
David
 
J

jeramenemafraise

Ouvrier
Bonjour à tous,
Pour faire des sous programme pour Cambam, en VBS, le language c'est du javascript ?
ou peut-on trouver un livre ,ou un site,pour se familiariser avec ce language ?
il y a plusieurs type de javascript ?,si oui quel reference concernant CB ?...

existe -il un éditeur de pour ce genre de language , surtout pour éviter les bugs ?.

merci par avance pour vos réponses.

Yves.
 
D

dh42

Compagnon
Salut,

Pour faire des sous programme pour Cambam, en VBS, le language c'est du javascript ?

Non, VBS c'est Visual Basic Script (un Visual Basic "allégé")

Note qu'il est aussi possible d'utiliser le JavaScript ou le Python avec CB, mais je ne connais ni l'un ni l'autre.

ou peut-on trouver un livre ,ou un site,pour se familiariser avec ce language ?

Pour le visual basic (et d'autres)

http://msdn.microsoft.com/fr-fr/vstudio/hh388573

existe -il un éditeur de pour ce genre de language , surtout pour éviter les bugs ?.

Pour le Visual Basic, il est intégré ; pour le VB script, il y celui de cambam, ou plus évolué, quelque chose comme Programmers Notepad, par contre tu ne peux pas lancer l’exécution du script via PN, uniquement depuis l'éditeur de CB, ce qui oblige à ré-ouvrir le fichier.

http://www.pnotepad.org/download/

Ni l'un ni l'autre ne "corrige les bugs" :wink: ... avec la version complète de VB (pas pour les script), tu peux faire du pas à pas, lire les variables, l'éditeur à une aide à la saisie, etc ... mais pas avec le vbs (à moins d'utiliser l'éditeur de VB pour taper tes script VBS)

VB est gratuit (la version complète), tu peux le télécharger et l'installer depuis le premier lien de ce message.

++
David
 
Dernière édition par un modérateur:
J

jeramenemafraise

Ouvrier
bonsoir David, et merci pour tes explications.
Yves.
 

Sujets similaires

01power
Réponses
3
Affichages
13 848
01power
01power
D
Réponses
9
Affichages
3 059
David80
D
taratata
Réponses
4
Affichages
4 250
taratata
taratata
D
Réponses
5
Affichages
2 378
dh42
D
D
Réponses
11
Affichages
7 066
D
Haut