Aller au contenu

pline_block


pieloult

Messages recommandés

bonjour

 

j'essaie pline_blovk et il ne veut pas de ma polyligne

 

je suis en Autodesk Architectural Desktop 2008 j'ai créé ma polyligne avec la commande polyligne j'ai essayé aussi avec une polyligne créée avec pedit pariel il veut

 

par contre avec un rectangle créé par la commande ça marche reste à voir le paramétrage de l'échelle

 

 

qqun peut m'aider

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Pline_bloc ne fonctionne qu'avec les polylignes "optimisées" (LWPOLYLINE).

Si la variable PLINETYPE est à 0, la commande POLYLIGN (_PLINE) crée des polylignes 2d (ancien format).

Il faut mettre PLINETYPE à 2.

Tu peux convertir les polylignes 2d en polyligne optimisées avec la commande CONVERT.

 

PS : tu peux aussi essayer TotalArea (plus polyvalent) sur cette page.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Ah le super Pline_bloc :D

Bonjour (gile),

 

J'ai trouvé pour mon travail une application efficace de Pline_bloc

Et franchement ça m'a fait gagné un temps fou.

Bravo pour ta contribution à CadXp

 

Mais… forcement il y a toujours un mais…

 

Les blocs s'ont insérés en SCG quelque soit le SCU utilisé.

Serait'il possible d'insérer Pline_bloc dans le SCU courant ?

 

Merci.

 

Lien vers le commentaire
Partager sur d’autres sites

c'est vrai que c'est super

 

mais j'ai encore une question à l'ouverture du programme on peut indiquer une pièce

 

pourrait on aussi indiquer la hauteur de celle ci pour lui faire calculer la surface de mur ?

 

car j'utile beaucoup un outil de REBCAO voir le lien http:// http://www.cadxp.com/sujetXForum-6436.htm pour faire une extraction vers excel des données d'un bloc pour mes métrés

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup, impeccable.

 

J'ai eu le même problème de SCU, il y a qq temps avec un autre de tes Lisp

(dont j'ai oublié le nom)

En comparant les 2 Pline_block, j'essaierais de faire la même modif.

 

Ps : j'ai ramé pendant ½ heure pour faire marcher cette nouvelle version

Forcement, je tapais Pline_Bloc sans le K. :P

 

Ps2 :

(pense à nettoyer le cache du navigateur).

C'est le genre de phrase qui me laisse toujours perplexe. :casstet:

 

Encore merci, Alain.

 

Lien vers le commentaire
Partager sur d’autres sites

j'ai suivi ton conseil

 

j'ai modifié le bloc en ajoutant 2 attributs hauteur et surf_mur, j'ai modifié ton code

 
;;; Pline_block -Gilles Chanteau- 13/04/07
;;; 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 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 "Pline_block"))
(findfile (setq bloc "Pline_block.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 "Pline_block" "ech"))
    (vlax-ldata-put "Pline_block" "ech" 1)
  )
  (if (not (setq
	     ech
	      (getreal
		(strcat	"\nEntrez le facteur d'échelle <"
			(rtos (vlax-ldata-get "Pline_block" "ech"))
			">: "
		)
	      )
	   )
      )
    (setq ech (vlax-ldata-get "Pline_block" "ech"))
    (vlax-ldata-put "Pline_block" "ech" ech)
  )
  (setq	id   (vla-get-ObjectID obj)

	;; Attribut périmètre (mm -> m)
	long (strcat "%<\\AcObjProp Object(%<\\_ObjId "
		     (itoa id)
		     ">%).Length \\f \"%lu2%pr2%ct8[1]\">%"
	     )

	;; Attribut surface (mm² -> m²)
	aire (strcat "%<\\AcObjProp Object(%<\\_ObjId "
		     (itoa id)
		     ">%).Area \\f \"%lu2%pr2%ct8[1]\">%"
	     )
  )

[surligneur] 	  (setq ht (getreal "\nHauteur du local <2.5m>"))
  (if (= ht nil) (setq ht 2.5))
  (setq surf_mur (* long ht))[/surligneur]

  (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 long aire ht surf_mur)
  )

  (vla-regen AcDoc acActiveViewport)
)
(alert "L'objet sélectionné n'est pas une polyligne.")
     )
   )
   (alert "Le bloc \"Pline_block\" est introuvable.")
 )
 (princ)
)

 

 

et j'ai une erreur

Commande: pline_block

 

Choix de l'objet:

Spécifiez le point d'insertion ou < Centre >:

 

Entrez le facteur d'échelle <1>:

 

Hauteur du local <2.5m>

; erreur: type d'argument incorrect: numberp: "%<\\AcObjProp Object(%<\\_ObjId

2105840512>%).Length \\f \"%lu2%pr2%ct8[1]\">%"

 

 

c'est quoi l'erreur?

 

Lien vers le commentaire
Partager sur d’autres sites

En comparant les 2 Pline_block, j'essaierais de faire la même modif.

J'étais vraiment présomptueux de penser pouvoir réaliser cela.

Je ne vois pas du tout où est la modif SCG/SCU

 

Ci-joint le pline_block que j'utilise.(sans boite DCL)

 

;;; Pline_bloc -Gilles Chanteau- 13/09/06

;;; Insère le bloc "pline_block" après sélection d'une polyligne

;;; Attribut 1 : Nom de la pièce

