scake Posté(e) le 7 mars 2007 Posté(e) le 7 mars 2007 Bonjour à tous.Un grand merci (gile) pour ce lsp qui me donne de fiers services tous les jours. Je me pose encore une question, pourrait-on disposer d'une fonction LISP de mise à jour de l'aire ? Je m'explique par l'exemple.Je copie un Pline_Block déja rempli (pièces qui se répètent) à l'intérieur de Polylignes, je voudrais pouvoir cliquer sur une de ces polylignes, puis sur le bloc et que cela mette automatiquement à jour le champ "aire". Quelque chose à voir avec cela ? ;;; D'après Pline_bloc -Gilles Chanteau- 29/09/06;;; Modifie l'attribut "aire" du bloc sélectionné;;; Attribut 1 : Référence de la pièce;;; Attribut 2 : Nom de la pièce;;; Attribut 3 : Aire de la polyligne (defun c:clic (/ AcDoc Space bloc nom ent aire nom2 ins ech)(setvar "FIELDDISPLAY" 0);; Pointeurs vers le document actif et l'espace actif(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))Space (if (= (getvar "CVPORT") 1)(vla-get-PaperSpace AcDoc)(vla-get-ModelSpace AcDoc)));; Sélection du bloc(progn (while (not bloc) (setq bloc (car (entsel "\nSélection du bloc : "))) )) (if bloc;; Si le bloc a été trouvé(progn ;; Sélection d'une entité(while (not (setq ent (car (entsel)))))(if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE");; Si l'entité sélectionnée est bien une polyligne(progn;; Traduction de l'entité en objet-vla;; ID de l'objet;; Champ "aire" en m2 pour un dessin en cm(setq obj (vlax-ename->vla-object ent)id (vla-get-ObjectID obj)aire (strcat "%<\\AcObjProp Object(%<\\_ObjId "(itoa id)">%).Area \\f \"%lu2%pr2%ps[, m²]%ct8[0.0001]\">%"));; Entrée du nom -premier attribut-(initget 1)(setq nom (getstring T "\nRéférence de la pièce: "));; Entrée du 2ème nom -second attribut-(initget 1)(setq nom2 (getstring T "\nNom de la pièce: "));; Remplacement de la valeur "Aire" par la nouvelle(mapcar '(lambda (x y) (vla-put-TextString x y))(vlax-invoke ref 'GetAttributes)(list nom nom2 aire));; Régénération de la fenêtre active(vla-regen AcDoc acActiveViewport));; Si l'entité sélectionnée n'est pas une polyligne(alert "Ceci n'est pas une polyligne.")));; Si le bloc n'a pas été trouvé(alert "Bloc \"Aire2\" introuvable."))(princ)) J'ai plusieurs soucis1- Je suis obligé de rentrer de nouveau les 2 premiers attributs de bloc pour que le remplacement de valeur ne se fasse pas au niveau du troisième (aire) 2- C'est plus grave : Ce lisp met à jour l'instance "mère" du bloc et pas l'"enfant" - la copie. Soit exactement l'effet inverse de ce que je recherche ! 3- Après fermeture puis réouverture d'un fichier :La ligne de commande retourne "Erreur: type d'argument incorrect: VLA-OBJECT nil"En cas d'utilisation de ce Lisp . Vous aurez compris que je débute en Lisp ... [Edité le 7/3/2007 par scake]
(gile) Posté(e) le 8 mars 2007 Posté(e) le 8 mars 2007 Salut, Je ne comprends pas bien ta demande, et surtout je ne vois pas l'intérêt de copier et mettre à jour le bloc plutôt que d'en créer un nouveau.D'autant que tu n'utilises pas la dernière version de pline_block avec une petite boite de dialogue pour le nom de la pièce.Tu trouveras cette version ici. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
scake Posté(e) le 8 mars 2007 Auteur Posté(e) le 8 mars 2007 Salut Gilles, merci de me répondre aussi rapidement ! J'utilise bien la dernière version de plinebloc. Les boîtes de dialogue sont très pratique (j'en est rajouté une pour Ref pièce, basé sur ton modèle). Ce dernier lisp (clic) est un juste une tentative mal aboutie d'arriver à mes fins.L'intérët ? J'ai par exemple d'anciens plans avec le même bloc que le nouveau, l'attribut AIRE n'étant pas un champ dynamique.REF PièceNOM PièceAIRE Pièce. Et j'aimerais simplement mettre à jour l'AIRE dynamiquement de chacun avec deux simples clics, 1 sur la polyligne, 1 sur le bloc. C'est pratique aussi qd j'ai 50 chambres sur un mëme étage, même ref, même nom, mais pas forcément même aire. Exemple maison de retraite, caserne ou autre ... Voilà, peut-être ma requète est-elle trop singulière ?
(gile) Posté(e) le 8 mars 2007 Posté(e) le 8 mars 2007 Salut, Ceci devrait répondre à ta demande, je te laisse le soin de modifier le texte du champ (dans l'exemple les mm² sont convertis en m² et il n'y a ni préfixe ni suffixe) (defun c:pb_upd (/ pl bl) (if (and (setq pl (car (entsel "\nSélectionnez la polyligne: "))) (setq pl (vlax-ename->vla-object pl)) (= (vla-get-ObjectName pl) "AcDbPolyline") (setq bl (car (entsel "\nSélectionnez le bloc associé: "))) (setq bl (vlax-ename->vla-object bl)) (= (vla-get-ObjectName bl) "AcDbBlockReference") (= (vla-get-HasAttributes bl) :vlax-true) ) (foreach a (vlax-Invoke bl 'GetAttributes) (if (= (vla-get-TagString a) "AIRE") (progn (vla-put-TextString a (strcat "% (itoa (vla-get-ObjectID pl)) ">%).Area \\f \"%lu2%pr2%ct8[1e-006]\">%" ) ) (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport ) ) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
scake Posté(e) le 8 mars 2007 Auteur Posté(e) le 8 mars 2007 Merci bcp (gile) de répondre à une demande peut-être trop spécifique ... Cela redonne le sourire à un de mes collègues qui s'arrachait les cheveux depuis deux jours ... Testé, ça marche impeccable.
philous2 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Bjr,J'essaie actuellement fe faire un fichier gabarit(dwt) au niveau assainissement TP pour mon boulot.du style buse(type avec longueru automatique pzr bloc dynamique ou attribut) avec à chaque extrémitié différents entités au choix(tete buse, regard, grille,etc...) le tout associé à un étiquette pour le métré automatique.Pour faire ce type de procédé j'aipensé au Lisp Pline_Block ou l'on peut faire à 1ère vue : Blocs avec champs dynamiques ; Etiquettes de métré automatique, etc...J'ai donc ouvert un nouveau fichier inséré le lisp après avoir indiquer répertoire ds chemin la totale quoi, et en voulant faire un essai sur un epolyligne pour savoir longuer j'ai à chaque fois ce message [surligneur] Commande: PLINE_BLOCKChoix de l'objet:Spécifiez le point d'insertion ou < Centre >: _mid deEntrez le facteur d'échelle <5>:Le bloc Pline_block se réfère à lui-même.; erreur: Erreur Automation Référence autonome[/surligneur]J'ai donc un soucis quelque partQuelqu'un peut -il me renseigner à ce sujet.MerciPhil
lili2006 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Bonjour à toutes et tous, Je dirai qu'il ne faut pas que le bloc soit interne à ton gabarit.Supprime le du fichier gabarit et met le fichier "Pline_block.dwg" dans un fichier support.Chez moi, ça fonctionne comme ça ! Bon courage, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
philous2 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Merci de ta réponse, Je viens d'ouvrir un nouveau fichier (acadisio.dwt) la base quoi, je n'ai donc rien aucun bloc.Ce n'est donc pas un fichier gabarit mon répertoire pline_block est bien ds le chemin support.J'ai de nouveau taper la commane"pline_block" après avoir simplemment fait un rectangle. e ttjrs le même message d'erreur. [surligneur] Commande: PLINE_BLOCKChoix de l'objet:Spécifiez le point d'insertion ou < Centre >:Entrez le facteur d'échelle <1>:Le bloc Pline_block se réfère à lui-même.; erreur: Erreur Automation Référence autonome[/surligneur] J'ai donc un soucis.je comprend pas comment le block "pline_block" se référe,nce à lui-m^me sachant que mon fichier de départ était vide. comprend pas vraiment làQd tu parles de " le bloc soit interne à ton gabarit" de quel bloc fais-tu allusion ?
lili2006 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Re, A partir du moment ou tu inséres une fois un fichier dans un dessin avec la commande insérer bloc, celui-ci devient un bloc interne. Tu peux cependant le purger si il n'existe plus dans l'espace de dessin.Pour ton pb, je ne vois pas,... Qd tu parles de " le bloc soit interne à ton gabarit" de quel bloc fais-tu allusion ? Je pale du fichier dessin "Pline_block.dwg" qui devient un bloc interne si tu l'inséres comme écrit ci-dessus On va attendre que ( gile) revienne alors,. Désolé, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
philous2 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Ok pzs de soucis, suis en WE ce soir,COmme tu dis pour les block je sais effectiveemnt qd tu chrage un fois il faut purger apres. mais là mon fichier étant vide car nouveau avec le dwt de base d'acadisio, avec 0 bloc, je ne pige pas vraiment non plus.Autrement un autre petit soucis que je cherche à régler un problème, sais-tu comment virer à l'ouverture d'un fichier une police en shx ça ns arrive souvent avec des boites privés ou des geometres.Les polices shx ceux sont des polices windows non il me semble !Merci d'avanceA+Phil
Patrick_35 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Salut Le bloc Pline_block se réfère à lui-même.En générale, tu as ce message d'erreur quand le nom du dessin courant porte le même nom que le bloc à insérer. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lili2006 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 re, une police en shx ça ns arrive souvent avec des boites privés ou des geometres Ce problème à déjà été évoqué ici. Je crois qu'il y a eu également des réponses, voire des solutions,...Désolé, je n'ai vraiment pas le temps de chercher,... Bon courage. PS: Merci pour tes lumières Patrick_35. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 re, Les polices shx ceux sont des polices windows non il me semble ! Non, ce sont des formes AutoCAD (True Type => Windows), Demande à tes interlocuteurs de te faire passer leurs fichiers avec e-transmit, et là, moins (voire plus) de galère ! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
philous2 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 slt Patrick, J'ai ouvert una utre fichier déjà créé et donc ne portant pas le même nom que le bloc i demJe ne vois pas du tout cela vient je crois que je vais laisser tomberMerci qd même Phil
lili2006 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Re, je crois que je vais laisser tomber, Surtout pas, cette routine est super ! Pas de soucis, (Gile) va répondre,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Salut, La routine Pline_block cherche d'abord s'il existe un block nommé pline_block dans la collection du dessin, si elle ne le trouve pas, elle cherche un fichier .dwg nommé pline_block.dwg dans les répertoires du chemin de recherche. Ne pas oublier que tout fichier dwg inséré dans un autre dessin devient un bloc de la collection de ce dessin. Si tu utilises le fichier pline_block.dwg fourni avec le LISP dans le fichier ZIP en téléchargement, soit tu places ce fichier dans un répertoire du chemin de recherche et il sera chargé dans le dessin au premier appel de la fonction pline_block soit tu insères le fichier (commande INSERER puis Parcourir) dans ton gabarit pour que le bloc appartienne à la collection du gabarit. Sinon tu peux créer ton propre bloc nommé pline_block, il doit juste avoir 3 attributs (correspondants, dans l'ordre, au nom de la pièce, à son périmètre et à son aire) pour fonctionner avec la routine en l'état.Tu peux créer ce bloc directement dans ton gabarit ou faire un WBLOC vers un répertoire du chemin de recherche. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 Re, PS: Merci pour tes lumières Patrick_35. Pour un électricien ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
pierrevigneux Posté(e) le 31 décembre 2010 Posté(e) le 31 décembre 2010 Bonsoir! J'essaie de faire fonctionner le lisp de Gile pline_block, mais un message apparait, comme (le block n'existe pas). Je suis allé sur ta page perso, pour avoir le fichier et winzip me dit que le fichier est inutilsable.Si tu passe par ce forum , j''aimerais stp que tu me le fasse parvenir. Comme application, j'aimerais m'en servir pour identifier des superficies de lotissement. Merci Acadnadien
lili2006 Posté(e) le 1 janvier 2011 Posté(e) le 1 janvier 2011 Bonne année 2011 à toutes et tous, Et comme ceci ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
pierrevigneux Posté(e) le 1 janvier 2011 Posté(e) le 1 janvier 2011 Bonjour et bonne année lili2006 Merci pour le fichier complet, j'ai pas bien saisi pourquoi je suis pas capable d'extraire les bonnes données? Je te donne mon fichier en exemple. http://cjoint.com/?0bbn78pkQNS Acadnadien
lili2006 Posté(e) le 1 janvier 2011 Posté(e) le 1 janvier 2011 Re, Est-ce que c'est ce message que tu as en ligne de commande ? Commande: pline_blockInitialisation...no function definition: GETNAMECommande: Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 1 janvier 2011 Posté(e) le 1 janvier 2011 Re, Dans ce cas, tapes "getname" en ligne de commande, puis relance PLINE_BLOCK PLINE_BLOCKChoix de l'objet:Spécifiez le point d'insertion ou :Entrez le facteur d'échelle :Hauteur du local :Régénération du modèle. Attention, il faut des polylignes et fermées si tu veux les surfaces,...Regardes aussi les unités de dessin depuis le lisp en fonction,...(Je travaille en cm donc pour toi la surface de l'exemple ci-dessous est de 4444 m² et le périmètre de 208 ml) http://img.ahst.fr/data/images/plineblock.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
pierrevigneux Posté(e) le 2 janvier 2011 Posté(e) le 2 janvier 2011 Bonjour lili2006 J'ai refait la commande comme tu me la montré, toujours la même réponse, comme tu as pu le voir sur mon dessin.C'est peut être à cause de la verion Auocad 2004 ? Merci de tes réponses!@+ Acadnadien
lili2006 Posté(e) le 2 janvier 2011 Posté(e) le 2 janvier 2011 Re, Qu'as tu en ligne de commande ? Là s'arrête mes maigres compétences,... (gile), si tu passes par là,... ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 2 janvier 2011 Posté(e) le 2 janvier 2011 Salut, Le ZIP complet ici Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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