CADxp: Jonidre des polylignes 3D par reconaissance des contacts - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Jonidre des polylignes 3D par reconaissance des contacts

#1 L'utilisateur est hors-ligne   thierry.garré 

  • ceinture rouge et blanche 6em dan
  • Groupe : Moderateurs
  • Messages : 3055
  • Inscrit(e) : 30-juin 04
  • LocationAubenas 07 le pays des Chataignes

Posté 12 avril 2008 - 06:23

Bonjour à tous,


Voila j'ai Acad Map2008

mon sujet

j'ai deux séries de polylignes 3d plus ou moins parallèles représentant des bordes de routes.

ces polylignes sont parfaitement jointives .

n'existe-il pas une fonction pour joindre les polylignes 3D, de telle façon qu'en sélectionnant les deux polylignes extrêmes des deux séries le logiciel reconnaissent toutes les autres polylignes en contact et réalise directement de proche en proche la jonction jusqu'au deux autres extrémités de mes bords de routes?

Si d'aventure quelqu'un a une solution.
Thierry Garré

Autocad-Autocad Map-Covadis-Autopiste-Infraworks 360- Navisworks -Recap

Mon "autre vie"
La Salamandre - Chambres d'hôtes en Ardèche
0

#2 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11292
  • Inscrit(e) : 02-septembre 05

Posté 12 avril 2008 - 07:46

Salut,

As-tu essayé Join3dPoly, sur cette page ?
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#3 L'utilisateur est hors-ligne   thierry.garré 

  • ceinture rouge et blanche 6em dan
  • Groupe : Moderateurs
  • Messages : 3055
  • Inscrit(e) : 30-juin 04
  • LocationAubenas 07 le pays des Chataignes

Posté 12 avril 2008 - 19:15

Merci de ta réponse Gilles, je vais essayer et je te tiens au courant
Thierry Garré

Autocad-Autocad Map-Covadis-Autopiste-Infraworks 360- Navisworks -Recap

Mon "autre vie"
La Salamandre - Chambres d'hôtes en Ardèche
0

#4 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11292
  • Inscrit(e) : 02-septembre 05

Posté 12 avril 2008 - 19:40

Oupss !!!

J'avais lu un peu vite, Join3dPoly nécessite de sélectionner toutes les polylignes. Je vais essayer de faire quelque chose qui corresponde mieux à ta demande.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#5 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11292
  • Inscrit(e) : 02-septembre 05

Posté 12 avril 2008 - 20:56

Voilà,

Il suffit de sélectionner une polyligne 3d (pas forcément à une extrémité) et toutes celles qui sont en contact par leur extrémité sont jointes.
La poly finale prend les propriétés de celle qui a été sélectionnée. Le sens de la poly peut changer (mais on peut l'inverser avec R_Pline)

PS : ce LISP risque de ne pas fonctionner avec les version antérieures à 2007 :
; erreur: une exception s'est produite: 0xC0000005 (Violation d'accès)
; avertissement: fonction unwind ignorée erreur inconnue

Cette erreur semble due au fait que ces versions ne supportent pas l'ajout ou la suppression simultanée de plusieurs sommets.

;; AUTOJOIN (gile)
;; Unit toutes les polylignes 3d jointives à la polyligne 3d sélectionnée

