Aller au contenu

Messages recommandés

Posté(e)

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 soucis

1- 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]

Posté(e)

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

Posté(e)

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èce

NOM Pièce

AIRE 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 ?

Posté(e)

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

Posté(e)

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.

  • 1 an après...
Posté(e)

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_BLOCK

Choix de l'objet:

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

Entrez 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 part

Quelqu'un peut -il me renseigner à ce sujet.

Merci

Phil

 

 

 

 

 

 

Posté(e)

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_BLOCK

Choix 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 ?

Posté(e)

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/

Posté(e)

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'avance

A+

Phil

 

 

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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/

Posté(e)

slt Patrick,

 

J'ai ouvert una utre fichier déjà créé et donc ne portant pas le même nom que le bloc i dem

Je ne vois pas du tout cela vient je crois que je vais laisser tomber

Merci qd même

 

Phil

Posté(e)

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

  • 2 ans après...
Posté(e)

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

Posté(e)

Re,

 

Dans ce cas, tapes "getname" en ligne de commande, puis relance PLINE_BLOCK

 

PLINE_BLOCK

Choix 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/

Posté(e)

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

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é