pieloult Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 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
(gile) Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 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
kallain Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 Ah le super Pline_bloc :D Bonjour (gile), J'ai trouvé pour mon travail une application efficace de Pline_blocEt 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.
(gile) Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 Voilà, c'est fait.Tu peux télécharger la nouvelle version (pense à nettoyer le cache du navigateur). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pieloult Posté(e) le 6 novembre 2009 Auteur Posté(e) le 6 novembre 2009 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
(gile) Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 Tu peux toujours ajouter un attribut à ton bloc Pline_block (en dernier) que tu renseignes ensuite. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
kallain Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 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 versionForcement, 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.
pieloult Posté(e) le 6 novembre 2009 Auteur Posté(e) le 6 novembre 2009 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 erreurCommande: 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?
kallain Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 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))
(gile) Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 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
kallain Posté(e) le 6 novembre 2009 Posté(e) le 6 novembre 2009 Merci(gile) pour ces explications claires et présices. A dans 8 jours, je fais le viaduc de la semaine prochaine. Alain
lili2006 Posté(e) le 7 novembre 2009 Posté(e) le 7 novembre 2009 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 : cPoint 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.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 7 novembre 2009 Posté(e) le 7 novembre 2009 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
lili2006 Posté(e) le 7 novembre 2009 Posté(e) le 7 novembre 2009 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.3b https://www.linkedin...3%ABt-95313341/
pieloult Posté(e) le 10 novembre 2009 Auteur Posté(e) le 10 novembre 2009 j'adore, ça marche nickel vous êtes trop efficace merci
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