(defun c:autojoin (/ ent pl1 lst1 pt ss pl2 lst2)
  (vl-load-com)
  (or *acad* (setq *acad* (vlax-get-acad-object)))
  (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
  (if (and (setq
	     ent (car
		   (entsel "\nSélectionnez une polyligne 3d: ")
		 )
	   )
	   (setq pl1 (vlax-ename->vla-object ent))
	   (= (vla-get-ObjectName pl1) "AcDb3dPolyline")
	   (= (vla-get-Closed pl1) :vlax-false)
	   (setq lst1 (3d-coord->pt-lst (vlax-get pl1 'Coordinates)))
	   (setq pt (last lst1))
      )
    (progn
      (vla-StartUndoMark *acdoc*)
      (vla-ZoomExtents *acad*)
      (while
	(and
	  (or
	    (and
	      (setq ss (ssget "_C"
			      (trans pt 0 1)
			      (trans pt 0 1)
			      '((0 . "POLYLINE") (70 . 8))
		       )
	      )
	      (setq ss (ssdel ent ss))
	      (= 1 (sslength ss))
	    )
	    (and
	      (not (vlax-put pl1
			     'Coordinates
			     (apply 'append (setq lst1 (reverse lst1)))
		   )
	      )
	      (setq pt (last lst1))
	      (setq ss (ssget "_C"
			      (trans pt 0 1)
			      (trans pt 0 1)
			      '((0 . "POLYLINE") (70 . 8))
		       )
	      )
	      (setq ss (ssdel ent ss))
	      (= 1 (sslength ss))
	    )
	  )
	  (setq pl2 (vlax-ename->vla-object (ssname ss 0)))
	  (setq lst2 (3d-coord->pt-lst (vlax-get pl2 'Coordinates)))
	  (or (equal pt (car lst2) 1e-9)
	      (and (setq lst2 (reverse lst2)) (equal pt (car lst2) 1e-9))
	  )
	)
	 (vlax-put pl1
		   'Coordinates
		   (apply 'append (setq lst1 (append lst1 (cdr lst2))))
	 )
	 (entupd ent)
	 (vla-delete pl2)
	 (setq pt (last lst2))
      )
      (vla-ZoomPrevious *acad*)
      (vla-EndUndoMark *acdoc*)
    )
  )
  (princ)
)

;;; 3d-coord->pt-lst Convertit une liste de coordonnées 3D en liste de points
;;; (3d-coord->pt-lst '(1.0 2.0 3.0 4.0 5.0 6.0)) -> ((1.0 2.0 3.0) (4.0 5.0 6.0))

(defun 3d-coord->pt-lst	(lst)
  (if lst
    (cons (list (car lst) (cadr lst) (caddr lst))
	  (3d-coord->pt-lst (cdddr lst))
    )
  )
) 

<font class=edite>[Edité le 13/4/2008 par (gile)]</font>
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#6 L'utilisateur est hors-ligne   thierry.garré 

  • ceinture rouge et blanche 6em dan
  • Groupe : Moderateurs
  • Messages : 3055
  • Inscrit(e) : 30-juin 04
  • LocationAubenas 07 le pays des Chataignes

Posté 13 avril 2008 - 18:54

Merci Gile c'est exactement ce que je souhaitai.

[Edité le 13/4/2008 par thierry.garré]
Thierry Garré

Autocad-Autocad Map-Covadis-Autopiste-Infraworks 360- Navisworks -Recap

Mon "autre vie"
La Salamandre - Chambres d'hôtes en Ardèche
0

#7 L'utilisateur est hors-ligne   philsogood 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2482
  • Inscrit(e) : 03-mars 10

Posté 14 mars 2014 - 11:48

hello
damned! je ne peux aps joindre mes polylignes... pour une raison assez simple les PL 3D ne sont aps jointives... bon en même temps il faut aller la chercher loin la différence : huit chiffres après la virgule
savez comment je peux faire en sorte que le lisp tourne (en sachant que l'arrondi qui se fait n' aucune importance - qui travaille avec 8 chiffres après la virgule?)
...
en cherchant un peu j'ai trouve un lisp de bonuscad pour arrondir les valuers et pouvoir faire mes belles poly3D
http://cadxp.com/top...dpost__p__35829
Phil
Projeteur Revit - traitement des eaux
0

#8 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11292
  • Inscrit(e) : 02-septembre 05

Posté 14 mars 2014 - 12:25

Salut,

non, ce n'était vraiment pas loin.

Dans l'expression :
          (or (equal pt (car lst2) 1e-9)
              (and (setq lst2 (reverse lst2)) (equal pt (car lst2) 1e-9))
          )

remplace 1e-9 par 1e-7 ou 1e-7. c'est la tolérance dans la comparision (9, 7 ou 6 chiffres après la virgule).
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#9 L'utilisateur est hors-ligne   Olivier Eckmann 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1329
  • Inscrit(e) : 29-décembre 11
  • LocationLongjumeau (91)

Posté 14 mars 2014 - 13:57

Bonjour,

Personnellement, quand j'ai des soucis d'arrondiinfime de coordonnées, je fait un wbloc des objets à arrondir, puis un export (enregistrer sous) DXF et dans les options je spécifie X décimales (par ex 6) ainsi toutes les coordonnées sont arrondies à 6 décimales. On ferme le DXF, puis on le ré-ouvre et je ré-importe dans mon dessin. Et hop tout fonctionne.

Olivier
0

#10 L'utilisateur est hors-ligne   x_all 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3631
  • Inscrit(e) : 27-juin 06
  • Location04190

Posté 14 mars 2014 - 14:03

^^
encore un lisp qui sera plus qu'utile... merci (gile) :)
"La possibilité d'expliquer m'a toujours paru comme la seule excuse à l’existence de la parole"
JL Godard

quelques trucs sur autocad
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)