Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Une discussion à propos de l'utilisation des champs concernant les propriétés du dessin m'a donné une idée.

Le but est de remplacer mon ancien cartouche automatisé (avec des attributs) voir cette discussion , par un nouveau cartouche similaire mais utilisant les champs.

Ce cartouche (si utilisé dans l'EP) récupère l'échelle de la fenêtre utilisé sous forme de champ dynamique.

 

Mon gros problème est la définition des Mtextes en vla.

 

Si la première conception se passe dans le SCG, mon bloc principal ET les MText sont bien conçus même si je choisi un angle de rotation pour mon cartouche.

Si la première utilisation se fait dans un SCU (tourné d'un certain angle) avec en plus un angle de rotation de mon cartouche, mon bloc est bon mais PAS les MText qu'il contient.

 

Ayant encore du mal avec les fonctions vla-..., une petite aide serait la bienvenue pour m'aider à corriger mon code (je piétine et m'embourbe). :casstet:

Je pense que le hic se pose dans (defun make_blk_record

 

Voici les liens pour garder un bon formatage du code

 

TATOO.LSP

TATOO.DCL

 

Ce code est beaucoup plus léger que celui utilisant les attributs, sa lisibilité du coup est un peu plus simple.

Merci à celui qui pourrait me débloquer en m'indiquant le point où j'ai failli :P

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Re,

 

Il semble que le problème survienne pendant la création du bloc si le SCU courant est différent du SCG.

 

On dirait que ça fonctionne en ajoutant :

 

(vla-put-Rotation mtnw (- (atan (cadr (getvar "ucsxdir")) (car (getvar "ucsxdir")))))

dans l'expression mapcar qui ajoute les champs dans la définition de bloc, avant (vla-put-AttachmentPoint ...).

 

PS : il vaut mieux utiliser (atan Y X) que (atan (/ Y X)) qui peut générer une erreur de division par 0.

 

EDIT : il semble qu'il y ait un problème avec le point d'insertion du mtext de l'échelle

 

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

Posté(e)

Je pense avoir trouvé pour le Mtext de l'échelle (au fait pourquoi c'est pas un attirbut ?)

 

Il y avait un trans à l'envers (trans blk_ins 0 1) au lieu de (trans blk_ins 1 0) et la rotation à faire faire au Mtext doit aussi intégrer la rotation de l'axe X du SCU courant.

 

Je te donne là juste l'extrait de code dans lequel j'ai fait les modifications (dans c:tatoo) :

 

((and (listp blk_ins)
              (if (/= (getvar "CVPORT") 2)
                (listp e_fml)
                T
              )
         )
          (setq blk_ins   (trans blk_ins 1 0)    ; transformer le point une fois pour toutes
                ins_tatoo
                          (vla-InsertBlock
                            Space
                            (vlax-3d-point blk_ins)
                            "RECORD_BONUSCAD"
                            (if (/= id_vport 2)
                              (* blk_sca show_unit)
                              blk_sca
                            )
                            (if (/= id_vport 2)
                              (* blk_sca show_unit)
                              blk_sca
                            )
                            (if (/= id_vport 2)
                              (* blk_sca show_unit)
                              blk_sca
                            )
                            (+ blk_rot
                               (atan (cadr (getvar "ucsxdir")) (car (getvar "ucsxdir")))
                            )
                          )
          )
          (vla-put-layer ins_tatoo "Enregistrement Dessin")
          (setq scal_text
                 (vla-addMtext
                   Space
                   (vlax-3d-point
                     (list
                       (+ (car blk_ins)
                          (if (/= id_vport 2)
                            (* blk_sca show_unit 18.536)
                            (* blk_sca 18.536)
                          )
                       )
                       (+ (cadr blk_ins)
                          (if (/= id_vport 2)
                            (* blk_sca show_unit 9.2665)
                            (* blk_sca 9.2665)
                          )
                       )
                     )
                   )
                   0.0
                   (if (car e_fml)
                     (strcat
                       "1 / "
                       "%% / %                        (itoa (vla-get-ObjectID (vlax-ename->vla-object (cdar e_fml)))
                       )
                       ">%).CustomScale \\f \"%lu2%qf2816\">%) \\f \"%lu2%pr0\">%"
                     )
                     (strcat "1 / " (itoa blk_sca))
                   )
                 )
          )
          (vlax-invoke-method scal_text
                              'Rotate
                              (vlax-3d-point blk_ins)
                              (+ blk_rot
                                 (atan (cadr (getvar "ucsxdir")) (car (getvar "ucsxdir")))
                              )
          )
          (vla-put-Height scal_text
                          (if (/= id_vport 2)
                            (* blk_sca show_unit 2.1631)
                            (* blk_sca 2.1631)
                          )
          )
          (vla-put-layer scal_text "Enregistrement Dessin")
          (vla-put-rotation scal_text blk_rot)
        )

 

