axelmartinfr Posté(e) le 24 octobre 2006 Posté(e) le 24 octobre 2006 Bonjour à tous, merci infiniment pour l'aide que vous avez pu m'apporter (certe sans le savoir)jusqu'à présent. Aujourd'hui, un nouveau défi (pour moi, mais certainement pas pour vous). Je souhaite faire une étiquette à attribut renseignée automatiquement lorsqu'on clique sur une ligne ou polyligne. Les renseignements récupérés sont l'aire, la longueur, ou pourquoi pas le nom du calque en plus. Pour ce faire, j'ai récupéré le lisp pline_block accompagné de son bloc type sur ce forum que j'adapte en fonction de mes besoins (renseignements à sous-tirer). Pour rappel "Pline_Block" : [surligneur] ;;; Pline_bloc -Gilles Chanteau- 04/09/06;;; Insère le bloc "pline_block" après sélection d'une polyligne;;; Attribut 1 : Nom de la pièce;;; Attribut 2 : Longueur de la polyligne;;; Attribut 3 : Aire de la polyligne (defun c:pline_block (/ AcDoc Space bloc nom ent aire long ins)(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))Space (if (= (getvar "CVPORT") 1)(vla-get-PaperSpace AcDoc)(vla-get-ModelSpace AcDoc)))(cond((tblsearch "BLOCK" (setq bloc "Pline_block")))((findfile (setq bloc "Pline_block.dwg")))(T (setq bloc nil)))(if bloc(progn(while (not (setq ent (car (entsel)))))(if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")(progn(setq obj (vlax-ename->vla-object ent)id (vla-get-ObjectID obj)long (strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa id)">%).Length>%")aire (strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa id)">%).Area \\f \"%lu6%qf1\">%"))(initget 1)(setq nom (getstring T "\nNom de la pièce: "))(initget 1)(setq ins (trans (getpoint "\nPoint d'insertion: ") 1 0))(setq ref(vla-InsertBlockSpace(vlax-3d-point ins)bloc1.01.01.00.0))(mapcar '(lambda (x y) (vla-put-TextString x y))(vlax-invoke ref 'GetAttributes)(list nom long aire))(vla-regen AcDoc acActiveViewport))(alert "L'objet sélectionné n'est pas une polyligne.")))(alert "Le bloc \"Pline_block\" est introuvable."))(princ)) [/surligneur] Le problème se présente au moment ou j'insère le bloc. En effet celui-ci se met toujours avec la même rotation. La question est donc la suivante, peut-on m'aider à modifier le lisp pour q'au moment de choisir le pooint d'insertion du bloc, je puisse également choisir son angle de rotation. Sur ces bonnes paroles, merci d'avance pour le temps consacré.
(gile) Posté(e) le 24 octobre 2006 Posté(e) le 24 octobre 2006 Salut, Voici une version avec possibilité de spécifier un angle de rotation (0.00 si ENTER, espace ou clic droit) : ;;; Pline_bloc -Gilles Chanteau- 04/09/06 ;;; Insère le bloc "pline_block" après sélection d'une polyligne ;;; Attribut 1 : Nom de la pièce ;;; Attribut 2 : Longueur de la polyligne ;;; Attribut 3 : Aire de la polyligne (defun c:pline_block (/ AcDoc Space bloc nom ent aire long ins) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((tblsearch "BLOCK" (setq bloc "Pline_block"))) ((findfile (setq bloc "Pline_block.dwg"))) (T (setq bloc nil)) ) (if bloc (progn (while (not (setq ent (car (entsel))))) (if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") (progn (setq obj (vlax-ename->vla-object ent) id (vla-get-ObjectID obj) long (strcat "% (itoa id) ">%).Length>%" ) aire (strcat "% (itoa id) ">%).Area \\f \"%lu6%qf1\">%" ) ) (initget 1) (setq nom (getstring T "\nNom de la pièce: ")) (initget 1) (setq ins (getpoint "\nPoint d'insertion: ")) (if (not (setq ang (getorient ins "\nSpécifiez l'angle de rotation : " ) ) ) (setq ang (getvar "ANGBASE")) ) (setq ref (vla-InsertBlock Space (vlax-3d-point (trans ins 1 0)) bloc 1.0 1.0 1.0 ang ) ) (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom long aire) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"Pline_block\" est introuvable.") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
axelmartinfr Posté(e) le 24 octobre 2006 Auteur Posté(e) le 24 octobre 2006 merci pour ta rapidité, je vais l'essayer de suite
axelmartinfr Posté(e) le 24 octobre 2006 Auteur Posté(e) le 24 octobre 2006 y'a pas à dire, trop fort. J'espère avoir l'occasion de te renvoyer l'appareil (vu mes connaissance en lisp, ca va être dur tout de même). Merci A+
Ladinde Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Bonjour, Je suis intêrressé par votre LISP mais je suis complètement nul dans ce domaine et je ne sais pas comment récupéré le texte affiché et dans quel logiciel faire cela, si l'un de vous deux pouvait me l'envoyer par mail à : rousset.francis@sade-cgth.fr ou m'expliquer comment faire puor recopier le texte et le transformer en lisp. je vous remercie tout deux par avance. Bonne journée
Oli553 Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Tu copie-colle le texte dans le bloc note de windows et tu enregistre le fichier avec une extension.lsp (enregistrer sous puis "nomfichier.lsp" )dans un répertoire figurant dans la recherche de répertoire support d'autocad. ;) L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
esbe Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Salut je ne connais rien au lisp mais çà je crois que je sais faire tu fais un copier/coller du lisp ds la bloc-note de windows, tu l'enregistre sous avec l'extention .lsp ds le dossier support par exemple d"utocad ou n'importe quel dossier lisp que tu veux mais quetu dois indiquer ds les 'options' d'autocad pour qu'il trouve le chemin.. ds ton fichier tu tapes appload, et tu "charge" le lisp qui doit apparaitre ds la fenetreapres tu tapes la commande du lisp et c'est parti pour faire des merveilles @+
Ladinde Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Re-bonjour Merci pour l'aide ça a marché, mais maintenant j'ai une question aux inventeur de ce lisp, comment ça marche, car lorsque je tape la commande pline_block le lisp m'affiche le message "pline_block introuvable". Que dois je faire ? me manque t'il quelque chose pour faire fonctionner le lisp correctement. Merci d'avance pour vos réponses.
Oli553 Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Le lisp est il bien chargé?Est il enregistré dans un répertoire connu d'autocad? L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
Ladinde Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 J'ai placé le fichier dans un répertoire contenant tous mes blocs mais qui n'a aucun rapport avec autocad. Quel répertoire dois je utiliser à ton avis. Merci
Ladinde Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Question poru axelmartinfr, Est il possible que le lisp affiche les unités en face des données longueur et aire, car il est difficile de différencier les deux surtout lorsque l'on transmet une impression au chargé d'affaire qui n'a pas fait le plan. Merci d'avance pour ta réponse.
Oli553 Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 J'ai placé le fichier dans un répertoire contenant tous mes blocs mais qui n'a aucun rapport avec autocad. Quel répertoire dois je utiliser à ton avis. Merci Dans un répertoire a toi, c'est mieux. Mais tu doit le déclarer dans les option=>fichiers=>Chemin de recherche de fichiers support @+ L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
(gile) Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Salut, le lisp m'affiche le message "pline_block introuvable" Le LISP cherche un bloc nommé "Pline_block" dans la collection du dessin courant, s'il ne le trouve pas il cherche un fichier "Pline_block.dwg" dans le chemin de recherche, et s'il ne le trouve pas non plus, retourne le mesage que tu as eu. Tu dois donc créer un bloc nommé "pline_block" dans le dessin, ou l'enregistrer sous "Pline_block.dwg" avec la commande WBLOC.Ce bloc doit contenir 3 attributs, dans l'ordre : le nom de la pièce, son périmètre et son aire.Je pense qu'il est préférable de mettre les unités sous forme de textes ou d'attributs constants pour n'avoir que des nombres lors d'une éventuelle extraction. Si tu veux que les unités soient des suffixes des attributs, tu peux voir ce sujet Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
vla Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Question pour Gile,Merci de nous dire comment on change la ligne de prérimètre en Mêtre avec selement 2 unités après la virgule?Je n'ai maleureursment pas été capable de faire comme la ligne AREA!merci d'avance. >%).Length>%"
(gile) Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Salut, Tu peux voir ce message où est expliquée la syntaxe des différentes options d'un champ "Longueur". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
vla Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Merci Gile,Je comprend pourquoi cela ne marchait pas, j'avai mis deux // comme devant ''area'' au lieu d'un.
Ladinde Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 Bonjour Gile, J'ai passé le lisp à un collègue et cela ne marche pas sur son micro, une fois tapé pline_block à la ligne de commande il apparaît le message d'erreur suivant : ; erreur: no function definition: VLAX-GET-ACAD- Que cela peut il être d'après toi. Bon après midi
(gile) Posté(e) le 25 octobre 2006 Posté(e) le 25 octobre 2006 C'est un oubli de ma part, pour les version antérieures à 2004 (je crois), il faut ajouter : (vl-load-com) au début du LISP, avant ou juste apès la ligne (defun c:pline_block (/ AcDoc Space bloc nom ent aire long ins) EDIT : Je dis une bétise, le LISP ne peut fonctionner qu'avec une version 2006 ou 2007 (blocs dynamiques). À ma connaisance le chargement des fonctions ActiveX avec (vl-load-com) n'est plus nécessaire avec ces versions. [Edité le 25/10/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Ladinde Posté(e) le 26 octobre 2006 Posté(e) le 26 octobre 2006 Bonjour Gile, Merci pour ta réponse, mais nous travaillons sous dwg 2006, le lisp marche sur mon poste mais pas sur le poste de mon collègue, je pense ce doit être un problème de variable. Le problème peut il venir que lui n'a pas installé les express tools ?? Bonne journée à toutes et tous
(gile) Posté(e) le 26 octobre 2006 Posté(e) le 26 octobre 2006 Essaye en ajoutant (vl-load-com) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Grinouille Posté(e) le 26 octobre 2006 Posté(e) le 26 octobre 2006 Bonjour à tous,(gile) a tout à fait raison, cela fonctionneMerci beaucoup
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