Aller au contenu

jonction de polylignes


ragimund

Messages recommandés

bonjour,

je reçois des fichiers exportés d'archicad qui sont ok

cependant les polygones "épais" sont transformés en segments de polyligne "épais" jointif mais pas raccordés (voir image)

http:// http://photos1.blogger.com/blogger/5408/1866/1600/ExportPoly.0.jpg

je sais raccorder ces segments un par un mais y-a-t-il une fonction qui permette de changer globalement l'extrémité des polylignes de façon à ce que tous les raccords soient correct?

merci

 

Lien vers le commentaire
Partager sur d’autres sites

Pour ce qui est de ton impossibilité de faire un pedit multiple, je ne vois pas d'ou peut venir le problème (LT ?).

 

Sinon, ça peut t'être utile, J'ai un premier lisp qui permet de passer la largeur de toutes les polylignes à 0 (sans décomposer celles qui sont dans des blocs par exemple) :

 

 (defun c:poly0	()
(vl-load-com)
(setq a (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for bl a
(vlax-for ent bl
(if (and (vl-string-search "AcDb" (vla-get-objectname ent))(vl-string-search "Polyline" (vla-get-objectname ent)))
(vla-put-ConstantWidth ent 0)
)
)
)
(vla-regen (vla-get-activedocument (vlax-get-acad-object)) acActiveViewport)
)

 

Si par contre tu ne veux joindre tes polylignes que calque par calque (c'est-à-dire que les polylignes de calques différents ne se joindront pas), tu peux utiliser ce lisp que quelqu'un du forum avait fait (oups, je ne sais plus qui) :

 

 (defun c:pedit2	(/	       acadver	     fuzz
	 hasLineOrArc  i	     is3DpolylineOr3Dmesh
	 layer	       n	     objet
	 objetGet      oldPeditaccept
	 ss	       triplet1	     triplet2
	 triplets
	 )
 (setq fuzz 0.0) ; tolerance pour joindre ou non

 (setq acadver (substr (getvar "acadver") 1 4))
 (if (>= acadver "16.1")
   (progn
     (setq oldPeditaccept (getvar "peditaccept"))
     (setvar "peditaccept" 1)
     ) ;_ Fin de progn
   ) ;_ Fin de if

 (setq ss (ssget (list (cons 00 "*polyline,line,arc"))))
 (setq hasLineOrArc nil)
 (setq i 0)
 (setq	n (if ss
    (sslength ss)
    0
    ) ;_ Fin de if
) ;_ Fin de setq
 (setq triplets nil)

 ;; Construire autant de triplets que de calques, comme suit:
 ;; Triplet == (calque selection-set hasLineOrArc)
 ;; Filtrer les 3dPolyline et les 3DMesh
 (while (< i n)
   (setq objet (ssname ss i))
   (setq objetGet (entget objet))
   (setq hasLineOrArc
   (if
     (member (strcase (cdr (assoc 0 objetGet)) t)
	     '("arc" "line")
	     ) ;_ Fin de member
      t
      nil
      ) ;_ Fin de if
  ) ;_ Fin de setq
   (setq layer (cdr (assoc 8 objetGet)))
   (setq polylineFlag (cdr (assoc 70 objetGet)))
   (setq is3DpolylineOr3Dmesh
   (and	polylineFlag
	(> (boole 1 polylineFlag (+ 8 16)) 0)
	) ;_ Fin de and
  ) ;_ Fin de setq

   (cond
     (is3DpolylineOr3Dmesh nil) ; Ignorer
     ((setq triplet1 (assoc layer triplets))
      (setq triplet2 (list layer
		    (ssadd objet (cadr triplet1))
		    (or hasLineOrArc (caddr triplet1))
		    ) ;_ Fin de list
     ) ;_ Fin de setq
      (setq triplets (subst triplet2 triplet1 triplets))
      )
     (t
      (setq triplet2
      (list
	(list layer (ssadd objet (ssadd)) hasLineOrArc)
	) ;_ Fin de list
     ) ;_ Fin de setq
      (setq triplets (append triplet2 triplets))
      )
     ) ;_ Fin de cond
   (setq i (1+ i))
   ) ;_ Fin de while

 ;; Traiter un triplet après l'autre.
 (foreach triplet1 triplets
   (setq layer (car triplet1))
   (setq ss (cadr triplet1))
   (setq hasLineOrArc (caddr triplet1))
   (princ (strcat "\n"
	   (itoa (sslength ss))
	   " objets sélectionnés sur le calque '"
	   layer
	   "'."
	   ) ;_ Fin de strcat
   ) ;_ Fin de princ
   (cond
     ((not ss) nil)
     ((< (sslength ss) 2) nil) ; Au moins 2 segments requis
     ((>= acadver "16.1") ; peditaccept déjà fixé à 1
      (command "_pedit" "_multiple" ss "" "_join" fuzz "")
      )
     (hasLineOrArc
      (command "_pedit" "_multiple" ss "" "_yes" "_join" fuzz "")
      )
     (t (command "_pedit" "_multiple" ss "" "_join" fuzz ""))
     ) ;_ Fin de cond
   ) ;_ Fin de foreach

 (if (>= acadver "16.1")
   (setvar peditaccept oldPeditaccept)
   ) ;_ Fin de if
 (princ)
 )

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Euh, le probleme est qu'il a une LT donc pas de lisp a moins d'avoir LT Extender?

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Lien vers le commentaire
Partager sur d’autres sites

voici une Macro simple :

 

^C^Cselect;\pedit;m;p;;J;;;

 

1. je sélectionne toutes les lignes concernés, puis ENTREE... c'est fait

 

ou cette Macro plus radicale qui traite tout le dessin (peut-être plus risqué...!!!...)

 

^C^Cpedit;TOUT;p;;J;;;

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

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é