Aller au contenu

greg1922

Membres
  • Compteur de contenus

    19
  • Inscription

  • Dernière visite

Tout ce qui a été posté par greg1922

  1. merci beaucoup, ça marche B)
  2. Je plante tout pareil, même après avoir mis des (done_dialog) avant le début de chaque commandes : ; Une fois toutes vérifications faites, on peut affecter les commandes aux boutons (action_tile "copier" "(done_dialog)(copieselection)") ;lance la fonction copier (action_tile "couper" "(done_dialog)(couperselection)") ;lance la fonction couper (action_tile "cancel" "(done_dialog)") ;annuler (unload_dialog dcl_id) ;décharge la boite de dialogue une fois terminé Je vous glisse au passage mon fichier dcl : select : dialog { label = "Sélection des surcharges"; : column { label = "Voulez vous copier ou couper la sélection?"; alignment = centered; height = 1; aspect_ratio = 2; : boxed_row { : button { key = "copier"; label = "Copier"; mnemonic = "i"; alignment = centered; width = 5; is_default = true; } : button { key = "couper"; label = "Couper"; mnemonic = "C"; alignment = centered; width = 5; is_default = true; } } : row { : button { key = "cancel"; label = "Annuler"; mnemonic = "A"; alignment = centered; width = 15; is_cancel = true; fixed_width = true; } } } }
  3. ok je vais voir ça, merci
  4. 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 ) ;_________________________________________________________________________________________________
  5. 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 ;)
  6. 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
  7. 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.
  8. 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 )
  9. ç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.
  10. 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 ?
  11. 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")
  12. 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 ?
  13. ok ok merci. Genre -attedit ?
  14. 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 )
  15. 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 :)
  16. 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 ___________________________________________________________________________________________________
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité