Big666 Posté(e) le 8 août 2013 Posté(e) le 8 août 2013 Bonjour J’ai un peut adapter le lisp pline_ block. le nom de la pièce est en 1erl’aire passe en 2emela longueur en 3emej’ai rajouté dans le block-pline bloc HSP (attribut)et n° de pièce (attribut)remplacer le raccourci de lisp par sf pour surface Cependant : Le champ aire affiche aire de la pièce par rapport à la polyligne et affiche exemple 100 pour 100m² Je voudrais rajouter surface : 100 m² Il y a ca dans le lisp. Area \\f \"%lu2%pr2%ct8[1e-0]\">%" Je lès remplacé par ca. Area \f "%lu2%pr2%ps[surface : ,m²]">% Mais ca ne fonctionne pas. Pour l’instant j’ai un texte devant et derrière chaque champ aire et long. Que dois-je faire pour arriver à mes fins. Merci. ;;; sf -Gilles Chanteau- 13/04/07 ;;; Insère le bloc "sf" 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:sf (/ AcDoc Space bloc nom ent obj ins op reg ech id long aire ref) (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) ) ) (if (or (tblsearch "BLOCK" (setq bloc "sf")) (findfile (setq bloc "sf.dwg")) ) (progn ;; attribut "nom de la pièce" (if (not (setq nom (getname "Nom de la pièce"))) (setq nom "") ) (while (not (setq ent (car (entsel))))) (setq obj (vlax-ename->vla-object ent)) (if (= "AcDbPolyline" (vla-get-ObjectName obj)) (progn (if (not (setq ins (getpoint "\nSpécifiez le point d'insertion ou < Centre >: " ) ) ) (progn (if (= (vla-get-closed obj) :vlax-false) (progn (vla-put-closed obj :vlax-true) (setq op T) ) ) (setq reg (vlax-invoke space 'addRegion (list obj)) ins (vlax-get (car reg) 'Centroid) ) (if op (vla-put-closed obj :vlax-false) ) (vla-delete (car reg)) ) ) (if (not (vlax-ldata-get "sf" "ech")) (vlax-ldata-put "sf" "ech" 3) ) (if (not (setq ech (getreal (strcat "\nEntrez le facteur d'échelle <" (rtos (vlax-ldata-get "sf" "ech")) ">: " ) ) ) ) (setq ech (vlax-ldata-get "sf" "ech")) (vlax-ldata-put "sf" "ech" ech) ) (setq id (vla-get-ObjectID obj) ;; Attribut périmètre (mm² -> m²) aire (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Area \\f \"%lu2%pr2%ct8[1e-0]\">%" ) ;; Attribut surface (mm -> m) long (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Length \\f \"%lu2%pr2%ct8[1.00]\">%" ) ) (setq ref (vla-InsertBlock Space (vlax-3d-point (trans ins 1 0)) bloc ech ech 1 (angle '(0 0 0) (trans (getvar 'ucsxdir) 0 (trans '(0 0 1) 1 0 T))) ) ) ;; attribution de leur valeur aux attributs (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom aire long) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"sf\" est introuvable.") ) (princ) ) ] Nous vivons tous dans le ventre d'un chien géantTout le monde le sait mais personne ne dit rien du tout ultra Vomit
VDH-Bruno Posté(e) le 8 août 2013 Posté(e) le 8 août 2013 Bonjour, Je voudrais rajouter surface : 100 m² Si tu ne veux pas coder en dur tu peux les déclarer dans des variables(setq prefixe "surface: " suffixe " m²") Puis il suffit de les concaténer à la valeur de ton champ.;; Attribut surface (mm² -> m²) aire (strcat prefixe "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Area \\f \"%lu2%pr2%ct8[1]\">%" suffixe ) A+ Apprendre => Prendre => Rendre
Big666 Posté(e) le 8 août 2013 Auteur Posté(e) le 8 août 2013 ça ne fonctionne pas mais c'est surement de ma faute. ;;; sf -Gilles Chanteau- 13/04/07 ;;; Insère le bloc "sf" 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:sf (/ AcDoc Space bloc nom ent obj ins op reg ech id long aire ref) (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) ) ) (if (or (tblsearch "BLOCK" (setq bloc "sf")) (findfile (setq bloc "sf.dwg")) ) (progn ;; attribut "nom de la pièce" (if (not (setq nom (getname "Nom de la pièce"))) (setq nom "") ) (while (not (setq ent (car (entsel))))) (setq obj (vlax-ename->vla-object ent)) (if (= "AcDbPolyline" (vla-get-ObjectName obj)) (progn (if (not (setq ins (getpoint "\nSpécifiez le point d'insertion ou < Centre >: " ) ) ) (progn (if (= (vla-get-closed obj) :vlax-false) (progn (vla-put-closed obj :vlax-true) (setq op T) ) ) (setq reg (vlax-invoke space 'addRegion (list obj)) ins (vlax-get (car reg) 'Centroid) ) (if op (vla-put-closed obj :vlax-false) ) (vla-delete (car reg)) ) ) (if (not (vlax-ldata-get "sf" "ech")) (vlax-ldata-put "sf" "ech" 3) ) (if (not (setq ech (getreal (strcat "\nEntrez le facteur d'échelle <" (rtos (vlax-ldata-get "sf" "ech")) ">: " ) ) ) ) (setq ech (vlax-ldata-get "sf" "ech")) (vlax-ldata-put "sf" "ech" ech) ) (setq id (vla-get-ObjectID obj) (setq prefixe "surface: " suffixe " m²") ;; Attribut périmètre (mm² -> m²) aire (strcat prefixe "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Area \\f \"%lu2%pr2%ct8[1e-0]\">%" suffixe ) (setq prefixe "Perimétre: " suffixe " ml") ;; Attribut surface (mm -> m) long (strcat prefixe "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Length \\f \"%lu2%pr2%ct8[1.00]\">%" suffixe ) ) (setq ref (vla-InsertBlock Space (vlax-3d-point (trans ins 1 0)) bloc ech ech 1 (angle '(0 0 0) (trans (getvar 'ucsxdir) 0 (trans '(0 0 1) 1 0 T))) ) ) ;; attribution de leur valeur aux attributs (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom aire long) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"sf\" est introuvable.") ) (princ) ) Nous vivons tous dans le ventre d'un chien géantTout le monde le sait mais personne ne dit rien du tout ultra Vomit
VDH-Bruno Posté(e) le 8 août 2013 Posté(e) le 8 août 2013 Re,ça ne fonctionne pas mais c'est surement de ma faute. Rien de bien méchant un problème de parenthèses, tu as juste imbriqué les lignes du setq donné en exemple dans le setq de l’ID, soit tu paramètre ton préfixe ou suffixe avant ou tu supprime le setq et ses parenthèses ou tu les codes directement dans le strcat comme ceci.. Le code en exemple pour tester:(defun c:sf (/ AcDoc Space bloc nom ent obj ins op reg ech id long aire ref) (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) ) ) (if (or (tblsearch "BLOCK" (setq bloc "sf")) (findfile (setq bloc "sf.dwg"))) (progn ;; attribut "nom de la pièce" (if (not (setq nom (getname "Nom de la pièce"))) (setq nom "") ) (while (not (setq ent (car (entsel))))) (setq obj (vlax-ename->vla-object ent)) (if (= "AcDbPolyline" (vla-get-ObjectName obj)) (progn (if (not (setq ins (getpoint "\nSpécifiez le point d'insertion ou < Centre >: "))) (progn (if (= (vla-get-closed obj) :vlax-false) (progn (vla-put-closed obj :vlax-true) (setq op T)) ) (setq reg (vlax-invoke space 'addRegion (list obj)) ins (vlax-get (car reg) 'Centroid) ) (if op (vla-put-closed obj :vlax-false) ) (vla-delete (car reg)) ) ) (if (not (vlax-ldata-get "sf" "ech")) (vlax-ldata-put "sf" "ech" 3) ) (if (not (setq ech (getreal (strcat "\nEntrez le facteur d'échelle <" (rtos (vlax-ldata-get "sf" "ech")) ">: "))) ) (setq ech (vlax-ldata-get "sf" "ech")) (vlax-ldata-put "sf" "ech" ech) ) (setq id (vla-get-ObjectID obj) ;; Attribut périmètre (mm² -> m²) aire (strcat "surface: " "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Area \\f \"%lu2%pr2%ct8[1e-0]\">%" " m²" ) ;; Attribut surface (mm -> m) long (strcat "Perimétre: " "%<\\AcObjProp Object(%<\\_ObjId " (itoa id) ">%).Length \\f \"%lu2%pr2%ct8[1.00]\">%" " ml" ) ) (setq ref (vla-InsertBlock Space (vlax-3d-point (trans ins 1 0)) bloc ech ech 1 (angle '(0 0 0) (trans (getvar 'ucsxdir) 0 (trans '(0 0 1) 1 0 T))) ) ) ;; attribution de leur valeur aux attributs (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom aire long) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"sf\" est introuvable.") ) (princ) ) (Ps1 : Attention les commentaires périmètre et surface ne sont pas en phase avec la ligne de code correspondant) (Ps2 : J’ai également adapté quelques routines très célèbre (écrite par Patrick_35, (gile), BonusCAD etc. ..) à mes propres besoins. Par convention il est d’usage de changer le nom de l’auteur (mieux citer la routine originale dont on s’est inspiré ainsi que son auteur), mais laisser l’entête tel quel pourrait être une source de confusion pour d’autres utilisateurs) Bonne continuation, A+ Apprendre => Prendre => Rendre
Big666 Posté(e) le 9 août 2013 Auteur Posté(e) le 9 août 2013 CA fonctionne pour avoir chercher longtemps , merci pour ton aide.pour tes remarques .(Ps2 : J’ai également adapté quelques routines très célèbre (écrite par Patrick_35, (gile), BonusCAD etc. ..) à mes propres besoins. Par convention il est d’usage de changer le nom de l’auteur (mieux citer la routine originale dont on s’est inspiré ainsi que son auteur), mais laisser l’entête tel quel pourrait être une source de confusion pour d’autres utilisateurs)/quote] Nous vivons tous dans le ventre d'un chien géantTout le monde le sait mais personne ne dit rien du tout ultra Vomit
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