VDH-Bruno
Membres-
Compteur de contenus
1 146 -
Inscription
-
Dernière visite
-
Jours gagnés
20
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par VDH-Bruno
-
Récupérer les coordonnées de l’affichage actif
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Bonjour, bonuscad, merci du retour et de l'explication "étymologique" du _DVIEW option _Twist en VIEWTwist, pour la petite histoire je me suis intéressé à cette variable, un peu dans le même contexte que tu décris cas des basculements ou rotation de vue dans une fenêtre de l’espace papier avec la commande VUEDYN (_DVIEW) ou REPERE (_PLAN). Vincentp010, rassure toi à mes yeux le beau code et celui qui fonctionne après et accessoirement seulement je parle plus volontiers de style dans code de type procédural, impératif, fonctionnel, plutôt que d'un code moche ou pas moche qui est totalement subjectif.. ;) Sinon après vérification la définition que tu donnes (-(* 2 pi) (getvar "viewtwist")) pour le calcul de l’angle me semble correcte (même si il m'avait semblé l’avoir vérifié), en tout cas c’est ce que je recherchais et je t’en remercie. A+ -
Récupérer les coordonnées de l’affichage actif
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Bonjour, Pour le fun et le partage une variante (pas forcément plus performante) au code proposé précédemment, mais différente pour ceux que cela intéresse.. (en exploitant une fois de plus les valeurs limites d’AutoCAD). _$ (mapcar 'cadr (cdr (last (ssnamex (ssget "_C" '(-1e99 -1e99) '(1e99 1e99)))))) ((-32.2888 5793.86 0.0) (6455.64 5793.86 0.0) (6455.64 1750.41 0.0) (-32.2888 1750.41 0.0)) _$ Renvoie la liste des 4 sommets définissant la vue active. Nota : Il faut tout de même un objet à sélectionner dans la vue active pour ne pas se voir retourner nil. Au besoin pensez préalablement à en créer un. Sinon au passage j’ai encore quelques soucis avec certaines variables, actuellement le plus criant concerne VIEWTWIST qui si j’en crois l’aide retourne un réel représentant l'angle de basculement de vue pour la fenêtre courante. Sauf que quelque chose doit m’échapper lorsque j’essaye de faire parler cette valeur "supposé angulaire" sur ma calculatrice, je n’arrive pas à la faire coïncider avec quelque chose qui me parle.. A+ -
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
Bonjour, Bon flatté dans mon égo, je me devais de relever le défi suivant "avec la manière c.a.d. avec un code minimaliste.." ;) Voilà qui est réglé, les invites de la ligne de commande sont plus cohérentes et l’affichage écran plus fluide indépendamment de la taille du fichier Hé finalement non! Il suffit de substituer la ligne suivante (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport) Par celle-ci (bv:ssmap 'entupd (ssget "_C" '(-1e99 -1e99) '(1e99 1e99))) Pour un code relativement robuste quel que soit l’orientation du scu et de la vue. Et quelque soit l’état des objets verrouillé ou pas.. :) Nota : Mise à jour complète du code dans le premier message A+ -
Récupérer les coordonnées de l’affichage actif
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Tramber et BonusCAD, Merci du retour et de la confirmation, c’est la trace du zoom dynamique qui m’avait laissé croire qu’il y avait peut-être des variables qui m’avait échappé.. Pour VSMIN et VSMAX j'étais encore loin de me douter.. Fraid, merci pour les codes Ho tout un tas de truc comme par exemple, dessiner un cadre représentant ce qu’il y a l’affichage écran. (apply 'command (cons "_rectang" (coorAff))) Ou faire une sélection par capture sur ce qui est présent à l’affichage dans la vue active. (sssetfirst nil (apply 'ssget (cons "_C" (coorAff)))) A+ -
Récupérer les coordonnées de l’affichage actif
VDH-Bruno a posté un sujet dans Pour aller plus loin en LISP
Bonjour, Une petite question en passant, comment en lisp feriez-vous pour récupérer les coordonnées (coin inférieur gauche et coin supérieur droit) de l’affichage actif sous AutoCAD ? Je n’ai pas trouvé de solution direct (variable système), j’ai pondu quelque chose avec SCREENSIZE VIEWCTR et VIEWSIZ.. J’aurais bien comparé avec vos solutions au cas où il y aurait un moyen plus direct, au passage j’ai bien regardé du côté des variables système VSMIN et VSMAX mais je ne suis même pas sûr d’avoir compris ce qu’était « les coins de l'écran virtuel de la fenêtre courante » Mon code : ;; VDH-Bruno ;; ------------------------------------------------------------------------------ ;; retourne une liste de coordonnées 3D dans le SCU représentant respectivement: ;; - le coin inférieur gauche de l'affichage actif ;; - le coin supérieur droit de l'affichage actif ;; ------------------------------------------------------------------------------ ;; Pour mémoire: ;; Variable SCREENSIZE ;; Stocke la taille de la fenêtre courante, en pixels (X et Y). ;; Variable VIEWCTR ;; Stocke le centre de la vue (coordonnées SCU) dans la fenêtre courante. ;; Variable VIEWSIZE ;; Hauteur de la vue affichée, mesurée en unités de dessin. ;; ------------------------------------------------------------------------------ ;; Exemple: ;; (coorAff) --> ((-3.6746 -3.19579 10.0) (3238.26 2595.22 10.0)) (defun coorAff ( / VIEWCTR VIEWSIZE SCREENSIZE) (mapcar 'set '(VIEWCTR VIEWSIZE SCREENSIZE) (mapcar 'getvar '(VIEWCTR VIEWSIZE SCREENSIZE))) ((lambda (dimxy) (list (mapcar '- VIEWCTR dimxy) (mapcar '+ VIEWCTR dimxy))) (list (* VIEWSIZE (/ (car SCREENSIZE) (cadr SCREENSIZE) 2.)) (/ VIEWSIZE 2) 0.0) ) ) A+ (Edit du 30/08/2012: Modifié code passage des arguments en variables localisées) -
En complément des précisions de bonuscad, je t’invite à prendre connaissance de ce lien cela traite des listes en lisp. http://cadxp.com/index.php?/topic/29314-ces-listes-qui-nen-sont-pas/ A+
-
Bonsoir, C'est une fonction? je comprend rien la...je peux meme pas le faire tourner.Pour tester il te suffit de le copier coller sur la ligne de commande d’AutoCAD, et par exemple si le dernier élément de ton dessin est défini sur le calque _meth encomb jour 02, il se trouve transféré sur le calque _meth jour 02 et le crée dans le cas ou celui-ci n’existe pas. Mais si le code te donne trop de fil à tordre, il vaut peut être mieux dans un premier temps te tourner vers les solutions données par Bryce. A+
-
Salut, Il existe plusieurs moyen d’arriver, à ce que tu veux, sans trop entrer dans le détail je vais te donner celui qui me semble le plus simple, basé sur une liste de calque prédéfinie (il aurait également possible d’écrire une routine au lieu de créer une liste). Juste après la création de ta hachure teste ce code il devrai placer ton entité sur le bon calque, si il y correspondance dans la liste de calque : ((lambda (ent lstcalque / nouvcalque) (if (setq nouvcalque (cdr (assoc (cdr (assoc 8 ent)) lstcalque))) (entmod (subst (cons 8 nouvcalque) (assoc 8 ent) ent)) ) ) ;; revoie les codes dxf de la dernière entité dessiné (entget (entlast)) ;; liste de correspondance de calques (bloc . polyligne) '(("_meth encomb jour 01" . "_meth jour 01") ("_meth encomb jour 02" . "_meth jour 02") ("_meth encomb jour 03" . "_meth jour 03") ("_meth encomb jour 04" . "_meth jour 04") ("_meth encomb jour 05" . "_meth jour 05") )) A+
-
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
C’était l’occasion pour moi de me familiariser un peu avec les objets réacteurs au travers d’une application pratique… Et je t’en remercie car je rappellerai que cela découle plus ou moins directement de notre discussion précédente : http://cadxp.com/index.php?/topic/35821-selection-dune-polyligne-non-continue/page__p__194968__fromsearch__1#entry194968 A+ -
Perso je les ai bien vu hier, d’après ce que je comprends lecrabe si est collés, je le félicite car j’ai cru un moment qu’il en apparaissait plus que ce que la modération du forum arrivait à supprimer, heureux de voir aujourd’hui qu’il a eu le dernier mot.
-
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
Salut, Ce n’est pas toujours si simple toutes les commandes ne supportent pas le mode transparent (‘), il en est de même pour les routines lisp, le fait que celle-ci y parvienne c’est parce que la routine n’utilise pas la fonction lisp command dans sa définition (cela vaut mieux avec les fonctions réacteurs du code). A+ -
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
Re, Si tu fait un bouton dans ce cas préfère la syntaxe avec transparence ‘ldis à la manière de la commande ‘_pan -
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
Oui, pour tes versions récentes suit les conseils donnés par lecrabe.. Depuis le version 2008 il me semble que les fonctions Visual Lisp ActiveX/COM ne sont accessible qu’après un chargement explicite au moyen de la fonction de chargement (vl-load-com). A+ -
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
Bonjour kallain, Ne connaissant pas AutoCAD Map (ni aucun applicatif métier) je ne peux rien certifier, mais je pense que le problème vient de là: Test avec la version précédente et tien nous au courant. A+ -
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
Bonjour (gile) Bien sûr que cela me plait :) :) :) , c’est exactement ce à quoi je m’exerçais cette nuit, lier les données au premier argument du réacteur d’événement.. Et faire un peu plus rationnel et AutoCADémique. Mais dans cette solution tout comme dans ton code, je n’étais pas parvenu à gérer le cas d’écrit par -Olivier- (à savoir lancer la commande 2 fois de suite) sans déclarer/introduire une variable global supplémentaire (voilà la raison de cette recherche nocturne très formatrice). C’est pour cela que j’ai finalement gardé la solution du defun-q et sur le plan de la réflexion je trouvais amusant de définir le réacteur dans la fonction de retro-appel (de la pseudo récursivité). Sur la fonction il y a encore peut-être 2 petites choses qui me chagrine les invites sur la ligne de commande, et le vla-Regen qu’il faudrait peut être réaliser de façon moins étendu (avec une fonction maison pour une meilleur performance. Mais au final ce serai beaucoup de codes pour pas grand-chose.. A+ Ps : Sinon si l’idée te plait je n’ai aucune objection à ce que tu l’intègre à ton Osnap Palette (je pense qu’il y a une demande pour ce type de fonctionnalité), même si dans l’esprit je ne saurais pas dire si elle y a vraiment sa place, la fonction agissant sur l’affichage ce qui a pour effet d’émuler l’accroche objet et la sélection. Ps bis : Ta version est tout de même un peu plus concise que ce à quoi j’étais arrivé dans ma version non publier, et m’a permis de vérifier un ou deux petits points sur lequel je me questionnais. Notamment que d’attacher des données au réacteur permettait de le supprimer en rappelant son premier argument plutôt que de le déclarer dans une variable global... -
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
Bonsoir et merci Une nouvelle version un peu plus concise.. ;; VDH-Bruno ;; Transforme temporairement l'affichage les lignes discontinues en continue (defun-q ldis (rea lst) nil (cond (*ldis-commandreactor* (setvar 'LTSCALE rea) (vlr-remove *ldis-commandreactor*) (setq *ldis-commandreactor* nil) ) ((setq ldis (cons (car ldis) (cons (list 'setq 'rea (getvar 'LTSCALE)) (cddr ldis)) ) ) (setq *ldis-commandreactor* (vlr-command-reactor nil '((:vlr-commandEnded . ldis) (:vlr-commandCancelled . ldis) (:vlr-commandFailed . ldis) ) ) ) (setvar 'LTSCALE 1.0e+99) ) ) (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport ) (princ) ) (defun c:ldis () (vl-load-com) (ldis nil nil)) -Olivier- Voilà qui devrait être résolu, merci du retour. Tramber Maintenant il l’est un peu plus ;) , à l’occasion je me pencherai sur les invites de la ligne de commande, en mode transparent car l’affichage ne me plait pas trop... PHILPHIL Merci pour de tes encouragements. bonuscad Venant de ta part c’est très plaisant à lire, quoiqu’un peu exagéré.. Ca me rassure :D , blague à part j’ai jamais apprécié les fichiers de formes heureusement que cela tend à disparaitre.. Je me souviens à mes débuts, quelques fichiers qui m’ont écœuré à force d’en abuser. A+ -
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Routines LISP
Bonjour, Contrairement à la première version, celle-ci utilise des objets réacteurs d’évènements, pour éviter d’avoir à rappeler la fonction (et économiser une saisie), en clair s’il n’y a pas d’action de commande l’affichage n’est pas rétablie. Dans ton cas lance la commande une première fois, puis à la sortie de la prochaine commande AutoCAD ton affichage sera rétabli. Cette version a été écrite un peu à la volée pour faire didactique et ludique (defun-q & réacteur de commande) pour moi-même et éventuellement d’autres, si elle a un peu d’échos, je verrais pour la sécuriser d’avantage et l’optimiser un peu, il y a moyen j’ai déjà deux ou trois idée à tester mais cela sera un peu plus tard.. A+ -
Modifier temporairement l’affichage des lignes discontinues en continues
VDH-Bruno a posté un sujet dans Routines LISP
Bonjour, Suite à une récente réflexion que je me suis fait au sujet d’un de mes premiers codes.. Je me suis "amusé" à revisiter ce code pendant la pose déjeuné, voilà à tester si cela vous dit.. ;;VDHBruno le : 05-09-2012 ;; Transforme temporairement l'affichage les lignes discontinues en continue (defun c:ldis () (vl-load-com) (ldis-callback nil nil)) (defun-q ldis-callback (rea svgvar) nil (cond (svgvar (setvar 'LTSCALE svgvar) (vlr-remove rea) (setq ldis-callback (cons (car ldis-callback) (cons nil (cddr ldis-callback)))) ) ((setq ldis-callback (cons (car ldis-callback) (cons (list 'setq 'svgvar (getvar 'LTSCALE) 'rea (vlr-command-reactor nil '((:vlr-commandEnded . ldis-callback) (:vlr-commandCancelled . ldis-callback) (:vlr-commandFailed . ldis-callback) ) ) ) (cddr ldis-callback) ) ) ) (setvar 'LTSCALE 1.0e+99) ) ) (bv:ssmap 'entupd (ssget "_C" '(-1e99 -1e99) '(1e99 1e99))) (princ) ) ;; Variation de la fonction ssmap (extraite de la stdlib de Reini Urban) (defun bv:ssmap (fun ss / i) (if (= (type ss) 'PICKSET) (repeat (setq i (sslength ss)) ((eval fun) (ssname ss (setq i (1- i))))) ) ) Au cours d’une commande AutoCAD faire précéder la fonction d’une apostrophe ‘ldis A+ ________________________________________ Edit du 05-09-2012 -Mise à jour du code - Rectifié affichage sur ligne de commande. Localisé la régénération du dessin à l’affichage écran de la fenêtre active. Renommé arguments et noms de fonctions de façon plus explicite (et suppression d'une variable globale). -
Bonjour, Une ou deux petites réflexion en vrac à la lecture de la new En gros on offre la possibilité d’utilisé la version pleine comme si c’était une LT <Humour> C’est plus facile à faire maintenant qu’il n’y a pratiquement plus de code Lisp dans les fichiers sources d’Autodesk (ce qui est vraie pour ma version 2007, alors j’imagine pour les versions plus récentes) et que le vba est abandonné.. C’est bien ce que je disais.. En conclusion, on pourra faire confiance aux auteurs de malware, pour écrire leur programme en .net ou ObjectArx, à mon avis cette annonce est plus une opération de communication qu’une solution vraiment efficace, mais au vu de l’actualité récente Autodesk se devait de montrer qu’ils planchaient sur la question… Une petite recherche rapide sur le forum de sujet récent traitant de virus sous AutoCAD : http://cadxp.com/index.php?/topic/35060-resolut-a-quoi-servent-ces-fonctions-comment-sen-debarasser/ http://cadxp.com/index.php?/topic/35527-virus-lie-a-autocad-ca-continue/ http://cadxp.com/index.php?/topic/35370-le-virus-flame-aime-vos-dessins-autocad/ http://cadxp.com/index.php?/topic/27002-virus-acadlsp/ Pour ceux qui n’ont pas la version 2013 je rappellerai un petit lien au cas où : http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=458335&id=16895628&linkID=16886429 Ps : Je viens de voir le post de Maxence DELANNOY je suis curieux de tester cela A+
-
Sélection d'une polyligne non continue
VDH-Bruno a répondu à un(e) sujet de alala dans Pour aller plus loin en LISP
Bonsoir bonuscad Merci pour le retour, car c’est tout à fait le type d’expérience aux quelles je ne suis jamais confronté dans mon environnement de travail n’étant pas cartographe, ni géomètre, sur mes projets la structure béton d’une base logistique ou d’un centre commercial n’excède que rarement les 300 ml donc même si je cotais en millimètre, il reste encore suffisamment de chiffre significatif avant que la mantisse (ou significande) des nombres à virgules flottantes fasse des erreurs d’arrondie dans les calculs. D’ailleurs c’est grâce à tes interventions sur ce forum que je me suis sensibilisé au problème, même si je n’y pense pas toujours.. ??? Là j’avoue ne plus trop te suivre, car peu importe que le type de ligne ou que l’échelle du type de ligne soit forcé, sauf peut être si le type de ligne est forcé avec une valeur très proche des 1.0e-99 mais en vingt ans de dessin j’ai encore jamais vu.. Pour l’anecdote c’est le type d’astuce que j’utilisais en manuel sur version LT (au facteur d’échelle près), lorsque je n’arrivais pas à m’accrocher à l’intersection de lignes discontinues ou autres blagues du même genre, et c’est l’une des premières fonctions que je me suis empressé de programmer quand j’en ai eu la capacité, ci-joint le code internationalisé pour l’occasion. ;; VDH-Bruno ;; Transforme à l'affichage les lignes discontinues en continue ;; (Fonction réversible au 2nd appels) (defun c:ldis () (cond (*LD-LTSCALE* (command "'_.ltscale" *LD-LTSCALE*) (setq *LD-LTSCALE* nil)) ((setq *LD-LTSCALE* (getvar 'LTSCALE)) (command "'_.ltscale" 1.0e+99)) ) (princ) ) Le seul bémol, c’est que même si dans les faits rien n’empêche la transparence de la fonction pour que la régénération de l’affichage prenne effet, il faut hélas mais logiquement que ce soit en dehors de tout appel à la fonction commande. Sinon j’aurais fait de l’appel du pied à (gile) pour qu’il transpose l’idée en .net afin de l’intègrer à son Osnap Palette. Ps: Faute d'une variable similaire à QTEXTMODE pour les type de ligne, c’est le type de code qui rend bien service au quotidien.. ;) A+ -
Fonction récursive (Triangle de Pascal)
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Débuter en LISP
En revisitant le sujet, je me suis aperçu qu’il y avait moyen de simplifier et de faire encore plus concis… Version fonctionnelle : (defun triPascal (n / f1) (defun f1 (l n) (if (< 0 n) (cons l (f1 (append '(1) (mapcar '+ l (cdr l)) '(1)) (1- n))) ) ) (f1 '(1) (1+ n)) ) Version itérative : (defun triPascal (n / l) (cons '(1) (reverse (repeat n (setq n (1- n) l (cons (append '(1) (mapcar '+ (car l) (cdar l)) '(1)) l) ) ) ) ) ) -
Selection, Type de Ligne DuCalque->Type de Ligne
VDH-Bruno a répondu à un(e) sujet de stugeol dans Routines LISP
Bonjour, Pour l'exemple (defun stugeol (calque typeligne / i ent ss) (repeat (setq i (sslength (setq ss (ssget "_X" (list (cons 8 calque)))))) (if (not (assoc 6 (setq ent (entget (ssname ss (setq i (1- i))))))) (entmod (cons (cons 6 typeligne) ent)) ) ) ) Pour tester (stugeol "0" "Type1") Ps: Le type de ligne doit préalablement être chargé dans le dessin. A+ -
Sélection d'une polyligne non continue
VDH-Bruno a répondu à un(e) sujet de alala dans Pour aller plus loin en LISP
Bonjour, La sélection global était à titre d’exemple, car comme précisé elle peut être affiné, par exemple pour capturer les polylignes par une sélection de 100 unité de côté autour d’un point. Remplace dans le code précédent l’expression: (setq ss (ssget "_X" '((0 . "LWPOLYLINE")))) Par (setq ss (ssget "_C" (mapcar '+ '(-50.0 -50.0 0.0) (trans pt 0 1)) (mapcar '+ '(50.0 50.0 0.0) (trans pt 0 1)) '((0 . "LWPOLYLINE")) ) ) Rien n’empêche de jouer avec la variable LTSCALE ou la commande ECHLTP (qui provoque la régénération de l’affichage). En affectant une valeur suffisamment grande pour qu’AutoCAD ne puisse pas afficher la discontinuité des lignes. Un exemple de ce que tu cherches à faire en utilisant ce principe… ce qui oblige à recalcule tous ce que tu as à l’affichage, en plus d’avoir à l’affichage la zone à analyser (ceci est valable également pour les sélections par mode graphique Trajet Capture Fenêtre ect…), bref un zoom étendu est préalablement recommandé. Pour tester : (progn (setq var-LTSCALE (getvar 'LTSCALE)) (command "echltp" 1.0e+99) (setq ss (ssget "_C" (trans pt 0 1) (trans pt 0 1) '((0 . "LWPOLYLINE")))) (command "echltp" var-LTSCALE) (sssetfirst nil ss) ) Cordialement -
Sélection d'une polyligne non continue
VDH-Bruno a répondu à un(e) sujet de alala dans Pour aller plus loin en LISP
Bonsoir alala, Tout d’abord je te souhaite la bienvenu sur ce forum, je profite d’être à mon domicile pour développer un peu plus ma réponse précédente, en apportant quelques précision à ce qui a été dit, notamment sur le mode de sélection... Car j’ai cru comprendre que tu recherchais à sélectionner toutes les polylignes qui sont présentes sous un point de sélection (ou plutôt point d’ insertion de bloc). La sélection par capture comme tu nous la proposé me semble plus adapté (setq ss (ssget "_C" pt pt (list '(0 . "LWPOLYLINE")))) Que la sélection par point bien que cette dernière bénéficie de l'apport de la variable "PICKBOX" (ssget pt '((0 . "LWPOLYLINE"))) Car chez moi cela ne sélectionne qu’un élément même si il y a plusieurs entités sous le point. Maintenant la sélection par capture sur un point, ne permet pas de sélectionner une ligne si il y a discontinuité au point de capture, c’est pour cela que le conseil de Bonuscad d’élargir la zone de capture autour du point et une possibilité d’optimisation, au risque bien sur de sélectionner plus d’entité que nécessaire. C’est pour cela que tu es obligé si tu veux un code fiable de parcourir ta sélection pour éliminer les entités non valide. Pour résumer je te propose une fonction qui devrait répondre à ton besoin basé sur ma proposition précédente avec l’emploie de vlax-curve-getDistAtPoint : ;; Sélection par point des polylignes optimisées.. ;; Argument: un point de sélection 3D ;; Retourne: un jeu de sélection (defun SeLwPt (pt / i e ss) (repeat (setq i (sslength (setq ss (ssget "_X" '((0 . "LWPOLYLINE")))))) (if (vlax-curve-getDistAtPoint (vlax-ename->vla-object (setq e (ssname ss (setq i (1- i))))) pt ) ss (ssdel e ss) ) ) ) Pour tester copie/colle ce qui suit dans ta console Vlisp (sssetfirst nil (SeLwPt (cdr (assoc 10 (entget(car(entsel))))))) Ps : Tu remarqueras que j’ai fait une sélection globale, si tu le souhaite tu peux toujours en fonction de ton environnement de travail affiner la sélection. Cordialement VDH-Bruno -
Sélection d'une polyligne non continue
VDH-Bruno a répondu à un(e) sujet de alala dans Pour aller plus loin en LISP
Bonjour, C’est non testé mais cela devrait fonctionner une fois que tu auras fait ta sélection proche ou par tout autre type de moyen sur tes polylignes, parcours ta sélection en la soumettant à la fonction vlax-curve-getDistAtPoint Pour rappel la fonction Retourne la longueur du segment de la courbe entre le point de départ de la courbe et le point spécifié. Dans ton cas le nom de ta polyligne et le point d’insertion de ton bloc, si la valeur de retour est nil, ta polyligne ne passe pas sous le point d’insertion de ton bloc. A+
