Aller au contenu

pline_block


Big666

Messages recommandés

Bonjour

 

 

 

J’ai un peut adapter le lisp pline_ block.

 

 

 

  • le nom de la pièce est en 1er
  • l’aire passe en 2eme
  • la longueur en 3eme
  • j’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éant

Tout le monde le sait mais personne ne dit rien du tout

 

ultra Vomit

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

ç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éant

Tout le monde le sait mais personne ne dit rien du tout

 

ultra Vomit

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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éant

Tout le monde le sait mais personne ne dit rien du tout

 

ultra Vomit

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é