Aller au contenu

Routine pour selectionner les Objets lineaires partant / arrivant sur les Blocs (ou Points)


lecrabe

Messages recommandés

Hello

J ai cherche dans mon stock mais je n ai pas trouve et mes autres recherches ne sont pas satisfaisantes !

Voir titre ... Mon Idee :

1) Selection classique des Blocs (statiques ET Dynamiques !) et Points

2) Selection classique des Objets lineaires (LINE, ARC, PLINE 2D/3D splinees/courbees ou pas)

3) Question: Distance FUZZ en fait Rayon de recherche - Valeur par defaut = 0.01

Ensuite on va analyser les points de Depart ET de Fin des Objets lineaires (Selection 2)

pour trouver / selectionner les Eventuels Blocs / Points de la Selection 1 dans le Rayon de recherche FUZZ ...

A LA FIN, on garde en selection les Objets lineaires qui correspondent et C TOUT !

Dans l attente de vos idees lumineuses ou routines magiques ...

Au fait si on tombe sur une PLine 2D/3D close / fermee alors SVP on ne retient QUE le Point de Depart pour analyse !

Merci, Bye, lecrabe

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Coucou @lecrabe,
Il faut uniquement garder en sélection les objets linéaires et non les blocs/points aux extrémités de ces objets ?
Quel est le but de la routine précisément ? Est-ce possible d'avoir un extrait de .dwg pour effectuer les tests ?
Je vais voir ce qu'il est possible de faire en fonction de mes dispos 🙂

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Hello

OUI c pour trouver les Objets lineaires (au niveau du Depart / Fin) qui sont (ou presque parfaitement) aux XYZ des Blocs / Points

OOPS / SORRY Pas d AutoCAD et PC pour le moment pour t envoyer un DWG !

Bye, lecrabe

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Dans ce cas, je ne comprends pas bien pourquoi analyser les extrémités des objets linéaires si dans tous les cas, les blocs/points aux extrémités ne sont pas considérés et qu'on ne garde que les objets linéaires dans la sélection finale...En quoi consiste cette "analyse" ?
De plus, si je comprends bien les blocs/points se trouvant aux extrémités des objets linéaires doivent appartenir au jeu de sélection initial, donc imaginons que mon jeu de sélection comporte 8 blocs, appartenant tous à une seule et même polyligne 3D. Le programme tel que tu le décris va tourner 8 fois, sélectionner 8 fois la même polyligne (à partir de coordonnées différentes), analyser 8 fois la polyligne et renvoyer strictement les mêmes résultats (quels "résultats" du coup ?) car les blocs aux extrémités n'auront pas bougés pour au final ne garder en sélection que l'unique polyligne 3D, ne donnant aucun renseignement sur "l'analyse" réalisée (8 fois) sur les 2 extrémités de cette polyligne et en ayant mouliné 7 fois de trop >w<

Ou alors j'ai le cerveau ramolli et je n'ai pas bien saisie le déroulement du programme souhaité et le but voulu... sowwy..

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Luna

Ce que je comprends de la demande de @lecrabe :

  • Présence de lignes, polylignes 2D et 3D, arcs.
  • La demande est de créer un jeu de sélection de ceux qui ont un point ou un bloc (en prenant le fuzz en compte).
  • Certains ont un "point" ou un bloc à une extrémité, d'autres non.

Ce que je ne sais pas, c'est si l'entité a deux points, début et fin qui sont dans le fuzz, qu'en faire ?

Pas vraiment compliqué, mais à préciser avant de se mettre au travail.

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

Hello @didier et @Luna

OUI Didier

Exemple d une Polyligne 2D/3D qui revient presque au point de départ : si 2 Blocs et/ou Points à chaque extrémité, alors on sélectionne LA Polyligne

Si N linéaires au départ / arrivée sur un Bloc / Point, on sélectionne les N linéaires...

Merci, Bye, lecrabe

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello @Luna

Je pensais avoir été "clair" ?

SVP je veux détecter / selectionner les Linéaires qui ont des Blocs (Statiques ET Dynamiques) / Points aux EXTREMITES SEULEMENT (ou très proches) ... Et c tout !

Pourquoi : car parfois CES Linéaires ne sont pas sur le BON Calque par exemple !

