Aller au contenu

Polylignes 2D/3D \"presque\" fermees ?


lecrabe

Messages recommandés

 

Hello

 

J'ai des Polylignes 2D (Splinees ou pas) , Polylignes 3D qui sont "presque" fermées

voire même pour certaines d'entre elles le point d'arrivée revient au point de départ

MAIS elles ne sont pas closes !!!

 

Comment sélectionner (retrouver) toutes ses polylignes 2D ou 3D pour lesquelles

la distance de fermeture serait

 

Je pense qu'il faut une routine Lisp ou plutôt VLisp !

 

1) Question sur le parametre : Distance Maximum / Tolerance de fermeture = xx.xx

 

2) Sélection AutoCAD classique ou bien TOUT le dessin ...

 

Traitement .... et simplement sélection des polylignes (parmi la sélection initiale) pour lesquelles la distance théorique de fermeture est

 

Sachant que cette distance théorique de fermeture peut être égale à ZERO !

 

Ainsi apres le traitement, on pourra facilement les CLORE ou pas !!!

 

Merci d'avance, Le Decapode

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un petit truc vite fait, appelé "test" paeceque je n'ai pas d'idée...

 

(defun c:test (/ delta ss result start end)
 (vl-load-com)
 (setq	fltr (list '(-4 . "[b]		   '(-4 . "[b]		   '(0 . "LWPOLYLINE")
	   '(-4 . "[b]		   '(-4 . "&")
	   '(70 . 1)
	   '(-4 . "NOT>")
	   '(-4 . "AND>")
	   '(-4 . "[b]		   '(0 . "POLYLINE")
	   '(-4 . "[b]		   '(-4 . "&")
	   '(70 . 113)
	   '(-4 . "NOT>")
	   '(-4 . "AND>")
	   '(-4 . "OR>")
	   (cons 410 (getvar "CTAB"))
     )
 )
 (and
   (setq
     delta (getdist "\nDistance Maximum / Tolerance de fermeture: ")
   )
   (princ "\nSélectionnez les polyligne ou [b].")
   (or (ssget fltr) (ssget "_X" fltr))
   (setq result (ssadd))
   (vlax-for p	(setq ss (vla-get-ActiveSelectionSet
		   (vla-get-ActiveDocument
		     (vlax-get-acad-object)
		   )
		 )
	)
     (if (			(vlax-curve-getEndPoint p)
      )
      delta
  )
(ssadd (vlax-vla-object->ename p) result)
      T
     )
   )
   (not (vla-delete ss))
   (sssetfirst nil result)
 )
 (princ)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

 

Je me contente de clore les objets

 

(defun c:clo(/ dis doc ent sel tot)
 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (initget 3)
 (and	(setq dis (getreal "\nIndiquez la tolérance : "))
(ssget (list (cons 0 "LWPOLYLINE,POLYLINE") (cons 70 0)))
   (progn
     (setq tot 0)
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(and (<= (distance (vlax-curve-getStartPoint ent) (vlax-curve-getEndPoint ent)) dis)
  (setq tot (1+ tot))
  (vla-put-closed ent :vlax-true)
)
     )
     (princ (strcat "\nFermeture de " (itoa tot) " objet(s)."))
     (vla-delete sel)
   )
 )
 (vla-endundomark doc)
 (princ)
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Merci les Super Lispeurs ! :) :D :cool:

 

Je vais tester tout ça MAIS petite précision pour Patrick_35 :

je ne veux pas les FERMER mais simplement les DETECTER donc une simple sélection

des polylignes en sortie est parfaite pour moi !

 

Ca ressemble à un petit challenge ... :P

 

Le Decapode "détecteur de polylignes presques closes/fermées"

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Tests en cours (MAP 2008/2006) avec la routine de Gilles nommée : POL_CLOSE

 

3 polylignes 2D simples (SCG) pour mon test avec les valeurs de trous suivants :

30.4 , 6.4 , 0 (point de départ = point d'arrivée)

 

Avec une tolerance de 10 : aucune polyligne sélectionnée

Avec une tolérance de 20 : idem

Avec une tolérance de 30 : idem

Avec une tolérance de 31 : 3 polylignes dans la sélection

 

No comprendo

 

Le Decapode "surpris"

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Par contre la routine CLO de Patrick_35 semble parfaitement fonctionner

sur les polylignes 2D simples :)

 

SAUF que je désire simplement une sélection en sortie ! :o

et non pas une fermeture automatique !

 

En effet elle ne traite pas les pollignes 3D et les polylignes D lissées ! :(

 

Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Re

 

J'avais pas tout compris

Une version corrigée

 

(defun c:clo(/ dis doc ent js sel)
 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (initget 3)
 (and	(setq dis (getreal "\nIndiquez la tolérance : "))
(ssget (list	(cons 0 "LWPOLYLINE,POLYLINE")
		(cons -4 "[b]<[/b]not")
		(cons 70 1)
		(cons -4 "not>")
       )
)
   (progn
     (setq js (ssadd))
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(and (<= (distance (vlax-curve-getStartPoint ent) (vlax-curve-getEndPoint ent)) dis)
  (ssadd (vlax-vla-object->ename ent) js)
)
     )
     (vla-delete sel)
     (sssetfirst nil js)
   )
 )
 (vla-endundomark doc)
 (princ)
)

 

gile

C'est exacte pour les poly splinée ou lissée.

Je suppose que ton filtre est plus élaboré que le mien, mais je n'ai pas le temps d'approfondir.

 

ps : correction de la balise

 

@+

 

[Edité le 19/11/2008 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Avec une tolerance de 10 : aucune polyligne sélectionnée

Avec une tolérance de 20 : idem

Avec une tolérance de 30 : idem

Avec une tolérance de 31 : 3 polylignes dans la sélection

 

No comprendo

 

Moi non plus, ça fonctionne chez moi.

Le code est semblable à celui de Patrick...

 

Je suppose que ton filtre est plus élaboré que le mien

Il est surtout plus long !

Tout ça juste pour écarter aussi les maillages.

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

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

J'ai changé de PC, toujours avec un MAP 2008

et avec TON programme, j'ai le MEME probleme ! :o

 

Il ne sélectionne mes polylignes 2D simples QUE SI je choisis une tolérance "grande" !! :(

 

J'ai cru à un moment que le problème dépendait du niveau de ZOOM,

mais je n'ai pas pu reproduire ?

 

Je pense avoir trouvé le problème, si je choisis UNE SEULE polyligne, le traitement est OK !!!

 

Tu as une idée ?

 

Le Decapode "enqueteur"'

 

Autodesk Expert Elite Team

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é