PS: regarde les fonctions vla-StartundoMark et vla-EndUndoMark pour remplacer les (command "_.undo" ...)

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

Posté(e)

Merci beaucoup (gile),

 

En plus c'est une expression que j'utilisais dans l'ancien lisp sous la forme de division.

PS : il vaut mieux utiliser (atan Y X) que (atan (/ Y X)) qui peut générer une erreur de division par 0.

 

EDIT : il semble qu'il y ait un problème avec le point d'insertion du mtext de l'échelle

 

Oui j'ai remarqué aussi, mais je pense que je m'en sortirais pour la correction:

J'ai été obligé de dissocier l'échelle du bloc car l'ID de la fenêtre sélectionnée est associée au champ. Je pense créer un groupe pour que l'info suive correctement en cas de déplacement/rotation/etc... du bloc.

 

 

lili2006

 

Cette nouvelle version que j'essaye de mettre au point, sera plus souple que la précédente (qui nécessitait un réacteur dans une fonction STARTUP pour la mise à jour automatique)

Là les champs dynamiques sont géré par AutoCad, donc la mise à jour se fera même sur un poste non équipé de la fonction "Tatoo", du moment que ce bloc existe !...

 

Merci pour tout, je vais essayer de terminer ma mise au point sans votre aide (très précieuse)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Incroyable ce (gile).

 

Même pas le temps de faire quelque tests avec sa première proposition, qu'il m'a déjà décortiqué le reste et trouver une solution en 2eme réponse.

 

Tes neurones sont encore très vifs (pas comme moi). Quel âge a tu sans indiscrétion?

 

