Aller au contenu

Créer une annotation depuis un attribut


nG! Hebus

Messages recommandés

Bonjour,

 

Je cherche quelqu'un qui aurait un peu de temps ou même carrément ce genre de chose sous la main.

 

Mes blocs sont des blocs 3D avec pas mal d'infos, je cherche un LISP pour extraire l'attribut appelé "REPERE" vers une flèche équivalente à une flèche de repère multiple.

 

J'ai vu que dans les express on pouvais faire sortir tous les attributs mais cela ne convient pas car je fait des extractions de données. Je veux juste l'attribut REPERE qui pointe mon bloc et je veux garder mon attribut dans mon bloc aussi.

 

Je sais pas si c'est très clair.

 

Au pire je mettrais des images si cela peut être plus explicite.

"98% des soucis informatiques sont assis entre la chaise et le bureau !"

 

"C'est parce que la vitesse de la lumière est supérieure à celle du son que tant de gens paraissent brillants avant d'avoir l'air con."
Lien vers le commentaire
Partager sur d’autres sites

Hello

 

1) Si j'ai bien compris tu desires "selectionner" UN attribut nomme "REPERE"

puis on traite TOUS les attributs "REPERE" ou que celui "selectionne" ?

 

2) Et on cree un Leader ou un MLeader dont le contenu = le contenu de "REPERE" ?

 

3) Ensuite on place CELA OU ? ... A droite ? En haut ? par rapport au Bloc

et a quelle distance ?

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut Lecrabe,

 

merci pour la réponse.

 

1) Si j'ai bien compris tu desires "selectionner" UN attribut nomme "REPERE"

puis on traite TOUS les attributs "REPERE" ou que celui "selectionne" ?

Le but c'est faire un peu ce que fait solidworks ou revit avec leur flèche de repère de pièces. Donc une par une.

 

2) Et on cree un Leader ou un MLeader dont le contenu = le contenu de "REPERE" ?

Si Leader veut dire text ou Mtext alors oui c'est ça, avec pour valeur l'attribut "REPERE"

 

3) Ensuite on place CELA OU ? ... A droite ? En haut ? par rapport au Bloc

et a quelle distance ?

Si on pars sur le principe du Mtext, peut on définir un point qui sers de point d'insertion du Mtext?

 

 

Je fait un screen cast en speed et je met ça en lien

 

 

 

EDIT :

 

https://knowledge.autodesk.com/community/screencast/085ca8af-2afd-4d0e-b568-a803c409df26

 

Ce que je cherche à faire mais sans passer par 50 manipulations.

 

PS : Je viens de voir que sur screencast il appel les repères multilignes des Mleader :) donc oui je cherche à faire un Mleader sur un bloc avec comme texte la valeur de l'attribut REPERE.

"98% des soucis informatiques sont assis entre la chaise et le bureau !"

 

"C'est parce que la vitesse de la lumière est supérieure à celle du son que tant de gens paraissent brillants avant d'avoir l'air con."
Lien vers le commentaire
Partager sur d’autres sites

Hello

 

1) BON j'ai regarde mes stocks (environ 2000 routines) et je dispose d'une routine interessante ATT2MT qui convertit TOUS les Attributs des Blocs selectionnes en un "magnifique" MText horizontal !

 

2) Je sais : ce n'est pas tout a fait ce que tu veux !

 

3) Mais je ne suis pas developpeur Lisp/VLisp !

 

41) Mais par contre a partir de cette routine, qq'un pourra facilement ajouter une question du genre :

Quel Attribut traite ou Tous ?

Ainsi tu pourrais signaler que tu ne veux traiter que l'attribut REPERE ...

 

42) Et meme creer un Leader ou MLeader et non pas un MText !?

 

Desole de ne pas pouvoir faire plus !

 

Bon WE, Bye, lecrabe

 