;;; Attribut 2 : 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)

aire (strcat "%<\\AcObjProp Object(%<\\_ObjId "

(itoa id)

">%).Area \\f \"%lu2%pr0%ct8[1]\">%"

 

)

)

(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 aire)

)

(vla-regen AcDoc acActiveViewport)

)

(alert "L'objet sélectionné n'est pas une polyligne.")

)

)

(alert "Le bloc \"Pline_block\" est introuvable.")

)

(princ)

)

 

 

Lien vers le commentaire
Partager sur d’autres sites

Kallain,

 

Pour qu'un bloc s'insère suivant la rotation 2d (sur Z) du SCU courant, il faut spécifier une rotation comme ça au moment de l'insertion:

(vla-InsertBlock
 Space
 (vlax-3d-point (trans ins 1 0))
 bloc
 ech
 ech
 1
 [surligneur](angle '(0 0 0) (trans (getvar 'ucsxdir) 0 (trans '(0 0 1) 1 0 T)))[/surligneur]
)

 

Nettoyer le cache du navigateur : quand on télécharge quelque chose, le navigateur (IE, firefox...) conserve en mémoire le téléchargement (dans le cache) si on refait le même téléchargement (même url) le navigateur cherche d'abord dans le cache. Donc, pour être sûr de télécharger une nouvelle version, il ne faut pas que l'url soit dans le cache.

 

pielout,

 

C'est bien d'essayer de modifier le LISP.

Tu as cette erreur parce que la variable long ne contient pas un nombre mais un code de champ (chaîne de caractère). d'ailleurs, les attributs sont toujours des chaines donc ton ht n'aurait pas fonctionné non plus.

J'ai essayé de faire quelque chose de plus filou, j'ai mis un code de champ dans la variable surf_mur (formule) comme ça cet attribut aussi est "dynamique" si la polyligne est modifiée.

 

(defun c:pline_block (/ 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 "Pline_block"))
(findfile (setq bloc "Pline_block.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 : "
	   )
	)
      )
    (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 "Pline_block" "ech"))
    (vlax-ldata-put "Pline_block" "ech" 1)
  )
  (if (not (setq
	     ech
	      (getreal
		(strcat	"\nEntrez le facteur d'échelle 				(rtos (vlax-ldata-get "Pline_block" "ech"))
			">: "
		)
	      )
	   )
      )
    (setq ech (vlax-ldata-get "Pline_block" "ech"))
    (vlax-ldata-put "Pline_block" "ech" ech)
  )
  (setq	id   (vla-get-ObjectID obj)

	;; Attribut périmètre (mm -> m)
	long (strcat "%			     (itoa id)
		     ">%).Length \\f \"%lu2%pr2%ct8[1]\">%"
	     )

	;; Attribut surface au sol (mm² -> m²)
	aire (strcat "%			     (itoa id)
		     ">%).Area \\f \"%lu2%pr2%ct8[1]\">%"
	     )

              [surligneur] ;; Attribut hauteur (m)
               ht (if (setq ht (getreal "\nHauteur du local : "))
                    (rtos ht 2 2)
                    "2.50"
                    )[/surligneur]

              [surligneur] ;; Attribut surface murs
               surf_mur (strcat "%%")[/surligneur]
  )

 	  (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 long aire ht surf_mur)
  )
         
  (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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Salut Gilles,

 

Je viens de tester la dernière mouture de pline_block et j'ai trois remarques :

 

1) Je ne peux pas utiliser l'option [surligneur] C[/surligneur]entre =>

 

Spécifiez le point d'insertion ou : c

Point incorrect.

 

C'était déjà peut-être vrai avant, (M'en rappelle plus,...)

 

2) Lorsque je rentre, par exemple 2.00 pour la hauteur de plan, j'ai à l'affichage de l'attribut => 2

 

(Peut-être plus lié à mon bloc, pourtant l'affichage du reste est oK !)

 

3) Lorsque l'on modifie l'attribut (_eattedit) de la hauteur sous plafond, l'attribut "surface de murs) ne se met pas à jour après un régen (ou même "Mise à jour de champs).

 

Tu vas me dire, ce n'est pas super long de reposer le bloc,..

 

As-tu une idée ?

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Salut Lilian,

 

Il faut faire Entrée pour valider "Centre".

 

Le champ pour la surface de mur est lié au champ "Longueur" et à la valeur de l'attribut hauteur qui n'est pas un champ.

Donc, comme je disais plus haut le champ Surface de mur est dynamique par rapport au périmètre de la polyligne.

Je n'arrive pas à récupérer dans le champ d'un attribut la valeur d'un autre attribut du même bloc.

Il faut donc refaire une insertion si la hauteur change...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Il faut faire Entrée pour valider "Centre".

 

Ben, j'suis idiot moi ou quoi, pourquoi je tape "C" alors que c'est la valeur par défaut,...

 

Désolé, ;)

 

2) Lorsque je rentre, par exemple 2.00 pour la hauteur de plan, j'ai à l'affichage de l'attribut => 2

 

Est-ce du à mon attribut de bloc bloc ? Pourtant c'es oK pour les autres,... Là, je ne voit pas ! :mad:

 

Merci encore,

 

PS:

Je n'arrive pas à récupérer dans le champ d'un attribut la valeur d'un autre attribut du même bloc.

 

Vu !

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

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é