greg1922 Posté(e) le 19 mai 2016 Posté(e) le 19 mai 2016 (modifié) Bonjour à tous ! Donc comme je le dis dans la description de mon sujet, je fais une licence en alternance de dessinateur-projeteur et il nous est demandé (pour nous auto-former) de créer un utilitaire qui peut-être utile à notre entreprise... Pour ma part, j'ai choisi de faire un outil codé en lisp, pour, entre autre, en apprendre davantage sur le sujet. Je dois donc vous dire que je suis pour le moment débutant :) En gros, mon objectif est de copier tous les éléments de calques spécifiques dans le presse-papiers, d'en changer les propriétés (les rassembler dans un même calque, changer la couleur, l'épaisseur, ...) puis de coller le tout "modifié" dans un autre plan. Pour tous vous dire, je suis pas sur de la faisabilité de mon lisp ahah (rires forts) ! Mais je pense que c'est réalisable... J'ai trouvé sur un forum un lisp qui se rapproche de celui que je souhaite faire, permettant de copier tous les éléments d'un calque par un simple clic sur un des éléments du calque et de les "basculer" dans un autre calque en cliquant sur un élément du calque souhaité. Mais je n'arrive pas à modifier le choix d'un claque par une liste de claques que je souhaite copier dans le presse papiers... Si vous pouvez m'aider s'il vous plait !Merci d'avance ! ___________________________________________________________________________________________________ (defun c:Merger (/ ent layer ent2 layer2 i ss ent) (vl-load-com) (cond ((and (setq ent (car (nentsel "\nSelect Object on Layer to Merge: "))) (setq layer (cdr (assoc 8 (entget ent)))) (setq ent2 (car (entsel "\nSelect Object on Layer to Merge to: ")) ) (setq layer2 (cdr (assoc 8 (entget ent2)))) (or (not (eq layer layer2)) (alert "Cannot merge layer with itself!") ) ) ;_ and (setq i -1 ss (ssget "_X" (list (cons 8 layer))) ) ;_ setq (while (setq ent (ssname ss (setq i (1+ i)))) (vla-put-layer (vlax-ename->vla-object ent) layer2) ) ;_ while (vlax-for blks (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object) ) ;_ vla-get-ActiveDocument ) ;_ vla-get-Blocks (vlax-for obj blks (if (eq (strcase layer) (strcase (vla-get-layer obj))) (vla-put-layer obj layer2) ) ;_ if ) ;_ vlax-for ) ;_ vlax-for ) ) ;_ cond (princ) ) ;_ defun___________________________________________________________________________________________________ Modifié le 8 juin 2016 par didier Formatage du code et ajout des balises bbcode
(gile) Posté(e) le 19 mai 2016 Posté(e) le 19 mai 2016 Salut, Si tu veux apprendre le LISP, partir d'un code existant dont tu penses qu'il fait "presque" ce que tu veux mais que tu n'es pas capable de comprendre/modifier, c'est à coup sûr, partir du mauvais pied. Fixe toi plutôt des objectifs simples (en décomposant ce que tu souhaite faire en plusieurs taches successives par exemple) et essaye de les résoudre un par un en écrivant toi même le code (avec l'aide des membres de CADxp bien sûr). Dans tous les cas, ne pas oublier qu'AutoLISP s'exécute dans le contexte du document, c'est à dire qu'un LISP lancé dans un dessin ne peut pas se poursuivre dans un autre. Ce sachant, il faut peut-être revoir ton algorithme. Quand on débute en LISP, le plus souvent on commence par écrire du code qui reproduit ce qu'on fait directement avec les commandes AutoCAD (un peu comme un script). La commande WBLOC est peut-être une alternative envisageable pour ce que tu veux faire. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 19 mai 2016 Posté(e) le 19 mai 2016 Coucou je confirme et je reconfirme et je rereconfirme en 1992 : mon premier lisp faisait cinq lignes et j'étais fier de mon résultat, crois-moi ! amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Goldorak44 Posté(e) le 19 mai 2016 Posté(e) le 19 mai 2016 Salut, je confirme également.De plus le Lisp que tu nous expose, est du Vlisp. Pas le plus simple pour commencer. Commence par les bases. Regarde le tuto de gile (introduction à AutoLisp) disponible via sa signature. Il n'y a pas mieux pour commencer. Et surtout n'hésite pas à poser des questions mais sur TON code !! Tu apprendras bien plus vite et bien mieux. ;) PIRO CharlesDeveloppeur Revit, RV/RA - Formateur RevitPIRO CIE
greg1922 Posté(e) le 20 mai 2016 Auteur Posté(e) le 20 mai 2016 ouais c'est sûr que partir d'un existant c'est pas super... Ok bon ben je repars de 0 et je reviens vers vous rapidement ! merci :)
greg1922 Posté(e) le 20 mai 2016 Auteur Posté(e) le 20 mai 2016 Bon, voilà ce que je viens de faire ! avec initialisation et restauration qui sont des commandes de récupération des paramètres initiaux et de restauration. Je l'ai testé et il marche ! B) les paramètres des claques de ma liste changent. Le problème maintenant c'est aux niveaux de mes blocs que ça coince... ils ne changent pas. :( Je peux lire l'entité des blocs, avec une commande que j'ai trouvé dans mon manuel "setq ent (car (entsel))), mais le problème c'est que les blocs de mon dessin n'ont pas tout à fait le même nom d'entité. Ils commencent tous par "7ffff675 ..". Comment faire s'il vous plait ? ;________________________________ LISP SURCHARGES_________________________________ (defun c:surcharges (/ calque1 calque2 calque3 calque4 liste modif ) ;INITIALISATION (c:initialisation) ;CREATION DU CALQUE STR - SURCHARGE (if (not (tblsearch "layer" "STR - SURCHARGE")) ;vérification de l'existant d'un calque "STR - SURCHARGE" (command "-calque" "n" "STR - SURCHARGE" "CO" "11" "STR - SURCHARGE" "tl" "CACHE" "STR - SURCHARGE" "ep" "0.00" "STR - SURCHARGE" "")) ;Création du claque "STR - SURCHARGE" si il n'existe pas ;CREATION D'UNE LISTE DES CALQUES IMPLIQUES (setq calque1 "STR - ALLEGES") (setq calque2 "STR - LONGRINE") (setq calque3 "STR - POTEAUX") (setq calque4 "STR - VOILE") (setq liste (strcat calque1 "," calque2 "," calque3 "," calque4));LISTE ;MODIFICATION DES PARAMETRES DES CALQUES DE LA LISTE (setq modif (list (cons 8 liste))) ;Ajout à la liste de sélection un paramètre (8 = nom des calques) (ssget "X" modif) (command "_.copytolayer" "p" "" "STR - SURCHARGE" "0,0" "0,0") ;RESTAURATION (c:restauration) ;FIN DE LA FONCTION )
Goldorak44 Posté(e) le 20 mai 2016 Posté(e) le 20 mai 2016 Salut, premières remarque sans avoir tout regardé.Déclare tes variables. Tu a déclaré "modif" mais pas "calque1", "calqueN" etc... Ensuite met ton code avec les balises prévues pour : Pour les blocs, il rentrer dedans pour les éditer. ;) PIRO CharlesDeveloppeur Revit, RV/RA - Formateur RevitPIRO CIE
greg1922 Posté(e) le 20 mai 2016 Auteur Posté(e) le 20 mai 2016 en faite, ce que je souhaite faire, c'est garder mes blocs et venir dessiner par dessus les contours de celui-ci. Pour ça, il faut que je fasse une sélection des blocs en fonction d'un attribut commun à ces blocs. Ensuite je pourrais paramétrer ma sélection :) Ma question est donc, comment faire une sélection de blocs par valeur d'attribut svp ?
(gile) Posté(e) le 25 mai 2016 Posté(e) le 25 mai 2016 Salut, Une recherche t'aurait certainement permis de trouver, entre autres, ce sujet. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
greg1922 Posté(e) le 25 mai 2016 Auteur Posté(e) le 25 mai 2016 merci ! mais c'est trop compliqué pour débuter dans le lisp ahah. En cherchant un peu, j'ai découvert la commande xplode, qui decompose des éléments et les envois dans un calque. Ce qui est parfait pour moi, sauf qu'une fois le lisp lancé, j'obtiens "commande inconnue" alors que sur autocad, en entrant dans la barre de commande " xplode" la commande marche bien ... Je vous glisse une partie de mon code : ;CREATION D'UNE SECONDE LISTE DES CALQUES IMPLIQUES (AVEC BLOCS) (setq calque5 "STR - LINTEAU") (setq calque6 "STR - POTEAUX") (setq calque7 "STR - LONGRINE") (setq liste2 (strcat calque5 "," calque6 "," calque7));LISTE2 ;MODIFICATION DES PARAMETRES DES CALQUES DE LA LISTE2 (setq modif2 (list (cons 8 liste2))) ;Ajout à la liste2 de sélection un paramètre (8 = nom des calques) (ssget "X" modif2) (command "_copytolayer" "p" "" "STR - SURCHARGE" "0,0" "0,0") (command "xplode" "p" "" "G" "A" "STR - SURCHARGE")
(gile) Posté(e) le 25 mai 2016 Posté(e) le 25 mai 2016 XPLODE n'est pas une commande à proprement parler, c'est une fonction LISP : c:xplode. On ne peut donc pas l'appeler avec command. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
greg1922 Posté(e) le 25 mai 2016 Auteur Posté(e) le 25 mai 2016 d'accord, donc il faut faire une boucle sur un jeu de sélection pour traiter les blocs 1 par 1 avec la commande "decompose" je suppose, exact ?
(gile) Posté(e) le 25 mai 2016 Posté(e) le 25 mai 2016 Tu peux appeler XPLODE avec la fonction VisualLISP vla-SendCommand en lui passant comme argument une chaîne de caractère contenant les options de la commande (un peu comme un script) :(vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "xplode P A STR - SURCHARGE\n") Mais si l'objectif est bien de faire "une sélection des blocs en fonction d'un attribut commun à ces blocs" je pense que la décomposition n'est certainement pas la voie la plus facile. Quand on décompose un bloc contenant des attributs, les références d'attributs sont converties en définition d'attribut (et perdent donc leur valeur). Ce que tu cherches à faire est plutôt complexe pour "débuter en LISP". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
greg1922 Posté(e) le 25 mai 2016 Auteur Posté(e) le 25 mai 2016 ça marche ! merci :) en ajoutant un G entre P et A. (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "xplode P G A STR - SURCHARGE\n") C'est vrai que ça se complique un peu là ... Ce que je cherche à faire en faite, c'est à conserver les blocs et venir dessiner par dessus une polyligne fermée avec hachures. et ta ligne de commande fait le boulot, maintenant je n'ai plus qu'à supprimer les definitions d'attributs et à modifier le type deshachures.
greg1922 Posté(e) le 3 juin 2016 Auteur Posté(e) le 3 juin 2016 re bojour tout le monde ! Bon j'ai fini mon lisp et j'ai un problème... Tout s'exècute parfaitement mais en 2 parties... Je m'explique, après la ligne en visual lisp, mon code ne s'exécute plus. Par contre, si je fini par le visual lisp et que ensuite je lance le reste via un second programme tout s'exécute. Comment donc puis-je lier les 2 parties pour que mon prgramme marche en 1 fichier et non 2 ? merci ;________________________________ LISP SURCHARGES_________________________________ (defun c:surcharges (/ poly calque1 calque2 calque3 calque4 clos calque5 calque6 calque7 liste1 liste2 modif1 modif2 jeusel jeusel1 jeusel2 jeusel3 jeusel4) (vl-load-com) ;sert à charger les fonctions Visual LISP (vlax-get-acad-object) ;INITIALISATION (c:initialisation) ;CREATION DU CALQUE STR - SURCHARGE (if (not (tblsearch "layer" "STR - SURCHARGE")) ;vérification de l'existant d'un calque "STR - SURCHARGE" (command "-calque" "n" "STR - SURCHARGE" "CO" "11" "STR - SURCHARGE" "tl" "CACHE" "STR - SURCHARGE" "ep" "0.00" "STR - SURCHARGE" "")) ;Création du claque "STR - SURCHARGE" si il n'existe pas ;VERIFICATION DES POLYLIGNES DU DESSIN (CLOSES) ;(setq poly (ssget "X" (list (cons 0 "LWPOLYLINE")))) ;(command "_.pedit" "m" "p" "" "c" "") ;CREATION D'UNE PREMIERE LISTE DES CALQUES IMPLIQUES (SANS BLOCS) (setq calque1 "STR - VOILE") (setq calque2 "STR - VOILE HACHURE") (setq calque3 "STR - MACONNERIE") (setq calque4 "STR - MACONNERIE HACHU") (setq liste1 (strcat calque1 "," calque2 "," calque3 "," calque4));LISTE1 ;VERIFICATION DES POLYLIGNES (CLOSES) (setq clos (list (cons 8 liste1))) (ssget "X" clos) (command "_.pedit" "m" "p" "" "o" "j" "0.00" "c" "") ;MODIFICATION DES PARAMETRES DES CALQUES DE LA LISTE1 (setq modif1 (list (cons 8 liste1))) ;Ajout à la liste1 de sélection un paramètre (8 = nom des calques) (ssget "X" modif1) (command "_copytolayer" "p" "" "STR - SURCHARGE" "0,0" "0,0") ;CREATION D'UNE SECONDE LISTE DES CALQUES IMPLIQUES (AVEC BLOCS) (setq calque5 "STR - LINTEAU") (setq calque6 "STR - POTEAUX") (setq calque7 "STR - LONGRINE") (setq liste2 (strcat calque5 "," calque6 "," calque7));LISTE2 ;MODIFICATION DES PARAMETRES DES CALQUES DE LA LISTE2 (setq modif2 (list (cons 8 liste2))) ;Ajout à la liste2 de sélection un paramètre (8 = nom des calques) (ssget "X" modif2) (command "_copytolayer" "p" "" "STR - SURCHARGE" "0,0" "0,0") (setq jeusel (ssget "X" (list (cons 8 "STR - SURCHARGE")))) (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "xplode P G A STR - SURCHARGE\n");Fonction Visual LISP "xplode" permettant de décomposer des blocs dans un calque précis ; àprès ça le programme ne s'exécute plus (setq jeusel1 (ssget "X" (list (cons 0 "ATTDEF") (cons 8 "STR - SURCHARGE")))) (command "_.erase" jeusel1 "") (setq jeusel2 (ssget "X" (list (cons 0 "HATCH") (cons 8 "STR - SURCHARGE")))) (command "_.erase" jeusel2 "") (setq jeusel3 (ssget "X" (list (cons 8 "STR - SURCHARGE")))) (command "_.pedit" "m" "p" "" "o" "j" "0.00" "c" "") (setq jeusel4 (ssget "X" (list (cons 8 "STR - SURCHARGE")))) (command "-hachures" "s" "p" "" "CA" "STR - SURCHARGE HACHU" "p" "DOTS" "0.05" "0" "") (alert " La copie des élèments impactants sur l'étage inférieur s'est correctement effectué, Veuillez à présent aller sur le plan inférieur et coller le contenu copié") ;RESTAURATION (c:restauration) (princ) ;FIN DE LA FONCTION )
greg1922 Posté(e) le 3 juin 2016 Auteur Posté(e) le 3 juin 2016 Quand je lance le tout j'obtiens : Commande: SURCHARGES 112 objets copiés et placés sur le calque "STR - SURCHARGE". 69 objets copiés et placés sur le calque "STR - SURCHARGE". Commande inconnue "SURCHARGES". Appuyez sur F1 pour obtenir de l'aide. Impossible de hachurer la zone. Impossible de hachurer la zone. [...] Impossible de hachurer la zone. Impossible de hachurer la zone. Commande: xplode Choix des objets à traiter avec la commande Xplode. Choix des objets: P Pas de jeu de sélection précédent.
(gile) Posté(e) le 4 juin 2016 Posté(e) le 4 juin 2016 Le problème est probablement dû à la présence d'espaces dans le nom de calque*.Dans l'expression (vla-SendCommand ...) :(vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "xplode P G A STR - SURCHARGE\n")Le second argument est une chaîne de caractère passée en ligne de commande (un peu comme un script) dans lequel les espace sont interprétés comme des validations (Enter) qui, dans ce cas, rappellent la dernière commande soit : SURCHARGES. Tu peux essayer en mettant le nom du claque entre guillemets, mais je ne suis pas certain que ça marche :(vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "xplode P G A \"STR - SURCHARGE\"\n") * Éviter les espaces (et tous les accents et autres caractères spéciaux excepté underscore) dans les noms (de calque, de bloc, de style, de fichier, etc) permet d'éviter beaucoup de problèmes dans les scripts, programmes etc. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
greg1922 Posté(e) le 6 juin 2016 Auteur Posté(e) le 6 juin 2016 merci gile, du coup j'ai déclaré courant le calque "STR - SURCHARGE" pour pouvoir l'appeler par un simple espace dans la fonction en visual lisp. Mais mon programme marche de la même façon... Je pense que le problème vient finalement de ce qu'il y a après cette ligne de code. Je vais essayer de ré-écrire tout ça :D
greg1922 Posté(e) le 7 juin 2016 Auteur Posté(e) le 7 juin 2016 Finalement j'ai simplifié la ligne en visual lisp en déclarant au préalable le calque que je souhaite courant ce qui donne :(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "xplode P G A \r") Le soucis c'est que ça ne marche toujours pas et je ne comprend pas du tout pourquoi ... Mon lisp marche ! mais en 2 parties ! Première partie : (defun c:copiesurcharges (/ calque1 calque2 calque3 calque4 liste1 clos calque5 calque6 calque7 liste2 modif2 jeusel e ); Déclaration de toutes les variables (vl-load-com) ;sert à charger les fonctions Visual LISP ;INITIALISATION (c:initialisation); lancement du programme de réccupération des paramètres d'AutoCaD ;CREATION DU CALQUE "STR - SURCHARGE" SI NECESSAIRE (if (not (tblsearch "layer" "STR - SURCHARGE")) ;vérification de l'existant d'un calque "STR - SURCHARGE" (command "-calque" "n" "STR - SURCHARGE" "CO" "11" "STR - SURCHARGE" "tl" "CACHE" "STR - SURCHARGE" "ep" "0.00" "STR - SURCHARGE" "")) ;Création du claque "STR - SURCHARGE" si il n'existe pas ;RENDRE LE CALQUE "STR - SURCHARGE" COURANT (setvar "clayer" "STR - SURCHARGE") ;CREATION D'UNE PREMIERE LISTE DES CALQUES IMPLIQUES (SANS BLOCS) (setq calque1 "STR - VOILE") (setq calque2 "STR - VOILE HACHURE") (setq calque3 "STR - MACONNERIE") (setq calque4 "STR - MACONNERIE HACHU") (setq liste1 (strcat calque1 "," calque2 "," calque3 "," calque4));Déclaration d'une première liste "liste1" ;VERIFICATION DES POLYLIGNES (CLOSES) (setq clos (list (cons 8 liste1))) ;Création d'une séléction de tous les éléments des calques de la liste1 (8 = nom des calques ) (ssget "X" clos) ;X = clos (command "_.pedit" "m" "p" "" "o" "j" "0.00" "c" "") ;Tous les potentielles lignes présentes deviennent des polylignes et sont fermées ;MODIFICATION DES PARAMETRES DES CALQUES DE LA LISTE 1 (setq modif1 (list (cons 8 liste1))) ;Ajout à la liste 1 de sélection un paramètre (8 = nom des calques) (ssget "X" clos) ;X = clos (command "_copytolayer" "p" "" "STR - SURCHARGE" "0,0" "0,0") ;Copie de tous les éléments de la liste 1 dans un calque unique "STR - SURCHARGE" ;CREATION D'UNE SECONDE LISTE DES CALQUES IMPLIQUES (AVEC BLOCS) (setq calque5 "STR - LINTEAU") (setq calque6 "STR - POTEAUX") (setq calque7 "STR - LONGRINE") (setq liste2 (strcat calque5 "," calque6 "," calque7));Déclaration d'une seconde liste "liste2" ;MODIFICATION DES PARAMETRES DES CALQUES DE LA LISTE2 (setq modif2 (list (cons 8 liste2))) ;Ajout à la liste2 de sélection un paramètre (8 = nom des calques) (ssget "X" modif2) ;X = modif2 (command "_copytolayer" "p" "" "STR - SURCHARGE" "0,0" "0,0") ;Copie de tous les éléments dans un calque unique "STR - SURCHARGE" (setq jeusel (ssget "X" (list (cons 8 "STR - SURCHARGE")))) (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "xplode P G A \r");Fonction Visual LISP, "xplode" = décomposition de blocs vers un calque. ;RESTAURATION (c:restauration) (princ) ;FIN DE LA FONCTION ) Seconde partie: (defun c:testautocad (/ jeusel1 jeusel2 jeusel3 jeusel4) (c:initialisation) (setq jeusel1 (ssget "X" (list (cons 0 "ATTDEF") (cons 8 "STR - SURCHARGE")))) (command "_.erase" jeusel1 "") (setq jeusel2 (ssget "X" (list (cons 8 "STR - SURCHARGE") (cons 0 "HATCH")))) (command "_.erase" jeusel2 "") (setq jeusel3 (ssget "X" (list (cons 8 "STR - SURCHARGE")))) (command "_.pedit" "m" "p" "" "o" "j" "0.00" "c" "") (setq jeusel4 (ssget "X" (list (cons 8 "STR - SURCHARGE")))) (command "-fhach" "S" "p" "" "CA" "STR - SURCHARGE HACHU" "P" "DOTS" "0.05" "0" "T" "P" "COU" "." "." "") (c:restauration) (princ) ) Mais si je les fusionne en un seul lisp, la commande xplode ne s’exécute pas. D'ailleurs, j'ai l'impression qu'elle s'éxécute en fin de lisp alors qu'elle ne devrait pas... Bizarre Résultat après la fusion des 2 lisp : Commande: COPIESURCHARGES 90 objets copiés et placés sur le calque "STR - SURCHARGE". 64 objets copiés et placés sur le calque "STR - SURCHARGE". Commande inconnue "COPIESURCHARGES". Appuyez sur F1 pour obtenir de l'aide. Impossible de hachurer la zone. Impossible de hachurer la zone. [...] Impossible de hachurer la zone. Impossible de hachurer la zone. Impossible de hachurer la zone. -typeligne Type de ligne courant: "DuCalque" Entrez une option [?/CRéer/CHarger/Actuel]: a Spécifiez le nom du type de ligne ou [?] <DuCalque>: Entrez une option [?/CRéer/CHarger/Actuel]: Commande: Commande: xplode Choix des objets à traiter avec la commande Xplode. Sélectionner des objets: P Pas de jeu de sélection précédent. Sélectionner des objets: Commande: Commande: G Commande inconnue "G". Appuyez sur F1 pour obtenir de l'aide. Commande: A ARC Spécifiez le point de départ de l'arc ou [Centre]: Pas de ligne ou d'arc pour continuer. *Incorrect* En tout cas merci pour tout, en parallèle je travaille sur une DCL simple qui donne le choix de copier ou couper la sélection pour voir un peu tout du lisp ;)
greg1922 Posté(e) le 8 juin 2016 Auteur Posté(e) le 8 juin 2016 Bon ,mon lisp marche niquel, mais en 2 parties .. Pas grave, il faudra appuyer sur 2 boutons au lieu d'un ahah. Par contre, j'ai une question concernant les dcl ! J'ai pas mal bosser dessus hier et ce matin, mais dés que je clique sur copier ou couper ou même annuler, Autocad plante et il ne me reste qu'à faire un ctrl+alt+supp pour réouvrir mon dessin. Quel est selon vous l'erreur que j'ai pu commettre ? merci ! ;----------------Boite DCL------------------------ (defun c:boitedcl (/ dcl_id) (if(not(setq dcl_id (load_dialog "selection.dcl"))) ;chargement de la boite DCL (progn (alert "le fichier DCL n'a pu être chargé correctement !") ; message d'erreur si la boite est introuvable (exit); ferme la boite DCL si erreur ) (progn (if (not (new_dialog "select" dcl_id)); commence la lecture du fichier DCL par la définiton "select" (progn (alert "le nom du DCL ne coïncide pas!");Message d'erreur si la définiton inscrite dans le fichier DCL n'est pas "select" (exit); ferme la boite DCL si erreur ) (progn ; Une fois toutes vérifications faites, on peut affecter les commandes aux boutons (action_tile "copier" "(copieselection)") ;lance la fonction copier (action_tile "couper" "(couperselection)") ;lance la fonction couper (action_tile "cancel" "(done_dialog)") ;annuler (unload_dialog dcl_id) ;décharge la boite de dialogue une fois terminé ) ) ) ) (c:restauration); Restaure les paramètres d'autoCaD avant le lancement du programme (princ); évite NIL ;FIN DE LA FONCTION ) ;________________________________________COMMANDE COPIER__________________________________________ (defun copieselection (/ sel1) (setq sel1 (ssget "X" (list (cons 8 "STR - SURCHARGE HACHU")))) ;Sélection des éléments des calques "STR - SURCHARGE" et "STR - SURCHARGE HACHU" (command "_copybase" "0,0" seL1 "") ;copie de la sélection ) ;________________________________________COMMANDE COUPER__________________________________________ (defun couperselection (/ sel2) (setq sel2 (ssget "X" (list (cons 8 "STR - SURCHARGE HACHU")))) ;Sélection des éléments des calques "STR - SURCHARGE" et "STR - SURCHARGE HACHU" (command "_copybase" "0,0" sel2 "") ;copie de la sélection (command "_.erase" sel2 "") ;supprime la selection du dessin courant ) ;_________________________________________________________________________________________________
Patrick_35 Posté(e) le 8 juin 2016 Posté(e) le 8 juin 2016 Salut Il faut fermer la boite de dialogue avant de lancer un (command ...) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant