Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

merci infiniment pour l'aide que vous avez pu m'apporter (certe sans le savoir)jusqu'à présent.

 

Aujourd'hui, un nouveau défi (pour moi, mais certainement pas pour vous).

 

Je souhaite faire une étiquette à attribut renseignée automatiquement lorsqu'on clique sur une ligne ou polyligne. Les renseignements récupérés sont l'aire, la longueur, ou pourquoi pas le nom du calque en plus.

 

Pour ce faire, j'ai récupéré le lisp pline_block accompagné de son bloc type sur ce forum que j'adapte en fonction de mes besoins (renseignements à sous-tirer).

 

Pour rappel "Pline_Block" :

[surligneur] ;;; Pline_bloc -Gilles Chanteau- 04/09/06

;;; 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 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)

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

(itoa id)

">%).Length>%"

)

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

(itoa id)

">%).Area \\f \"%lu6%qf1\">%"

)

)

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

)

(vla-regen AcDoc acActiveViewport)

)

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

)

)

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

)

(princ)

) [/surligneur]

 

Le problème se présente au moment ou j'insère le bloc. En effet celui-ci se met toujours avec la même rotation.

 

La question est donc la suivante, peut-on m'aider à modifier le lisp pour q'au moment de choisir le pooint d'insertion du bloc, je puisse également choisir son angle de rotation.

 

Sur ces bonnes paroles, merci d'avance pour le temps consacré.

 

 

 

Posté(e)

Salut,

 

Voici une version avec possibilité de spécifier un angle de rotation (0.00 si ENTER, espace ou clic droit) :

 

;;; Pline_bloc -Gilles Chanteau- 04/09/06
;;; 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 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)
	long (strcat "%			     (itoa id)
		     ">%).Length>%"
	     )
	aire (strcat "%			     (itoa id)
		     ">%).Area \\f \"%lu6%qf1\">%"
	     )
  )
  (initget 1)
  (setq nom (getstring T "\nNom de la pièce: "))
  (initget 1)
  (setq ins (getpoint "\nPoint d'insertion: "))
  (if (not (setq ang (getorient
		       ins
		       "\nSpécifiez l'angle de rotation : "
		     )
	   )
      )
    (setq ang (getvar "ANGBASE"))
  )
  (setq	ref
	 (vla-InsertBlock
	   Space
	   (vlax-3d-point (trans ins 1 0))
	   bloc
	   1.0
	   1.0
	   1.0
	   ang
	 )
  )
  (mapcar '(lambda (x y) (vla-put-TextString x y))
	  (vlax-invoke ref 'GetAttributes)
	  (list nom long aire)
  )
  (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

Posté(e)

Bonjour,

 

Je suis intêrressé par votre LISP mais je suis complètement nul dans ce domaine et je ne sais pas comment récupéré le texte affiché et dans quel logiciel faire cela, si l'un de vous deux pouvait me l'envoyer par mail à : rousset.francis@sade-cgth.fr ou m'expliquer comment faire puor recopier le texte et le transformer en lisp.

 

je vous remercie tout deux par avance.

 

Bonne journée

Posté(e)

Tu copie-colle le texte dans le bloc note de windows et tu enregistre le fichier avec une extension.lsp (enregistrer sous puis "nomfichier.lsp" )dans un répertoire figurant dans la recherche de répertoire support d'autocad. ;)

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Posté(e)

Salut

 

je ne connais rien au lisp mais çà je crois que je sais faire

 

tu fais un copier/coller du lisp ds la bloc-note de windows, tu l'enregistre sous avec l'extention .lsp ds le dossier support par exemple d"utocad ou n'importe quel dossier lisp que tu veux mais quetu dois indiquer ds les 'options' d'autocad pour qu'il trouve le chemin..

 

ds ton fichier tu tapes appload, et tu "charge" le lisp qui doit apparaitre ds la fenetre

apres tu tapes la commande du lisp et c'est parti pour faire des merveilles

 

@+

Posté(e)

Re-bonjour

 

Merci pour l'aide ça a marché, mais maintenant j'ai une question aux inventeur de ce lisp, comment ça marche, car lorsque je tape la commande pline_block le lisp m'affiche le message "pline_block introuvable".

 

Que dois je faire ? me manque t'il quelque chose pour faire fonctionner le lisp correctement.

 

Merci d'avance pour vos réponses.

Posté(e)

Le lisp est il bien chargé?

Est il enregistré dans un répertoire connu d'autocad?

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Posté(e)

J'ai placé le fichier dans un répertoire contenant tous mes blocs mais qui n'a aucun rapport avec autocad. Quel répertoire dois je utiliser à ton avis.

 

Merci

Posté(e)

Question poru axelmartinfr,

 

Est il possible que le lisp affiche les unités en face des données longueur et aire, car il est difficile de différencier les deux surtout lorsque l'on transmet une impression au chargé d'affaire qui n'a pas fait le plan.

 

Merci d'avance pour ta réponse.

Posté(e)
J'ai placé le fichier dans un répertoire contenant tous mes blocs mais qui n'a aucun rapport avec autocad. Quel répertoire dois je utiliser à ton avis.

 

Merci

 

Dans un répertoire a toi, c'est mieux. Mais tu doit le déclarer dans les option=>fichiers=>Chemin de recherche de fichiers support

 

@+

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Posté(e)

Salut,

 

le lisp m'affiche le message "pline_block introuvable"

Le LISP cherche un bloc nommé "Pline_block" dans la collection du dessin courant, s'il ne le trouve pas il cherche un fichier "Pline_block.dwg" dans le chemin de recherche, et s'il ne le trouve pas non plus, retourne le mesage que tu as eu.

 

Tu dois donc créer un bloc nommé "pline_block" dans le dessin, ou l'enregistrer sous "Pline_block.dwg" avec la commande WBLOC.

Ce bloc doit contenir 3 attributs, dans l'ordre : le nom de la pièce, son périmètre et son aire.

Je pense qu'il est préférable de mettre les unités sous forme de textes ou d'attributs constants pour n'avoir que des nombres lors d'une éventuelle extraction.

 

Si tu veux que les unités soient des suffixes des attributs, tu peux voir ce sujet

 

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

Posté(e)

Question pour Gile,

Merci de nous dire comment on change la ligne de prérimètre en Mêtre avec selement 2 unités après la virgule?

Je n'ai maleureursment pas été capable de faire comme la ligne AREA!

merci d'avance.

 

>%).Length>%"

Posté(e)

Bonjour Gile,

 

J'ai passé le lisp à un collègue et cela ne marche pas sur son micro, une fois tapé pline_block à la ligne de commande il apparaît le message d'erreur suivant :

; erreur: no function definition: VLAX-GET-ACAD-

 

Que cela peut il être d'après toi.

 

Bon après midi

Posté(e)

C'est un oubli de ma part, pour les version antérieures à 2004 (je crois), il faut ajouter :

 

(vl-load-com)

 

au début du LISP, avant ou juste apès la ligne (defun c:pline_block (/ AcDoc Space bloc nom ent aire long ins)

 

EDIT :

 

Je dis une bétise, le LISP ne peut fonctionner qu'avec une version 2006 ou 2007 (blocs dynamiques). À ma connaisance le chargement des fonctions ActiveX avec (vl-load-com) n'est plus nécessaire avec ces versions.

 

[Edité le 25/10/2006 par (gile)]

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

Posté(e)

Bonjour Gile,

 

Merci pour ta réponse, mais nous travaillons sous dwg 2006, le lisp marche sur mon poste mais pas sur le poste de mon collègue, je pense ce doit être un problème de variable. Le problème peut il venir que lui n'a pas installé les express tools ??

 

Bonne journée à toutes et tous

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é