(au fait pourquoi c'est pas un attirbut ?)

Je pense avoir répondu dans le post précédent, inclure l'ID d'une fenêtre dans un bloc ne convenait pas pour faire des insertions multiples concernant des fenêtres différentes...

 

Il y avait un trans à l'envers

Cela prouve de l'état de mes neurones ... :)

 

PS: regarde les fonctions vla-StartundoMark et vla-EndUndoMark pour remplacer les (command "_.undo" ...)

C'est les restes de l'ancien code que j'ai repris. Je n'étais pas encore rendu à un code homogène.

Merci pour l'adaptation

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Quel âge a tu sans indiscrétion?

50 en Octobre :(

 

inclure l'ID d'une fenêtre dans un bloc ne convenait pas pour faire des insertions multiples concernant des fenêtres différentes

Comme à chaque insertion dans l'EP il faut sélectionner une fenêtre, tu récupères l'ID à ce moment là. Ensuite, après l'insertion du bloc, tu récupères la liste d'attributs (et comme c'est le seul il est facile à retrouver dans la liste) et tu lui affecte le champ (c'est la méthode que j'utilise dans Pline_Block) :

 

(vla-put-TextString
 (car (vlax-invoke ins_tatoo 'GetAttributes))
 (if (car e_fml)
   (strcat
     "1 / "
     "%% / %      (itoa (vla-get-ObjectID (vlax-ename->vla-object (cdar e_fml)))
     )
     ">%).CustomScale \\f \"%lu2%qf2816\">%) \\f \"%lu2%pr0\">%"
   )
   (strcat "1 / " (itoa blk_sca))
 )
)

 

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

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

Bonsoir,

 

Je viens de plancher sur le code (après une bonne coupure ;) ) et je pense avoir résolu mon problème.

Curieusement j'ai du passer par (entmod avec les codes DXF) pour résoudre mon problème de rotation sur les MText. En vla-, pas moyen avec les fonctions "put" pour assigner les bonnes valeurs.

 

Néanmoins mes premiers test ont l'air concluant.

 

Je vous invite à charger/recharger les fichiers donnés en lien au 1er message.

 

Rappel: Le fichier DCL implique que ces fichiers soient placés dans un dossier de recherche d'Autocad.

 

Si vous avez des questions?...

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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

Bonuscad, si tu me lis,...

 

J'ai déjà regardé un peu ton exemple. En fait des éclaircissements sont nécessaires.

 

La taille déjà ma frappé;est ce la taille voulue?

Les polices windows (bien que j'adhère pas vraiment), c'est faisable, j'ai déjà testé.

 

Mon cartouche est auto-renseigné, (on peut facilement redéfinir les 2 valeur par défaut de l'auteur et du service en les remplaçant dans le lisp lui-même, ces valeur par défaut sont inscrites dans les propriétés du dessin pour pouvoir utiliser les champ dynamiques).

 

Tu as introduit des attributs, je me demande s'il ne serait pas mieux d'utiliser les clés personnalisables dans les propriétés du dessin, ainsi on continu avec les champs dynamiques. Ainsi si une clés est changée dans les propriétés, elle est mise à jour dans le cartouche.

 

En final, un problème qui me concerne, j'ai rajouté un "solid" en (255,255,255) et refait face à ce problème de rotation lors de la création du bloc en vlax dans un scu non parallèle.

 

Une question pour les pro du vla: Comment définir des objets dans le SCG lorsque que le scu courant n'est pas parallèle.

 

Donc voilà toutes les raisons du "standby" du sujet, résoudre déjà les problèmes du prototype.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Re,

 

Ok! Merci bonuscad

 

La taille déjà ma frappé;est ce la taille voulue?

 

La taille du texte ?

 

Tu as introduit des attributs, je me demande s'il ne serait pas mieux d'utiliser les clés personnalisables dans les propriétés du dessin, ainsi on continu avec les champs dynamiques

 

Tu parles bien de ça ?

 

http://free0.hiboox.com/images/3909/626984de5a572f8192ca92fbe7cd2934.jpg

 

Auquel cas, OUI! (C'est juste que je ne savais pas faire à l'époque ou j'avais repris ton bloc,...)

 

Merci encore,

 

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Bonjour Lili2006,

 

Voici le code adapté à tes souhaits (enfin je pense les avoir compris)

Le lisp tatoo.lsp

 

(vl-load-com)
(defun recerr (ch)
(cond
	((eq ch "Function cancelled") nil)
	((eq ch "quit / exit abort") nil)
	((eq ch "console break") nil)
	(T (princ ch))
)
(vla-EndUndoMark AcDoc)
(setq *error* olderr)
(princ)
)
(defun do_x_pt()
(check_real (setq x_pt (get_tile "x_pt")) "x_pt")
)
(defun do_y_pt()
(check_real (setq y_pt (get_tile "y_pt")) "y_pt")
)
(defun do_z_pt()
(check_real (setq z_pt (get_tile "z_pt")) "z_pt")
)
(defun check_real (real_number coord)
(if (distof real_number 2)
	(progn 
		(set_tile "error" "") 
		real_number
	)
	(progn 
		(set_tile "error" 
			(strcat "Coordonnée " 
				(strcase (substr coord 1 1)) 
				" Incorrecte."
			)
		)
		nil
	)
)
) 
(defun tstval (val / val)
(if (= (type (read val)) 'REAL)
	(progn
		(setq blk_sca (atof val))
		(set_tile "error" "")
	)
	(progn
		(set_tile "error" "Valeur réelle incorrecte !")
		(set_tile "c_ech" (rtos blk_sca 2 1))
	)
)
)
(defun tstang (val / val)
(if (angtof val)
	(progn
		(setq blk_rot (angtof val))
		(set_tile "error" "")
	)
	(progn
		(set_tile "error" "Valeur numérique incorrecte !")
		(set_tile "b_o" (angtos blk_rot))
	)
)
)
(defun l_chg (index / )
(setq blk_sca
	(read
		(nth
			(fix (atof index))
			'("1" "5" "10" "25" "50" "100" "200" "500" "1000" "2000" "2500" "5000" "10000" "25000" "50000" "100000" "250000" "500000")
		)
	)
)
(set_tile "c_ech" (rtos blk_sca 2 1))
)
(defun make_blk_record ( / nw_style nw_blk sld colObj plw lnw tnw mtnw anw dxf_ent)
(if (not (tblsearch "STYLE" "TATOO-ARIAL"))
	(progn
		(setq nw_style (vla-add (vla-get-textstyles AcDoc) "TATOO-ARIAL"))
		(mapcar
			'(lambda (pr val)
				(vlax-put nw_style pr val)
			)
			(list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag)
			(list (strcat (getenv "WinDir") "\\Fonts\\ariblk.TTF") 0.0 0.0 1.0 0.0)
		)
	)
 )
(if (not (tblsearch "STYLE" "TATOO-COMIC"))
	(progn
		(setq nw_style (vla-add (vla-get-textstyles AcDoc) "TATOO-COMIC"))
		(mapcar
			'(lambda (pr val)
				(vlax-put nw_style pr val)
			)
			(list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag)
			(list (strcat (getenv "WinDir") "\\Fonts\\comic.TTF") 0.0 0.0 1.0 0.0)
		)
	)
 )
(setq
	nw_blk (vla-add (vla-get-blocks AcDoc) (vlax-3d-point '(0.0 0.0 0.0)) "TATOUAGE PLAN")
	sld (vla-AddSolid nw_blk (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point '(61.8034 0.0 0.0))  (vlax-3d-point '(0.0 38.1966 0.0)) (vlax-3d-point '(61.8034 38.1966 0.0)))
	plw (vlax-invoke nw_blk 'AddLightWeightPolyline
	(list 0.999998 0.0 60.8034 0.0 61.8034 0.999998 61.8034 37.1966 60.8034 38.1966 0.999998 38.1966 0.0 37.1966 0.0 0.999998))
)
(vla-put-Normal sld (vlax-3d-point '(0.0 0.0 1.0)))
(setq
	colObj
		(vla-getInterfaceObject
			(vlax-get-acad-object)
			(strcat "AutoCAD.AcCmColor." (substr (getvar "acadver") 1 2))
		)
)
(vla-setrgb colObj 255 255 255)
(vla-put-TrueColor sld colObj)
(vla-put-layer sld "0")(vla-put-Linetype sld "ByBlock")(vla-put-Lineweight sld acLnWtByBlock )
(setq dxf_ent (entget (vlax-vla-object->ename sld)))
(mapcar
   '(lambda (n val) (setq dxf_ent (subst (cons n val) (assoc n dxf_ent) dxf_ent)))
   '(10 11 12 13) '((0.0 0.0 0.0) (61.8034 0.0 0.0) (0.0 38.1966 0.0) (61.8034 38.1966 0.0))
 )
(entmod dxf_ent)
(vla-put-Normal plw (vlax-3d-point '(0.0 0.0 1.0)))
(vla-put-ConstantWidth plw 0.618034)(vla-put-closed plw :vlax-true)
(vla-put-color plw acByBlock)(vla-put-layer plw "0")(vla-put-Linetype plw "ByBlock")(vla-put-Lineweight plw acLnWtByBlock )
(foreach n '(1 3 5 7) (vla-SetBulge plw n 0.414214))
(mapcar
	'(lambda (1p 2p)
		(setq lnw (vla-AddLine nw_blk (vlax-3d-point 1p) (vlax-3d-point 2p)))
		(vla-put-color lnw acByBlock)(vla-put-layer lnw "0")(vla-put-Linetype lnw "ByBlock")(vla-put-Lineweight lnw acLnWtByBlock )
		(vla-put-Normal lnw (vlax-3d-point '(0.0 0.0 1.0)))
	)
	'((0.0 32.7399 0.0) (0.0 27.2833 0.0) (0.0 21.8266 0.0) (0.0 16.37 0.0) (0.0 10.9133 0.0) (0.0 5.45666 0.0)
		(20.6011 38.1966 0.0) (41.2023 38.1966 0.0) (30.9017 16.37 0.0)
	 )
	'((61.8034 32.7399 0.0) (61.8034 27.2833 0.0) (61.8034 21.8266 0.0) (61.8034 16.37 0.0) (61.8034 10.9133 0.0) (61.8034 5.45666 0.0)
		(20.6011 32.7399 0.0) (41.2023 32.7399 0.0) (30.9017 5.4567 0.0)
	 )
)
(mapcar
	'(lambda (str p ht pa la)
		(setq tnw (vla-AddText nw_blk str (vlax-3d-point p) ht))
		(vla-put-Normal tnw (vlax-3d-point '(0.0 0.0 1.0)))
		(vla-put-color tnw acByBlock)(vla-put-layer tnw "0")(vla-put-Linetype tnw "ByBlock")(vla-put-Lineweight tnw acLnWtByBlock )
		(vla-put-StyleName tnw "TATOO-ARIAL")(vla-put-Alignment tnw acAlignmentMiddleLeft)
		(vla-put-TextAlignmentPoint tnw (vlax-3d-point pa))(vla-put-ScaleFactor tnw la)
	)
	'("Créé le:" "Modifié le:" "Tracé le:" "Fichier :" "Affaire :" "Traçage :" "Auteur :" "Service :" "Echelle :"
		"Indice :" "Auteur Dernier Tracé :" "Auteur Dernier Enregistrement :"
	 )
	'((1.91591 34.6957 0.0) (21.4748 34.6957 0.0) (42.683 34.6957 0.0)
		(1.91591 29.2391 0.0) (1.91591 23.7824 0.0) (1.91591 18.3257 0.0) (1.91591 12.8691 0.0)
		(32.8176 12.8691 0.0) (1.91591 7.10344 0.0) (32.8176 7.10344 0.0) (1.91591 3.57334 0.0) (1.91591 0.845013 0.0)
	 )
	'(1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.0383 1.0383)
	'((1.91591 35.4682 0.0) (21.4748 35.4682 0.0) (42.683 35.4682 0.0)
		(1.91591 30.0116 0.0) (1.91591 24.5549 0.0) (1.91591 19.0982 0.0) (1.91591 13.6416 0.0)
		(32.8176 13.6416 0.0) (1.91591 8.18499 0.0) (32.8176 8.18499 0.0) (1.91591 4.09249 0.0) (1.91591 1.36416 0.0)
	 )
	'(0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 1.0 1.0)
)
(mapcar
	'(lambda (fld p ht lb flg)
		(setq mtnw (vla-addMtext nw_blk (vlax-3d-point p) lb fld))
		(vla-put-Rotation mtnw 0.0) (vla-put-Normal mtnw (vlax-3d-point '(0.0 0.0 1.0))) (vla-put-insertionPoint mtnw (vlax-3d-point p))
		(vla-put-AttachmentPoint mtnw 1) (vla-put-DrawingDirection mtnw 5) (vla-put-color mtnw acByBlock) (vla-put-layer mtnw "0")
		(vla-put-Linetype mtnw "ByBlock") (vla-put-Lineweight mtnw acLnWtByBlock) (vla-put-StyleName mtnw "TATOO-COMIC") (vla-put-Height mtnw ht)
		(vla-put-Visible mtnw flg)
		(setq
			dxf_ent (entget (vlax-vla-object->ename mtnw))
			dxf_ent (subst (cons 50 (- (atan (caddr (getvar "ucsxdir")) (caddr (getvar "ucsydir"))))) (assoc 50 dxf_ent) dxf_ent)
			dxf_ent (subst '(11 1.0 0.0 0.0) (assoc 11 dxf_ent) dxf_ent)
		)
		(entmod dxf_ent)
	)
	'(
		"{\\W0.5;%<\\AcVar CreateDate \\f \"d-MMM-yy\">%}" "{\\W0.5;%<\\AcVar SaveDate \\f \"d-MMM-yy\">%}" "{\\W0.5;%<\\AcVar PlotDate \\f \"d-MMM-yy\">%}"
		"\\pxqd;%<\\AcVar Filename \\f \"%fn7\">%" "\\\pxqd;%<\\AcVar Title>%" "\\pxqd;%<\\AcVar ctab>%" "%<\\AcVar Author>%" "%<\\AcVar Subject>%"
		"%<\\AcVar Comments>%" "%<\\AcVar loginname>%" "%<\\AcVar LastSavedBy>%" "%<\\AcVar Keywords>%" "%<\\AcVar cvport>%"
	)
	'((10.3006 36.2407 0.0) (30.9017 36.2407 0.0) (51.5029 36.2407 0.0)
		(10.3006 32.1016 0.0) (10.3006 26.6704 0.0) (10.3006 21.1933 0.0) (10.3006 14.4141 0.0) (41.2023 14.4141 0.0)
		(41.2023 8.9574 0.0) (27.9226 4.6116 0.0) (27.9226 1.8833 0.0) (57.2266 4.5903 0.0) (57.2266 1.8833 0.0)
	 )
	'(1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.54508 1.0383 1.0383 1.0383 1.0383)
	'(0.0 0.0 0.0 49.9028 49.9028 49.9028 0.0 0.0 0.0 0.0 0.0 0.0 0.0)
   '(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0)
)
 (setq anw (vla-AddAttribute nw_blk 2.16312 acAttributeModeVerify "Echelle ?" (vlax-3d-point '(18.536 7.1034 0.0)) "Block_Scale" "1/0"))
 (vla-put-Normal anw (vlax-3d-point '(0.0 0.0 1.0)))
 (vla-put-color anw acByBlock)(vla-put-layer anw "0")(vla-put-Linetype anw "ByBlock")(vla-put-Lineweight anw acLnWtByBlock)
 (vla-put-StyleName anw "TATOO-COMIC")(vla-put-Alignment anw acAlignmentTopLeft)
 (vla-put-TextAlignmentPoint anw (vlax-3d-point '(10.3006 9.2666 0.0)))(vla-put-ScaleFactor anw 0.75)
)
(defun c:tatoo ( / olderr sv_und blk_sca blk_rot blk_ins show_unit class_dwg name_oper name_job ind_rev AcDoc Space db sinfo VNorm dcl_id what_next blk_ins x_pt y_pt z_pt lock_zoom e_fml js_fml ins_tatoo)
;  (setvar "FIELDDISPLAY" 0)
 (setq
   AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
   Space
   (if (eq (getvar "CVPORT") 1)
     (vla-get-PaperSpace AcDoc)
     (vla-get-ModelSpace AcDoc)
   )
   db (vla-get-Database AcDoc)
   sinfo (vla-get-SummaryInfo db)
   VNorm	(trans '(0 0 1) 1 0 T)
 )
 (vla-StartUndoMark AcDoc)
(setq olderr *error* *error* recerr)
 (if (eq (setq name_oper (vla-get-Author sinfo)) "") (setq name_oper "Lili2006"))
 (if (eq (setq class_dwg (vla-get-Subject sinfo)) "") (setq class_dwg "CADxp"))
 (if (eq (setq name_job (vla-get-Title sinfo)) "") (setq name_job "Document provisoire"))
 (if (eq (setq ind_rev (vla-get-Comments sinfo)) "") (setq ind_rev "Version 0.0"))
 (if (not (eq (type (setq show_unit (read (vla-get-Keywords sinfo)))) 'INT))
   (progn
     (if (eq (getvar "CVPORT") 1)
       (progn
         (initget "KM ME CM MM")
         (if (not (setq show_unit (getkword "\nDessin de l'espace objet réalisé en [KM/ME/CM/MM] : ")))
           (setq show_unit "ME")
         )
         (cond
           ((eq show_unit "KM")
             (setq show_unit 1000000.0)
           )
           ((eq show_unit "ME")
             (setq show_unit 1000.0)
           )
           ((eq show_unit "CM")
             (setq show_unit 10.0)
           )
           ((eq show_unit "MM")
             (setq show_unit 1.0)
           )
         )
         (vla-put-Keywords sinfo (rtos show_unit 2 1))
       )
       (vla-put-Keywords sinfo (rtos (setq show_unit 1000.0) 2 1))
     )
   )
   (vla-put-Keywords sinfo (rtos show_unit 2 1))
 )
(setq
	blk_sca (if (eq (getvar "CVPORT") 1) 1.0 100.0)
	blk_rot 0.0
	blk_ins nil e_fml nil lock_zoom "1"
)
(if (not (tblsearch "LAYER" "O-TATOUAGE"))
	(vlax-put (vla-add (vla-get-layers AcDoc) "O-TATOUAGE") 'color 7)
)
(if (not (tblsearch "BLOCK" "TATOUAGE PLAN")) (make_blk_record))
(if (eq (getvar "CVPORT") 1) (setq show_unit 1.0))
(setq dcl_id (load_dialog "tatoo.dcl"))
(setq what_next 4)
(while (< 1 what_next)
	(if (not (new_dialog "tatoo" dcl_id)) (exit))
	(start_list "lst_ech")
		(mapcar
			'(lambda (x)
			(add_list x)
		)
		'("1" "5" "10" "25" "50" "100" "200" "500" "1000" "2000" "2500" "5000" "10000" "25000" "50000" "100000" "250000" "500000")
	)
	(end_list)
	(set_tile "c_ech" (rtos blk_sca 2 1))
	(if x_pt (set_tile "x_pt" x_pt))
	(if y_pt (set_tile "y_pt" y_pt))
	(if z_pt (set_tile "z_pt" z_pt))
	(cond ((not (listp blk_ins))
		(set_tile "error" "Saisissez d'abord le point d'insertion!")
	      )
	      ((and (eq (getvar "CVPORT") 1) (not (listp e_fml)))
		(set_tile "error" "Saisissez une fenêtre de présentation!")
	      )
	      (T (set_tile "error" ""))
	)
	(set_tile "rotation" (angtos blk_rot))
	(set_tile "c_cla" class_dwg)
	(set_tile "c_des" name_oper)
	(set_tile "c_job" name_job)
	(set_tile "i_rev" ind_rev)
	(set_tile "lock_fm" lock_zoom)
	(cond
		((= show_unit 1.0) (set_tile "b_mm" "1") (mode_tile "b_mm" 2))
		((= show_unit 10.0) (set_tile "b_cm" "1") (mode_tile "b_cm" 2))
		((= show_unit 1000.0) (set_tile "b_m" "1") (mode_tile "b_m" 2))
		((= show_unit 1000000.0) (set_tile "b_km" "1") (mode_tile "b_km" 2))
	)
	(if (eq (getvar "CVPORT") 1) (foreach n '("lst_ech" "c_ech" "b_mm" "b_cm" "b_m" "b_km") (mode_tile n 1)) (foreach n '("lock_fm" "pick_fmult") (mode_tile n 1)))
	(action_tile "lst_ech" "(l_chg $value)")
	(action_tile "c_ech" "(tstval $value)")
	(action_tile "pick_pt" "(done_dialog 2)")
	(action_tile "x_pt" "(do_x_pt)")  
	(action_tile "y_pt" "(do_y_pt)")  
	(action_tile "z_pt" "(do_z_pt)")  
	(action_tile "pick_ang" "(done_dialog 3)")
	(action_tile "pick_fmult" "(done_dialog 4)")
	(action_tile "lock_fm" "(setq lock_zoom $value)")
	(action_tile "rotation" "(tstang $value)")
	(action_tile "b_mm" "(vla-put-Keywords sinfo (rtos (setq show_unit 1.0) 2 1))")
	(action_tile "b_cm" "(vla-put-Keywords sinfo (rtos (setq show_unit 10.0) 2 1))")
	(action_tile "b_m" "(vla-put-Keywords sinfo (rtos (setq show_unit 1000.0) 2 1))")
	(action_tile "b_km" "(vla-put-Keywords sinfo (rtos (setq show_unit 1000000.0) 2 1))")
	(action_tile "c_cla" "(setq class_dwg $value)")
	(action_tile "c_des" "(setq name_oper $value)")
	(action_tile "c_job" "(setq name_job $value)")
	(action_tile "i_rev" "(setq ind_rev $value)")
	(action_tile "accept" "(done_dialog 1)")
	(action_tile "cancel" "(done_dialog 0)")
	(setq what_next (start_dialog))
	(cond
		((= what_next 2)
			(initget 9)
			(setq blk_ins (getpoint "\nPoint d'insertion du cartouche: "))
			(setq x_pt (rtos (car blk_ins) 2 4))
			(setq y_pt (rtos (cadr blk_ins) 2 4))
			(setq z_pt (rtos (caddr blk_ins) 2 4))
		)
		((= what_next 3)
			(initget 32)
			(setq blk_rot (getorient "\nAngle de rotation du cartouche ?<0>: "))
			(if (not blk_rot) (setq blk_rot 0))
		)
		((= what_next 4)
			(princ "\nChoisissez une fenêtre de présentation")
			(while (null (setq js_fml (ssget "_+.:E:S" '((-4 . ""))))))
			(setq e_fml (entget (ssname js_fml 0)))
	  )
		((= what_next 1)
       (vla-put-Author sinfo name_oper)
       (vla-put-Subject sinfo class_dwg)
       (vla-put-Title sinfo name_job)
       (vla-put-Comments sinfo ind_rev)
			(if (or (not blk_ins) (not (listp blk_ins)))
				(if (and x_pt y_pt z_pt)
					(setq blk_ins (list (atof x_pt) (atof y_pt) (atof z_pt)))
					(setq blk_ins T)
				)
			)
			(if (and (eq (getvar "CVPORT") 1) (or (not e_fml) (not (listp e_fml)))) (setq e_fml T))
			(cond
				((and (listp blk_ins) (if (eq (getvar "CVPORT") 1) (listp e_fml) T))
					(setq blk_ins (trans blk_ins 1 0)
             ins_tatoo
						(vla-InsertBlock Space (vlax-3d-point blk_ins) "TATOUAGE PLAN"
							(if (eq id_vport 1) 1.0 (/ blk_sca show_unit))
							(if (eq id_vport 1) 1.0 (/ blk_sca show_unit))
							(if (eq id_vport 1) 1.0 (/ blk_sca show_unit))
							(+ blk_rot (atan (caddr (getvar "ucsxdir")) (caddr (getvar "ucsydir"))))
						)
					)
					(vla-put-Normal ins_tatoo (vlax-3d-point Vnorm))
					(vla-put-layer ins_tatoo "O-TATOUAGE")
           (vla-put-color ins_tatoo acByLayer)
           (vla-put-Linetype ins_tatoo "ByLayer")
           (vla-put-Lineweight ins_tatoo acLnWtByLayer)
           (vla-put-TextString
             (car (vlax-invoke ins_tatoo 'GetAttributes))
             (if (car e_fml)
               (strcat
                 "1 / "
                 "%<\\AcExpr (%<\\AcVar Keywords>% / %<\\AcObjProp Object(%<\\_ObjId "
                 (itoa (vla-get-ObjectID (vlax-ename->vla-object (cdar e_fml)))
                 )
                 ">%).CustomScale \\f \"%lu2%qf2816\">%) \\f \"%lu2%pr0\">%"
               )
               (strcat "1 / " (rtos blk_sca 2 0))
             )
           )
				)
				(T
					(if (not (listp blk_ins)) (setq blk_ins T))
					(if (and (eq (getvar "CVPORT") 1) (not (listp e_fml))) (setq e_fml T))
					(setq what_next 5)
				)
			)
	  )
	  ((= what_next 0)
			(alert "\nRelancez la commande TATOO pour créer un cartouche")
		)
	)
)
(unload_dialog dcl_id)
 (vla-EndUndoMark AcDoc)
 (vlax-release-object sinfo)
 (vlax-release-object db)
 (vlax-release-object Space)
 (vlax-release-object AcDoc)
(setq *error* olderr)
(princ)
)

 

le fichier tatoo.dcl

 

tatoo : dialog {
label = "Création du CARTOUCHE D'ENREGISTREMENT";
:boxed_row {
label = "";
:boxed_column {
label = "Choix de l'échelle";
	:list_box	{
		multiple_select=false;
		key="lst_ech";
		width=10;
	}
	:edit_box {
	label      = "Echelle:";
	mnemonic   = "E";
	key        = "c_ech";
	width = 10;
	edit_width = 10;
	}
	: button {
		label = "associer Fenêtre <";
		mnemonic = "F";
		key = "pick_fmult";                 
	}
	: toggle {
		label = "Verrouiller la vue";
		mnemonic = "V";
		key = "lock_fm";
	}			
}
:column {
:boxed_column {
	label = "Point de Base";
	: button {
		label = "Saisir <";
		mnemonic = "S";
		key = "pick_pt";                 
	}
	: edit_box {
		label = "X:";
		mnemonic = "X";
		key = "x_pt";
		edit_width = 10;
	}
	: edit_box {
		label = "Y:";
		mnemonic = "Y";
		key = "y_pt";
		edit_width = 10;
	}
	: edit_box {
		label = "Z:";
		mnemonic = "Z";
		key = "z_pt";	
		edit_width = 10;
	}
}
:boxed_column {
	label = "Rotation";
	: button {
		label = "Saisir <";
		mnemonic = "S";
		key = "pick_ang";                 
	}
	: edit_box {
		label = "Angle:";
		key = "rotation";
		mnemonic = "A";
		edit_width = 6;
	}
}
}
}
:boxed_row {
	label = "Choix Unité utilisée dans l'espace Objet";
	:radio_button {
		label = "mm";
		key = "b_mm";
	}
	:radio_button {
		label = "cm";
		key = "b_cm";
	}
	:radio_button {
		label = "m ";
		key = "b_m";
	}
	:radio_button {
		label = "km";
		key = "b_km";
	}
}
:boxed_column {
	label = "Renseignement dossier";
	:edit_box {
	label      = "Classement:";
	mnemonic   = "C";
	key        = "c_cla";
	width = 15;
	edit_width = 15;
	}
	:edit_box {
	label      = "Dessinateur:";
	mnemonic   = "D";
	key        = "c_des";
	width = 15;
	edit_width = 15;
	}
	:edit_box {
	label      = "Affaire:";
	mnemonic   = "A";
	key        = "c_job";
	width = 15;
	edit_width = 15;
	}
	:edit_box {
	label      = "Indice de révision:";
	mnemonic   = "I";
	key        = "i_rev";
	width = 15;
	edit_width = 15;
	}
}
ok_cancel_err;
}

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Si tu parles du décalage du MText vers le haut, je t'explique:

 

Lors de mes tests, j'ai remarqué que si les chemins étaient long, ils étaient inscrits sur 2 lignes dans l'éditeur de Mtext. Du coup j'ai déplacé la justification pour le texte soit convenable pour 1 ou 2 lignes.

 

Ce cartouche peut être inséré de multiple fois indifféremment dans l'EO ou l'EP (lié alors une fenêtre pour l'échelle). Le changement d'information dans les propriétés du dessin se répercute directement sur le cartouche, comme les facteurs d'échelle (zoom) dans les fenêtre (si celles ci ne sont pas verrouilées).

2 informations invisibles figurent dans le cartouche. Cela concerne le facteur multiplicatif pour l'unité utilisée (également dans les propriété, éviter de modifier cette valeur) et la variable CVPORT pour distinguer l'EO de l'EP.

 

Dans l'EO, le masque est génant (mais pas à l'impression), j'ai préféré le SOLID au WIPEOUT qui est trop capricieux lors des impressions.

 

Fini les sorties papiers non identifiables entre-elles... ;)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bonjour à toutes et tous,

 

Du coup j'ai déplacé la justification pour le texte soit convenable pour 1 ou 2 lignes.

 

Ok !

 

Cela concerne le facteur multiplicatif pour l'unité utilisée (également dans les propriété, éviter de modifier cette valeur) et la variable CVPORT

 

Oui, j'ai vu en bas à droite,...

 

Fini les sorties papiers non identifiables entre-elles...

 

Oui, c'est l'objectif principal,...

 

Merci encore, c'est vraiment super souple comme utilisation,...

 

Et dans l'EO, le tracé se fait selon l'échelle demandé, mais comment ? (Je ne trace jamais depuis l'EO,...)

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Et dans l'EO, le tracé se fait selon l'échelle demandé, mais comment ?

 

Ce bloc (si inséré par la routine) a toujours une échelle de 1 en mm lorsque mis en place dans l'EP (le choix des unités et de l'échelle est grisée dans la boite de dialogue) puisque que le tracé ce fait en règle générale à l'échelle 1=1 depuis l'EP (on peut en effet faire des agrandissement/réduction papier en changeant l'échelle, similaire à un zoom...)

 

Depuis l'EO, il faut savoir au préalable l'échelle ou sera tracé le dessin et pour ce, savoir si on utilise l'unité en mm, cm, m, ou km. Ce choix détermine l'échelle d'insertion du bloc dans l'EO, donc sa bonne apparence pour l'échelle de sortie papier finale choisie.

 

Un petit désagrément (pour ma part) de cette nouvelle méthode par rapport à l'ancienne:

Avant dans les XREFs importants (faisant partie du projet), j'insérais ce cartouche.

Dans la mise en page finale (fichier indépendant; ou les différents XREF, plus ou moins important sont attachés) j'insérais aussi un cartouche et faisait apparaitre (surtout pour la date de tracé et la localisation de ma mise en page (MEP, sigle que je rajoute au début de mes noms de fichier de Mise En Page, je ne me sert pas du tout du jeux de feuille, choix de ma part)

De cette sorte, je savais si la sortie papier avait les bonne mise à jour des Xrefs importants.

(NB: mes Xrefs projet n'ont jamais d'éléments dans l'EP, ni de présentations définies)

 

Avec cette nouvelle méthode employant les champs dynamiques, je viens de remarquer (un peu tard) que les informations dans l'XRef sont AUSSI mise à jour avec les informations du fichier de mise en page, je perds les indications pour les Xrefs, je connais plus les infos les concernant... :mad:

 

Mais bon, si on ne veux par faire ce genre de suivi, l'avantage de ce nouveau bloc (une fois inséré) est qu'il est suivi par AutoCAD lui-même (sans l'applicatif TATOO), donc plus souple, alors que l'ancien nécessitait une application lisp (avec des réacteurs sur la commande TRACEUR) sur le poste exploitant pour faire la même chose.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é