Squelet Posté(e) le 27 mars 2007 Posté(e) le 27 mars 2007 Salut les Lispeurs et Lispeuses, Ja viens de me mettre au Lisp, et j'aimerais apporter une petite modif sur une routine que le [surligneur]Seigneur (gile)[/surligneur] avait créé en septembre dernier, et qu'il vient d'adapté à mon cas.Mais ne voulant pas monopoliser son temps, sa gentillesse, et ces compétences, je me permets de vous soumettre ce que je souhaiterais faire : Donc, cette routine créé un bloc avec trois attributs, après avoir sélectionné une polyligne 3D.Le premier attibut est renseigné par une invite dans la ligne de commande (Zone de pose ?), et le deuxième attribut reprend la longueur 3D de la poly en question. Le troisième attribut est prédéfini avec l'unité de mesure (ml), en vue d'un export sur Excel. J'aimerais pouvoir rajouter un quatrième attribut (et oui, on en a jamais assez), qui reprendrai le nom du calque de la polyligne sélectionnée !Est-ce que c'est possible ? Voilà la routine en question : ;;; Insère le bloc "aha_bloc_metre_long" après sélection d'une polyligne 3D ;;; Attribut 1 : Zone de pose ;;; Attribut 2 : Longueur de la polyligne 3D (defun c:pml3d (/ AcDoc Space bloc nom ent aire long ins) (vl-load-com) (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 "aha_bloc_metre_long"))) ((findfile (setq bloc "aha_bloc_metre_long.dwg"))) (T (setq bloc nil)) ) (if bloc (progn (while (not (setq ent (car (entsel))))) (if (and (= (cdr (assoc 0 (entget ent))) "POLYLINE") (= (logand (cdr (assoc 70 (entget ent)))8)8) ) (progn (setq obj (vlax-ename->vla-object ent) id (vla-get-ObjectID obj) long (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Length \\f \"%lu2%pr2%ct8\">%" ) ) (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-InsertBlock Space (vlax-3d-point ins) bloc 1.0 1.0 1.0 0.0 ) ) (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom long) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"aha_bloc_metre_long\" est introuvable.") ) (princ) ) Merci d'avance à tous !Et que le Lisp soit avec vous .... Sur Autocad Map 2005 "Un problème sans solution est un faux problème" Albert Einstein
Bred Posté(e) le 27 mars 2007 Posté(e) le 27 mars 2007 Salutessaye ça (pas sur de moi...) (defun c:pml3d (/ AcDoc Space bloc nom ent aire long ins) (vl-load-com) (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 "aha_bloc_metre_long"))) ((findfile (setq bloc "aha_bloc_metre_long.dwg"))) (T (setq bloc nil)) ) (if bloc (progn (while (not (setq ent (car (entsel))))) (if (and (= (cdr (assoc 0 (entget ent))) "POLYLINE") (= (logand (cdr (assoc 70 (entget ent)))8)8) ) (progn (setq obj (vlax-ename->vla-object ent) id (vla-get-ObjectID obj) long (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Length \\f \"%lu2%pr2%ct8\">%" ) [b]lay (vla-get-layer obj)[/b] ) (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-InsertBlock Space (vlax-3d-point ins) bloc 1.0 1.0 1.0 0.0 ) ) (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom long[b] lay[/b]) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"aha_bloc_metre_long\" est introuvable.") ) (princ) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Squelet Posté(e) le 27 mars 2007 Auteur Posté(e) le 27 mars 2007 essaye ça (pas sur de moi...) C'est au poil !C''est encore une fois du grand Bred.Merci. Je ne sais pas ce que je ferais sans CADxp et ces bienfaiteurs. ;) Sur Autocad Map 2005 "Un problème sans solution est un faux problème" Albert Einstein
Bred Posté(e) le 27 mars 2007 Posté(e) le 27 mars 2007 Ouh là !C''est encore une fois du grand Bred.... c'est gentil mais je commence juste à me sentir un peu à l'aise.... et grâce entre autre à la personne que tu sites précedement...Donc c'est une double congratulation pour (gile) !merci. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 27 mars 2007 Posté(e) le 27 mars 2007 Pour Squelet, Tu trouveras ici un sujet sur le mode d'emploi de pline_block qui devrait te permettre de modifier le code selon tes besoins.Sinon, en faisant une recherche dans les forums avec "pline_block" tu devrais trouver pusieurs messages qui répondent à des désirs spécifiques. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Squelet Posté(e) le 27 mars 2007 Auteur Posté(e) le 27 mars 2007 Ok, et merci à tous les deux.je vais de ce pas aller voir ton lien. :yltype: Sur Autocad Map 2005 "Un problème sans solution est un faux problème" Albert Einstein
zebulon_ Posté(e) le 28 mars 2007 Posté(e) le 28 mars 2007 Bonjour, long (strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa id)">%).Length \\f \"%lu2%pr2%ct8\">%") la variable long est définie comme une entité qui évolue en fonction de l'évolution de la polyligne sélectionnée. Si elle change de longueur, la valeur de l'attribut change aussi. Et c'est ça qui est fort. lay (vla-get-layer obj) par contre le contenu de la variable lay est défini une fois pour toute. C'est dommage puisqu'on pourrait construire quelque chose d'associatif sur le modèle de ce qui a été fait pour la variable long Quelque chose du style : lay (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Layer>%" (Regarde la commande champ, ça te donne une bonne idée de ce qui est possible de faire en la matière. En plus, elle affiche la codification, un peu compliquée d'ailleurs, qu'il suffit de copier) Tu changes le calque de la polyligne, l'attribut change aussi. Tant qu'à faire... AmicalementZebulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
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