Aller au contenu

Fil de liaison (Polyligne) entre 2 blocs


lecrabe

Messages recommandés

 

Hello

 

J'ai donc de nombreux blocs (dont le nom est XXXXXX, mais pensez par exemple à des Regards/Tampons) et d'autre part un autre bloc de N lignes de textes (=Attributs qui sont en fait des infos techniques sur le regard/tampon)

 

Chaque bloc (aussi bien le regard/tampon que le bloc d'infos) contient 1 attribut (invisible bien sur) au contenu identique dont le nom est IDENTIFIANT (mais ca pourrait etre YYYYYY)

 

En selectionnant des centaines/milliers de blocs XXXXXX et blocs YYYYYY, je desire qu'une polyligne (de 2/3 segments) soit dessinée automatiquement sur le calque courant entre chaque bloc dont l'attribut est IDENTIFIANT ( avec eventuellement une pointe de fleche )

 

Pourquoi 2/3 segments car ainsi, on pourra facilement, saisir une poignée bleue pour "courber" la ligne de rappel pour des raisons d'esthétique !

 

La polyligne ira du point d'insertion de l'attribut XXXXXX au point d'insertion de l'attribut YYYYYY. En fait il s'agit d'une sorte de repère avec une ligne de rappel (multi-segments) de longueur variable !

 

Je n'ai pas réussi à faire ce que je voulais avec les commandes / possibilités normales d'AutoCAD, mais bon je suis peut etre un peu fatigué :exclam:

 

Dans l'attente de vos suggestions ou programme Lisp adéquat, je vous souhaite une excellente semaine :)

 

Le Decapode

 

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

coucou

 

je n'ai pas compris un truc,

il s'agit de relier le bloc dessiné (tampon) et le bloc textuel (information)

si leurs données communes sont le même contenu

dans la valeur de l'attribut IDENTIFIANT,

je pense faire ça sans grand tracas.

 

tiens nous au courant.

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

 

Bonsoir

 

Désolé Didier, je ne vois pas le pourquoi de tes interrogations !?

 

Mais j'ai d'un coté des centaines de blocs (REGARD par exemple) avec au moins un attribut en général invisible (Etiquette: ID_REG) et de l'autre un peu plus loin (Où il y a de la place) un autre bloc (REGARD_INFO par exemple) avec de multiples attributs visibles (les caractéristiques techniques des regards) et un attribut en général invisible (Etiquette: ID_REG)

 

Je désire que la routine trace automatiquement une polyligne de 2/3 segments entre le point d'insertion du bloc et le point d'insertion de l'étiquette ID_REG du bloc d'information correspondant SI et SELEMENT SI les 2 etiquettes ID_REG ont un contenu IDENTIQUE !

 

Cela me semble clair et limpide !

 

Le Decapode

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Sinon tu as vu j'ai quand même été respectueux, j'ai dis les ancien et non les vieux (mince je l'ai dis)

 

Bon je vous laisse vous échauffer en paix et non en pets sinon attention l'explosion

 

:D

 

[Edité le 2/10/2007 par Eric]

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Une proposition :

- l'utilisateur entre le nom du bloc (REGARD par exemple) ou sélectionne, après avoir fait Entrée ou clic droit, une référence du bloc insérée dans le dessin ;

- il fait de même pour le bloc à lier (REGARD_INFO par exemple)

- il entre l'étiquette de l'attribut commune au 2 blocs (ID_REG par exemple)

- une polyligne 3d (au cas où les blocs ne seraient pas dans le même plan) à 4 sommets est crée entre chaque blocs des deux séries dont la valeur de l'attribut ID_REG est identique.

 

(defun c:linkatt (/ div3 acdoc bl1 b2 la1 la2 at1 at2 lst1 lst2)

 (vl-load-com)

 (defun div3 (p1 p2 / v)
   (setq v (mapcar '(lambda (x1 x2) (/ (- x2 x1) 3.0)) p1 p2))
   (list p1
  (mapcar '+ p1 v)
  (mapcar '+ p1 v v)
  p2
   )
 )

 (setq	acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
space (if (= (getvar "CVPORT") 1)
	(vla-get-PaperSpace acdoc)
	(vla-get-ModelSpace acdoc)
      )
 )
 (if (= ""
 (setq bl1
	(getstring
	  T
	  "\nEntrez le nom du bloc (ou Entrée pour sélection): "
	)
 )
     )
   (while
     (not
(and (setq bl1 (car (entsel "\nSélectionnez le bloc à lier: ")))
     (= "INSERT" (cdr (assoc 0 (entget bl1))))
     (setq bl1 (cdr (assoc 2 (entget bl1))))
)
     )
   )
 )
 (setq bl2 bl1)
 (while (= (strcase bl1) (strcase bl2))
   (if	(= ""
   (setq bl2
	  (getstring
	    T
	    "\nEntrez le nom du bloc à lier au premier (ou Entrée pour sélection): "
	  )
   )
)
     (while
(not
  (and
    (setq bl2 (car (entsel "\nSélectionnez le bloc à lier: ")))
    (= "INSERT" (cdr (assoc 0 (entget bl2))))
    (setq bl2 (cdr (assoc 2 (entget bl2))))
  )
)
     )
   )
 )
 (while (not (setq tag
	     (strcase
	       (getstring T "\nEntrez l'étiquette de l'attribut commun: ")
	     )
      )
 )
 )
 (if (ssget "_X" (list '(0 . "INSERT") (cons 2 bl1)))
   (vlax-for b	(vla-get-ActiveSelectionSet acdoc)
     (if (= (vla-get-HasAttributes b) :vlax-true)
(foreach a (vlax-invoke b 'getAttributes)
  (if (= (vla-get-TagString a) tag)
    (setq lst1 (cons (cons (vla-get-TextString a)
			   (vlax-get b 'InsertionPoint)
		     )
		     lst1
	       )
    )
  )
)
     )
   )
 )
 (if (ssget "_X" (list '(0 . "INSERT") (cons 2 bl2)))
   (vlax-for b	(vla-get-ActiveSelectionSet acdoc)
     (if (= (vla-get-HasAttributes b) :vlax-true)
(foreach a (vlax-invoke b 'getAttributes)
  (if (= (vla-get-TagString a) tag)
    (setq lst2 (cons (cons (vla-get-TextString a)
			   (vlax-get a 'InsertionPoint)
		     )
		     lst2
	       )
    )
  )
)
     )
   )
 )
 (if (and lst1 lst2)
   (progn
     (vla-StartUndoMark acdoc)
     (mapcar '(lambda (x)
	 (if (setq li (car (vl-member-if
			     '(lambda (p)
				(= (car x) (car p))
			      )
			     lst2
			   )
		      )
	     )
	   (vlax-invoke
	     space
	     'add3dpoly
	     (apply 'append (div3 (cdr x) (cdr li)))
	   )
	 )
       )
      lst1
     )
     (vla-EndUndoMark acdoc)
   )
 )
 (princ)
)

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

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é