Aller au contenu

Créer une MLEADER en Vlisp


Messages recommandés

Posté(e)

Bonjour, je cherche à créer une ligne de repère multiple selon mes préférences avec en contenu, un bloc "_TagCircle" (celui de base utilisé par Autocad". Toute la macro se déroule bien sauf aux deux lignes qui sont séparées.... Quelqu'un peut m'éclairer s'il vous plait...

 

(defun c:lmr (/ doc2 mls2 mlsdict2 )
(setq doc2 (vla-get-activedocument (vlax-get-acad-object)))
  (setq mlsdict2 (vla-item (vla-get-dictionaries doc2) "ACAD_MLEADERSTYLE"))
  (setq mls2 (vlax-invoke mlsdict2 'addobject "LRM-REP" "AcDbMLeaderStyle"))

(vlax-put-property mls2 'AlignSpace 1)
(vlax-put-property mls2 'Annotative 0)
(vlax-put-property mls2 'ArrowSize 2.5)
(vlax-put-property mls2 'BlockConnectionType 1)
(vlax-put-property mls2 'BlockRotation 0.0)
(vlax-put-property mls2 'BlockScale 1.0)
(vlax-put-property mls2 'BreakSize 1.0)
       (vlax-put-property mls2 'ContentType 1)

   	(vlax-put-property mls2 'ContentBlockType 2)
   	(vlax-put-property mls2 'ContentBlockName "_TagCircle")
 
 	(vlax-put-property mls2 'Description "LRM-REP")
(vlax-put-property mls2 'DoglegLength 2.5)
(vlax-put-property mls2 'DrawLeaderOrderType 0)
(vlax-put-property mls2 'DrawMLeaderOrderType 1)
(vlax-put-property mls2 'EnableBlockRotation -1)
(vlax-put-property mls2 'EnableBlockScale -1)
(vlax-put-property mls2 'EnableDogleg -1)
(vlax-put-property mls2 'EnableFrameText 0)
(vlax-put-property mls2 'EnableLanding -1)
(vlax-put-property mls2 'FirstSegmentAngleConstraint 0)
(vlax-put-property mls2 'LandingGap 1)
(vlax-put-property mls2 'LeaderLineType 1)
(vlax-put-property mls2 'LeaderLineTypeId "ByLayer")
(vlax-put-property mls2 'LeaderLineWeight -1)
(vlax-put-property mls2 'MaxLeaderSegmentsPoints 2)
(vlax-put-property mls2 'name "LRM-REP")
(vlax-put-property mls2 'ScaleFactor 1)
(vlax-put-property mls2 'SecondSegmentAngleConstraint 0)
(vlax-put-property mls2 'TextAlignmentType 1)
(vlax-put-property mls2 'TextAngleType 1)
(vlax-put-property mls2 'TextHeight 2.5)
(vlax-put-property mls2 'TextLeftAttachmentType 1)
(vlax-put-property mls2 'TextRightAttachmentType 1)
(vlax-put-property mls2 'TextString "") 	
)

 

MERCI :D

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

  • 3 semaines après...
Posté(e)

Bonjour,

 

les mleader, à l'image des cotes, sont des entités très complexes d'où le nombre phénoménal de vlax-put-property.

 

Personnellement, je préfère faire un fichier dwg ou dwt qui contient le modèle de mleader (au 1:1) que je souhaite avoir et j'utilise le lisp (ouvrir_dessin_dbx) de patrick_35 qui permet d'ouvrir un fichier externe et d'en importer tout un tas de choses (styles de cotes, de mleader, de blocs etc...). Après je ne modifie que le facteur d'échelle du nouveau style de mleader.

 

(defun create_mleaderstyle (ECH UNITS / MLeadName MLeadModel NOMFIC dbx dbxdic dbxMleaderStyle)
 (setq MleadName (strcat "CADSYS-MLEADER-" ECH))
 (setq MleadModel "CADSYS-MLEADER-GABARIT")
 (if (not (member MLeadModel (MLeaderStyleList)))
   (progn
     (if (not (member MleadName (MLeaderStyleList)))
       (progn
         (setq NOMFIC (findfile (strcat "CADSYS-COT" UNITS ".DWG")))
         (setq dbx (ouvrir_dessin_dbx NOMFIC))
         (setq dbxdic 
           (vla-item
             (vla-get-dictionaries dbx)
             "ACAD_MLEADERSTYLE"
           )
         )
         (setq dbxMleaderStyle (vla-item dbxdic MLeadModel))
         (vla-put-scalefactor dbxMleaderStyle ECH)
         (vla-put-name dbxMLeaderStyle MleadName)
         (vla-CopyObjects Dbx
           (vlax-safearray-fill 
             (vlax-make-safearray vlax-vbObject '(0 . 0))
             (list dbxMLeaderStyle)
           )
           (vla-item (vla-get-dictionaries AcDoc) "ACAD_MLEADERSTYLE")
         )
         (vlax-release-object dbx)
       )
     )
     (setvar "CMLEADERSTYLE" MLeadName)
   )
   (alert (strcat MLeadModel " présent dans le fichier"))
 )
)

 

les noms de styles sont évidemment à adapter.

 

Je préfère cette façon de faire puisque dans le modèle dwt ou dwg on voit précisemment la "gueule" du style de mleader, puisq'il est représenté. Ensuite, il suffit que dans la version n+1 d'autocad, on te rajoute de nouvelles propriétés dans le style de mleader, pour que ton lisp devienne bancale.

 

Sinon, pour répondre à ta question, peut-être que le bloc _tagcircle n'est pas présent dans le fichier et c'est cela qui fait planter ton lisp.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é