;; 
;; https://autocadtips1.com/2011/04/26/autolisp-attribute-to-text-mtext/
;; 
;; Routine: ATT2MT - Convert Attribute to MText ...
;; 
;; The routine ATT2MT asks for text height ... 
;; Then you can select MANY Blocks with Attributes
;; ALL Attributes will be written as a MText of N Lines
;; 

;;;;;; 
:;;;; Written by Smirnoff
;;;;;  
;;;;; Found @ http://www.cadtutor.net/forum/showthread.php?56833-Display-ATTRIBUTES-as-Text-from-multiple-blocks&highlight=attmt
;;;;;  


(defun c:Att2MT(/ aDoc aSp oSiz bSet aLst cLst tStr nTxt bCtr Tags TextInsert)

; *****************************************************************************

; ADJUSTMENTS ;

; (Modify it to adjust for your own requirements) ;

; *****************************************************************************

(setq Tags T) ; - if T add tags to MText if Nil not

(setq TextInsert T) ; - Text insertion point. If T center of Bounding Box

; of block, if Nil Block insertion point.

; ******************************* END ADJUSTMENTS *****************************

(vl-load-com)

(defun GetBoundingCenter (vlaObj / blPt trPt cnPt)

(vla-GetBoundingBox vlaObj 'minPt 'maxPt)

(setq blPt(vlax-safearray->list minPt)

trPt(vlax-safearray->list maxPt)

cnPt(vlax-3D-point

(list

(+(car blPt)(/(-(car trPt)(car blPt))2))

(+(cadr blPt)(/(-(cadr trPt)(cadr blPt))2))

0.0

); end list

); end vlax-3D-point

); end setq

); end of GetBoundingCenter

(if(not attmt:Size)(setq attmt:Size(getvar "TEXTSIZE")))

(setq oSiz attmt:Size

attmt:Size(getreal(strcat "\nText size <"(rtos attmt:Size)">: ")))

(if(null attmt:Size)(setq attmt:Size oSiz))

(setq aDoc(vla-get-ActiveDocument(vlax-get-acad-object)))

(if(= 1(vla-get-ActiveSpace aDoc))

(setq aSp(vla-get-ModelSpace aDoc))

(setq aSp(vla-get-PaperSpace aDoc))

); end if

(princ "\n<<< Select Text to extract Attributes to MText >>> ")

(if(setq bSet(ssget '((0 . "INSERT"))))

(progn

(foreach b(mapcar 'vlax-ename->vla-object

(vl-remove-if 'listp

(mapcar 'cadr(ssnamex bSet))))

(setq aLst '()

tStr "") ; end setq

(if TextInsert

(setq bCtr(GetBoundingCenter B))

(setq bCtr(vla-get-InsertionPoint B))

); end if

(if(= :vlax-true(vla-get-HasAttributes B))

(progn

(setq aLst

(mapcar '(lambda (a)

(list (vla-get-TagString a)

(vla-get-TextString a)))

(vlax-safearray->list

(vlax-variant-value(vla-GetAttributes B)))))

(foreach i(reverse aLst)

(setq tStr(strcat tStr(if Tags(strcat(car i) ": ")"")(last i)"\\P"))

); end foreach

(if(/= "" tStr)

(progn

(setq nTxt(vla-AddMText aSp bCtr (* attmt:Size 30.0) tStr))

(vla-put-Height nTxt attmt:Size)

); end progn

); end if

); end progn

); end if

); end foreach

(vla-EndUndoMark aDoc)

); end progn

); end if

(princ)

); end of c:att2mt 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Lecrabe,

 

Merci c'est déjà ça, je vais aller ennuyer nos lispers pour voir si quelqu'un aurait un peu de temps à m'accorder pour faire ça :)

"98% des soucis informatiques sont assis entre la chaise et le bureau !"

 

"C'est parce que la vitesse de la lumière est supérieure à celle du son que tant de gens paraissent brillants avant d'avoir l'air con."
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é