Aller au contenu

[Résolu] Repérage rapide


Mitch-51100

Messages recommandés

Dans le même esprit que la réponse de Tramber, mais développé dans ton sens:

 

(defun c:lead_block-name ( / ent dxf_ent typ_ent blk_name pt_lst pt)
(while (null (setq ent (entsel "\nChoix de l'entité: "))))
(setq
	dxf_ent (entget (car ent))
	typ_ent (cdr (assoc 0 dxf_ent))
)
(if (eq typ_ent "INSERT")
	(progn
		(setq 
			blk_name (cdr (assoc 2 dxf_ent))
			pt_lst (list (trans (cdr (assoc 10 dxf_ent)) (car ent) 1))
		)
		(while (setq pt (getpoint (car pt_lst) "\nIndiquez le point suivant: "))
			(setq pt_lst (cons pt pt_lst))
		)
		(command "_.leader")
		(foreach n (reverse pt_lst) (command n))
		(command "" blk_name "")
	)
	(princ "\nEntité n'est pas une insertion de bloc!")
)
(prin1)
)

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

Lien vers le commentaire
Partager sur d’autres sites

  • 6 ans après...

je reviens vers vous concernant ce lisp, mais, j'ai une petite question

Y-a-t'il possibilité de changer le point d'origine du nom du bloc, c'est à dire qu'au lieu que le nom du bloc parte de l'origine du bloc, il parte de la ou l'on clic sur le bloc.? (car parfois, dans mon cas, il faut que je déplace la flèche et le texte)

 

je sais pas si je me fais comprendre.

 

par avance merci

Lien vers le commentaire
Partager sur d’autres sites

justement, c'est un mélange des 2.

le principe des lignes de repères qui permet de mettre le repère la ou on veut, et la "puissance" du lisp pour donner le nom du bloc

 

pour la ligne de repère, on clique la ou on veut et on écrit le nom du bloc ou autre chose.

 

pour le lisp, on clique sur le nom du bloc et il nous place le repère sur l'origine du bloc (et on a pas le choix de l'emplacement.

 

je voudrais un mélange des 2

 

on clic sur le bloc la ou on veut et il nous ecrit le nom du bloc....

Lien vers le commentaire
Partager sur d’autres sites

Y-a-t'il possibilité de changer le point d'origine du nom du bloc, c'est à dire qu'au lieu que le nom du bloc parte de l'origine du bloc, il parte de la ou l'on clic sur le bloc.?

 

Bonjour,

 

Changes l'expression

pt_lst (list (trans (cdr (assoc 10 dxf_ent)) (car ent) 1)) 

par

pt_lst (list (osnap (trans (cadr ent) (car ent) 01) "_near")) 

 

Si la sélection se fait sur un texte ou un attribut constituant du bloc, pour que le code fonctionne, on peut l'envisager sous cette forme:

 

(defun c:lead_block-name ( / ent dxf_ent typ_ent blk_name pt_lst pt)
 (while (null (setq ent (entsel "\nChoix de l'entité: "))))
 (setq
   dxf_ent (entget (car ent))
   typ_ent (cdr (assoc 0 dxf_ent))
 )
 (if (eq typ_ent "INSERT")
   (progn
     (setq 
       blk_name (cdr (assoc 2 dxf_ent))
       pt_lst (osnap (trans (cadr ent) (car ent) 0) "_near")
     )
     (if (not pt_lst)
       (setq pt_lst (list (osnap (trans (cadr ent) (car ent) 0) "_ins")))
       (setq pt_lst (list pt_lst))
     )
     (while (setq pt (getpoint (car pt_lst) "\nIndiquez le point suivant: "))
       (setq pt_lst (cons pt pt_lst))
     )
     (command "_.leader")
     (foreach n (reverse pt_lst) (command "_none" n))
     (command "" blk_name "")
   )
   (princ "\nEntité n'est pas une insertion de bloc!")
 )
 (prin1)
)

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

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é