Avec la sélection obtenue, je vais forcer Une Propriété NON UTILISEE (couleur ou type ou epaisseur) et étudier / modifier après si necessaire UNE PAR UNE 

Si tu as un Algo de compétition, tu n hésites pas ... Car en effet surtout dans le cas de N linéaires partant / arrivant sur un Bloc / Point, il faudrait ne pas faire N fois l analyse !?

Bye, lecrabe

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Très rapidement, je testerais un truc du genre...

(defun c:test ( / js ss dfzz n ent pt_start pt_end)
  (while
    (null
      (setq js
        (ssget
          (list
            '(0 . "LINE,ARC,*POLYLINE")
            '(-4 . "<NOT") '(-4 . "&") '(70 . 112) '(-4 . "NOT>")
            (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
            (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
          )
        )
      )
    )
  )
  (setq ss (ssadd))
  (if (not dfzz) (setq dfzz 1E-02))
  (repeat (setq n (sslength js))
    (setq
      ent (ssname js (setq n (1- n)))
      pt_start (vlax-curve-getStartPoint ent)
      pt_end (vlax-curve-getEndPoint ent)
    )
    (cond
      ((and
        (ssget "_X"
          (list
            '(0 . "POINT,INSERT")
            (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
            (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
            '(-4 . "<AND")
              '(-4 . ">=,>=,>=")
              (cons 10 (mapcar '- pt_start (list dfzz dfzz dfzz)))
              '(-4 . "<=,<=,<=")
              (cons 10 (mapcar '+ pt_start (list dfzz dfzz dfzz)))
            '(-4 . "AND>")
          )
        )
        (ssget "_X"
          (list
            '(0 . "POINT,INSERT")
            (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
            (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
            '(-4 . "<AND")
              '(-4 . ">=,>=,>=")
              (cons 10 (mapcar '- pt_end (list dfzz dfzz dfzz)))
              '(-4 . "<=,<=,<=")
              (cons 10 (mapcar '+ pt_end (list dfzz dfzz dfzz)))
            '(-4 . "AND>")
          )
        )
      )
      (ssadd ent ss)
      )
    )
  )
  (if ss (sssetfirst nil ss))
  (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

Hello @bonuscad 

Merci de tes efforts mais Desole mais je n arrive a RIEN avec ta routine !

La 1ere selection , c le Lineaire ("LINE,ARC,*POLYLINE")

et la 2eme c quoi ? ... je ne peux rien selectionner !

En regardant le code je croyais que c etait TOUT le DWG (POINT,INSERT) !?

A mon avis UNE SEULE Selection classique serait peut etre plus plus simple !?

Je vais vous preparer un DWG de test ...

Merci, Bye, lecrabe

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Essaie avec ça. C'est un peu brutal, donc facilement exponentiel si beaucoup de linéaire et de point.

(vl-load-com)
(defun C:PolyOnPoint ( / dFuzz ssPoly oPoly ssPonc oPonc PtDeb PtFin PT I J iNbPoncDeb iNbPoncFin)
  (initget 4)
  (if (not (setq dFuzz (getreal "\nRayon de recherche <0.01> : ")))
    (setq dFuzz 0.01)
  )
  (if (and (princ "\nSélectionner les linéaires : ")
	   (setq ssPoly (ssget (list (cons 0 "ARC,LINE,LWPOLYLINE"))))
	   (princ "\nSélectionner les ponctuels : ")
	   (setq ssPonc (ssget (list (cons 0 "POINT,INSERT"))))
      )
    (progn
      (setq ssOK (ssadd))
      (setq I 0)
      (repeat (sslength ssPoly)
	(setq oPoly (ssname ssPoly I))
	(setq I (1+ I))
	(setq PtDeb (vlax-curve-GetStartPoint oPoly))
	(setq PtFin (vlax-curve-GetEndPoint oPoly))
	(setq iNbPoncDeb 0)
	(setq iNbPoncFin 0)
	(setq J 0)
	(repeat (sslength ssPonc)
	  (setq oPonc (ssname ssPonc J))
	  (setq J (1+ J))
	  (setq PT (cdr (assoc 10 (entget oPonc))))
	  (if (and (= iNbPoncDeb 0) (equal PT PtDeb dFuzz))
	    (setq iNbPoncDeb 1)
	  )
	  (if (and (= iNbPoncFin 0) (equal PT PtFin dFuzz))
	    (setq iNbPoncFin 1)
	  )
	)
	(if (and (>= iNbPoncDeb 1) (>= iNbPoncFin 1))
	  (ssadd oPoly ssOK)
	)
      )
      (sssetfirst nil ssOK)
    )
  )
)

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Hello @bonuscad @Olivier Eckmann @Luna @didier

Je dois etre tres fatigue car je n arrive "a rien" avec les 2 routines de Olivier et Bruno (Bonuscad) !

Voici un DWG de test ...

Ou alors je me suis mal exprime dans mon CDC/CCTP !?

Merci d avance, Bye, lecrabe

 

Lineaire_Bloc_Select.zip

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Dans ton dessin, aucun linéaire n'a 1 bloc à chaque extrémité. Il y en a au départ ou à l'arrivée, mais jamais au départ ET à l'arrivée.

On peut modifier l'algo si la recherche doit se limiter à au moins 1 extrémité et non pas les 2, dans la ligne 

(if (and (>= iNbPoncDeb 1) (>= iNbPoncFin 1))

remplacer AND par OR

 

Olivier

 

Lien vers le commentaire
Partager sur d’autres sites

Citation

Ensuite on va analyser les points de Depart ET de Fin des Objets lineaires

Même remarque qu'Olivier

dans mon code, substitue (à la ligne 25)  ((and -> ((or

Citation

pour trouver les Objets lineaires (au niveau du Depart / Fin) qui sont (ou presque parfaitement) aux XYZ des Blocs / Points

Et au cas ou, tu ne voudrais pas tester les Z, il faudrait changer les lignes:

'(-4 . ">=,>=,>=") -> '(-4 . ">=,>=")

et

'(-4 . "<=,<=,<=") -> '(-4 . "<=,<=")

  • Upvote 1

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

Hello @Olivier Eckmann @bonuscad @Luna @didier

 

J ai pourtant bien reflechi avec d ecrire mon Sujet / Post !

>>> suite on va analyser les points de Depart ET de Fin des Objets lineaires <<<

 

Et donc tout le monde a compris qu il y a avait un Bloc au Depart ET a l Arrivee !

En fait pour moi, tout etait possible : 1 Bloc Depart OU Arrivee ou Depart ET Arrivee 

 

Je vous prie de bien vouloir m excuser de "mon mauvais CDC / CCTP" !

 

Merci Bruno et Olivier, ca marche !

 

Question pour Olivier : quelle serait la Modif dans ton Code si je ne voulais pas traiter le Z des Blocs

Donc analyser une distance 2D au sol un peu comme la Modif proposee par Bruno ?

 

MERCI, Bonne journee, Bye, lecrabe

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Voilà 

(vl-load-com)

(defun C:PolyOnPoint ( / Point2D dFuzz ssPoly oPoly ssPonc oPonc PtDeb PtFin PT I J iNbPoncDeb iNbPoncFin)

  (defun Point2D (PT)
    (list (car PT) (cadr PT) 0.0)
  )
  
  (initget 4)
  (if (not (setq dFuzz (getreal "\nRayon de recherche <0.01> : ")))
    (setq dFuzz 0.01)
  )
  (initget 1 "Oui Non")
  (setq b2D (= "Oui" (getkword "\nLimiter la recherche en 2D [Oui/Non] : ")))
  
  (if (and (princ "\nSélectionner les linéaires : ")
	   (setq ssPoly (ssget (list (cons 0 "ARC,LINE,LWPOLYLINE"))))
	   (princ "\nSélectionner les ponctuels : ")
	   (setq ssPonc (ssget (list (cons 0 "POINT,INSERT"))))
      )
    (progn
      (setq ssOK (ssadd))
      (setq I 0)
      (repeat (sslength ssPoly)
	(setq oPoly (ssname ssPoly I))
	(setq I (1+ I))
	(setq PtDeb (vlax-curve-GetStartPoint oPoly))
	(if b2D (setq PtDeb (Point2D PtDeb)))
	(setq PtFin (vlax-curve-GetEndPoint oPoly))
	(if b2D (setq PtFin (Point2D PtFin)))
	(setq iNbPoncDeb 0)
	(setq iNbPoncFin 0)
	(setq J 0)
	(while (and (< J (sslength ssPonc))
		    (= iNbPoncDeb 0)
		    (= iNbPoncFin 0)
	       )
	  (setq oPonc (ssname ssPonc J))
	  (setq J (1+ J))
	  (setq PT (cdr (assoc 10 (entget oPonc))))
	  (if b2D (setq PT (Point2D PT)))
	  (if (and (= iNbPoncDeb 0) (equal PT PtDeb dFuzz))
	    (setq iNbPoncDeb 1)
	  )
	  (if (and (= iNbPoncFin 0) (equal PT PtFin dFuzz))
	    (setq iNbPoncFin 1)
	  )
	)
	(if (or (>= iNbPoncDeb 1) (>= iNbPoncFin 1))
	  (ssadd oPoly ssOK)
	)
      )
      (sssetfirst nil ssOK)
    )
  )
)

 

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Hello @bonuscad et @Olivier Eckmann

Encore MERCI pour vos Routines ! 

Au fait j ai "detourne" l usage de vos Routines pour trouver / selectionner simplement les Lineaires avec :

-- 1 Bloc a chaque Extremite (AND)

-- 1 Bloc au Depart OU a la Fin (OR)

Par contre en Lisp / VLisp, il n y a pas le XOR !!

SVP est ce possible d avoir une nouvelle version de vos Routines en Mode XOR ?

DONC selectionner seulement les Lineaires avec 1 Bloc au Depart OU a la Fin (mais PAS aux 2 Extremites)

Merci d avance, Bye, lecrabe

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Essaie avec ça

(vl-load-com)

(defun C:PolyOnPoint ( / Point2D dFuzz ssPoly oPoly ssPonc oPonc PtDeb PtFin PT I J iNbPoncDeb iNbPoncFin)

  (defun Point2D (PT)
    (list (car PT) (cadr PT) 0.0)
  )
  
  (initget 4)
  (if (not (setq dFuzz (getreal "\nRayon de recherche <0.01> : ")))
    (setq dFuzz 0.01)
  )
  
  (initget 1 "Oui Non")
  (setq b2D (= "Oui" (getkword "\nLimiter la recherche en 2D [Oui/Non] : ")))

  (initget 1 "Departuniquement Arriveeuniquement departOUarrivee departETarrivee departETOUarrivee")
  (setq sChoix (getkword "\nCritère de recherche [Departuniquement/Arriveeuniquement/departOUarrivee/departETarrivee/departETOUarrivee] : "))
  
  (if (and (princ "\nSélectionner les linéaires : ")
	   (setq ssPoly (ssget (list (cons 0 "ARC,LINE,LWPOLYLINE"))))
	   (princ "\nSélectionner les ponctuels : ")
	   (setq ssPonc (ssget (list (cons 0 "POINT,INSERT"))))
      )
    (progn
      (setq ssOK (ssadd))
      (setq I 0)
      (repeat (sslength ssPoly)
	(setq oPoly (ssname ssPoly I))
	(setq I (1+ I))
	(setq PtDeb (vlax-curve-GetStartPoint oPoly))
	(if b2D (setq PtDeb (Point2D PtDeb)))
	(setq PtFin (vlax-curve-GetEndPoint oPoly))
	(if b2D (setq PtFin (Point2D PtFin)))
	(setq iNbPoncDeb 0)
	(setq iNbPoncFin 0)
	(setq J 0)
	(while (and (< J (sslength ssPonc))
		    (or (= iNbPoncDeb 0) (= iNbPoncFin 0))
	       )
	  (setq oPonc (ssname ssPonc J))
	  (setq J (1+ J))
	  (setq PT (cdr (assoc 10 (entget oPonc))))
	  (if b2D (setq PT (Point2D PT)))
	  (if (and (= iNbPoncDeb 0) (equal PT PtDeb dFuzz))
	    (setq iNbPoncDeb 1)
	  )
	  (if (and (= iNbPoncFin 0) (equal PT PtFin dFuzz))
	    (setq iNbPoncFin 1)
	  )
	)
	(cond ((= sChoix "departETOUarrivee")
	       (if (or (>= iNbPoncDeb 1) (>= iNbPoncFin 1))
	  	 (ssadd oPoly ssOK)
	       )
	      )
	      ((= sChoix "departETarrivee")
	       (if (and (>= iNbPoncDeb 1) (>= iNbPoncFin 1))
	  	 (ssadd oPoly ssOK)
	       )
	      )
	      ((= sChoix "departOUarrivee")
	       (if (or (and (>= iNbPoncDeb 1) (= iNbPoncFin 0)) (and (= iNbPoncDeb 0) (>= iNbPoncFin 1)))
	  	 (ssadd oPoly ssOK)
	       )
	      )
	      ((= sChoix "Departuniquement")
	       (if (and (>= iNbPoncDeb 1) (= iNbPoncFin 0))
	  	 (ssadd oPoly ssOK)
	       )
	      )
	      ((= sChoix "Arriveeuniquement")
	       (if (and (= iNbPoncDeb 0) (>= iNbPoncFin 1))
	  	 (ssadd oPoly ssOK)
	       )
	      )
	)
      )
      (sssetfirst nil ssOK)
    )
  )
)

Tu as les options:

departOUarrivee = uniquement l'un des 2

departETarrivee = absolument les 2

departETOUarrivee = l'un OU l'autre OU les 2.

 

Et ça fera un kilo de carottes pour ma jument 😉. Elle s'appelle CARRERA, mais elle fonctionne mieux aux carottes qu'au SP98.😂

 

Olivier

 

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Non, c'est CARRERA'TROIS son vrai nom, car sa maman s'appelait GARGAMELLE'TROIS - ça ne s'invente pas -, et son père ENZO (un bel italien!!!)

C'est pour la prochaine que je passerai à la version 4, mais en ce moment, mon cœur balance plutôt du côté du Portugal, avec un bel étalon Pur Sang Lusitanien, mais je crois que ma femme n'est pas d'accord 😉

Lien vers le commentaire
Partager sur d’autres sites

Citation

Par contre en Lisp / VLisp, il n y a pas le XOR !!

@lecrabe

Là mon ami, tu me surprend pour un vieux de la veille comme toi...

Ces possibilités existe depuis au moins la version R12, et elles existe toujours!

Pour t'en convaincre lance la commande '_FILTER et dans la sélection du filtre va tout en bas de la liste.

Je t'ai monté un code qui va te permettre de choisir TOUTES les options possibles pour exécuter ta requête (suivant ton CCTP)

Je t'avoue que je n'ai pas tout testé les possibilités offertes, un peu la flemme...., c'est toi l’intéressé.

;; ListBox (gile)
;; Boite de dialogue permettant un ou plusieurs choix dans une liste
;;
;; Arguments
;; title : le titre de la boite de dialogue (chaîne)
;; msg ; message (chaîne), "" ou nil pour aucun
;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...)
;; flag : 0 = liste déroulante
;; 1 = liste choix unique
;; 2 = liste choix multipes
;;
;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2)
;;
;; Exemple d'utilisation
;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1)
(vl-load-com)
(defun str2lst (str sep / pos)
  (if (setq pos (vl-string-search sep str))
    (cons
      (substr str 1 pos)
      (str2lst (substr str (+ (strlen sep) pos 1)) sep)
    )
    (list str)
  )
)
(defun ListBox (title msg keylab flag / tmp file dcl_id choice)
  (setq
    tmp (vl-filename-mktemp "tmp.dcl")
    file (open tmp "w")
  )
  (write-line
    (strcat "ListBox:dialog{label=\"" title "\";")
    file
  )
  (if (and msg (/= msg ""))
    (write-line (strcat ":text{label=\"" msg "\";}") file)
  )
  (write-line
    (cond
      ((= 0 flag) "spacer;:popup_list{key=\"lst\";")
      ((= 1 flag) "spacer;:list_box{key=\"lst\";width=32;")
      (T "spacer;:list_box{key=\"lst\";width=32;multiple_select=true;")
    )
    file
  )
  (write-line "}ok_cancel_err;}" file)
  (close file)
  (setq dcl_id (load_dialog tmp))
  (if (not (new_dialog "ListBox" dcl_id))
    (exit)
  )
  (start_list "lst")
  (mapcar 'add_list (mapcar 'cdr keylab))
  (end_list)
  (action_tile
    "accept"
    "(or (= (get_tile \"lst\") \"\")
      (if (= 2 flag)
        (progn
          (foreach n (str2lst (get_tile \"lst\") \" \")
            (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice))
          )
          (setq choice (reverse choice))
        )
        (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab)))
      )
    )
    (done_dialog)"
  )
  (start_dialog)
  (unload_dialog dcl_id)
  (vl-file-delete tmp)
  choice
)
(defun c:sel_by_object@end ( / sel_obj js ss sel_with sel_op sel_opp sel_opn op op_begin op_end n ent pt_start pt_end)
  (while
    (null
      (setq sel_obj
        (listbox
          "Objets à traiter"
          "Choisir le type d'objet"
          (mapcar 'cons '("LINE" "ARC" "*POLYLINE") '("LINE" "ARC" "*POLYLINE"))
          2
        )
      )
    )
  )
  (while
    (null
      (setq js
        (ssget
          (list
            (cons 0 (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) sel_obj)))
            '(-4 . "<NOT") '(-4 . "&") '(70 . 112) '(-4 . "NOT>")
            (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
            (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
          )
        )
      )
    )
  )
  (setq ss (ssadd))
  (if (not dfzz) (setvar "USERR1" 1E-02))
  (initget 4)
  (if (not (setq dfzz (getdist (strcat "\nRayon de recherche? <" (rtos (getvar "USERR1") 2 2) "> : "))))
    (setq dfzz (getvar "USERR1"))
    (setvar "USERR1" dfzz)
  )
  (while
    (null
      (setq sel_with
        (listbox
          "Traiter avec"
          "Choisir le type d'objet"
          (mapcar 'cons '("POINT" "INSERT") '("POINT" "INSERT"))
          2
        )
      )
    )
  )
  (initget "XYZ XY")
  (setq sel_op (getkword "\nChoisir le mode de comparaison [XYZ/XY]? <XY>: "))
  (if (eq sel_op "XYZ")
    (setq sel_opp ">=,>=,>=" sel_opn "<=,<=,<=")
    (setq sel_opp ">=,>=" sel_opn "<=,<=")
  )
  (while
    (null
      (setq op
        (listbox
          "Exclure ou Inclure avec"
          "Choisir l'opérande"
          (mapcar 'cons '("AND" "OR" "XOR" "NOT") '("AND" "OR" "XOR" "NOT"))
          1
        )
      )
    )
  )
  (setq op_begin (strcat "<" op) op_end (strcat op ">"))
  (repeat (setq n (sslength js))
    (setq
      ent (ssname js (setq n (1- n)))
      pt_start (vlax-curve-getStartPoint ent)
      pt_end (vlax-curve-getEndPoint ent)
    )
    (cond
      ((or
        (ssget "_X"
          (list
            (cons 0 (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) sel_with)))
            (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
            (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
            (cons -4 op_begin)
              '(-4 . "<AND")
                (cons -4 sel_opp)
                (cons 10 (mapcar '- pt_start (list dfzz dfzz dfzz)))
                (cons -4 sel_opn)
                (cons 10 (mapcar '+ pt_start (list dfzz dfzz dfzz)))
              '(-4 . "AND>")
              '(-4 . "<AND")
                (cons -4 sel_opp)
                (cons 10 (mapcar '- pt_end (list dfzz dfzz dfzz)))
                (cons -4 sel_opn)
                (cons 10 (mapcar '+ pt_end (list dfzz dfzz dfzz)))
              '(-4 . "AND>")
            (cons -4 op_end)
          )
        )
      )
      (ssadd ent ss)
      )
    )
  )
  (if ss (sssetfirst nil ss))
  (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

Le 08/04/2024 à 15:07, lecrabe a dit :

Hello @bonuscad

Je commence a "jouer" avec ta nouvelle Routine qui semble Tip-Top ...

Au fait j ai enleve une parenthese fermante vers la fin  [ avant   (if ss (sssetfirst nil ss))  ] !

Bye, lecrabe

 

@lecrabe

J'ai refait la manip de copier-coller le code depuis le forum, je n'ai pas de problème d'appariement de parenthèses.

Donc vérifie ta copie car je doute que ta copie fonctionne correctement et que tu puisse "jouer" avec....?!?!

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é