mlon Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 Bonjour je m'essaye à un ssget "x" + liste_filtreje ne veux conserver que les polylignes 2d; donc j'ai fait(setq filtre (list (cons -4 " (cons 8 mon_calque) (cons 100 "AcDb2dPolyline") (cons -4 "and>") ))et pourtant AutoCAD me garde également les poly3d...Quesako?je sais que ca marche avec (cons -4 " (cons 8 mon_calque) (cons 70 0) (cons -4 "and>")Mais pourquoi ca ne marche pas avec le code précédent? je sais ce que je sais mais comment connaître mon ignorance
mlon Posté(e) le 19 octobre 2005 Auteur Posté(e) le 19 octobre 2005 Pardon avec(cons -4 " (cons 8 mon_calque)(cons 0 "Polyline")(cons 70 0)(cons -4 "and>") je sais ce que je sais mais comment connaître mon ignorance
rebcao Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 voilà une liste obtenue avec la commande FILTER dans un LT 2002 !!! :P à l'ouverture de FILTER.NFL on obtient ceci, (0 . "*POLYLINE")(8 . "0")(-4 . "=")(70 . 0) si ça peut t'aider ! Christian [Edité le 19/10/2005 par rebcao] 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 @)
Patrick_35 Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 Salut (setq js (ssget "x" (list (cons 0 "LWPOLYLINE") (cons 8 mon_calque) (cons 70 0)))) @+ (ps : le and est par défaut) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
mlon Posté(e) le 19 octobre 2005 Auteur Posté(e) le 19 octobre 2005 en fait le deuxieme filtre fonctionne (je ne veux pas de LWPOLYLINE mais seulement des POLYLINE )ces dernieres (polyline) ont plusieurs caractéristiques qui les différencient suivant qu'elles sont 2d (0 . "POLYLINE " )(100 . "AcDb2dPolyline") (70 . 0)3d (0 . "POLYLINE " )(100 . "AcDb3dPolyline") (70 . 8) quand je crée un filtre avec (100 . "AcDb2dPolyline") la sélection contient quand même des (100 . "AcDb3dPolyline") d'ou ma question comment cela se peut il?ps je vais donner le filtre complet pour info (avec les or il me faut des and)(list (cons -4 " (cons -4 " (cons 8 calq0) (cons 0 "POLYLINE") (cons 70 0) (cons -4 "and>") (cons -4 " (cons 8 calq0) (cons 0 "LWPOLYLINE") (cons -4 "and>") (cons -4 " (cons 8 calq0) (cons 0 "LINE") (cons -4 "and>") (cons -4 " (cons 8 calq0) (cons 0 "ARC") (cons -4 "and>") (cons -4 "or>") ) je sais ce que je sais mais comment connaître mon ignorance
mlon Posté(e) le 19 octobre 2005 Auteur Posté(e) le 19 octobre 2005 (list (cons -4 " < or " ) (cons -4 " < and") (cons 8 calq0) (cons 0 "POLYLINE") (cons 70 0) (cons -4 "and>") (cons -4 " < and") (cons 8 calq0) (cons 0 "LWPOLYLINE") (cons -4 "and>") (cons -4 " < and") (cons 8 calq0) (cons 0 "LINE") (cons -4 "and>") (cons -4 " < and") (cons 8 calq0) (cons 0 "ARC") (cons -4 "and>") (cons -4 "or>") )désolé apparemment le forum aimait pas le code original....j'ai du insérer quelques espaces pour avoir un affichage correct je sais ce que je sais mais comment connaître mon ignorance
Patrick_35 Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 Donc en un peu plus compliqué ;) (setq js (ssget "x" (list (cons 0 "POLYLINE,LWPOLYLINE,ARC,LINE") (cons 8 calq0)))) les and et or sont inclus Et pour des polylignes 3D (setq js (ssget "x" (list (cons 0 "POLYLINE") (cons 8 calq0))))Il faut ensuite balayer la sélection avec le bit 8 du code 70 pour savoir si c'est une 3D @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
mlon Posté(e) le 19 octobre 2005 Auteur Posté(e) le 19 octobre 2005 Oui si tu veux ; mais je n'ai pas une grande dextérité en lisp...donc j'aime bien faire un code ou je vais facilement m'y retrouver si j'y retouche 6 mois après...(ton premier jeu de sélection contient des POLYLINE 2d et 3d ... ce qui oblige, si je ne veux garder que le 2d, à reventiler le jeu de sélection en ométtant pas de garder les autres entités (arc line lwpolyline) ) Sinon ma question était juste "Pourquoi le filtre avec (100 . "AcDb [surligneur] 2[/surligneur]dPolyline") ne retiens pas que les polyline 2d mais laisse dans le jeu de sélection les (100 ."AcDb [surligneur] 3[/surligneur]dPolyline") " En d'autres termes pourquoi ca fonctionne avec le code 70 et pas avec le code 100 ? je sais ce que je sais mais comment connaître mon ignorance
Patrick_35 Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 Le code 100 est plus orienté vlisp. Cette sélection est sûrement possible en vlisp, mais c'est assez galère à faire et autolisp est beaucoup plus simple d'emploi. Apparemment, un ssget sur un code 100 à un fonctionnement un peu spécial. Un (ssget "x" (list (cons 100 "AcDbLine"))) retourne une sélection dont la logique reste à trouver. :casstet: @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 Voici un filtre qui va par exemple séléctionner que les POLYLIGNES anciennes et en 2D.(ssget "_X" '((0 . "POLYLINE") (-4 . "<") (70 . 8))) Une discussion ou tu retrouve un emploi de filtre pour ecarter tout objet qui ne pourrait être sousmis aux hachures. Le code 100 est un code de groupe qui se retouve plusieurs fois dans la définition d'une entité.Un (assoc 100 ...) te retournera le 1er trouvé dans la définition.En lisp j'écarte (en général) l'utilisation de ces groupes de code de définition multiple, en (vl-) c'est peut être plus facile? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 Salut Bonus Et si par exemple ta poly 3D est fermée ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 Hé bien elle ne seras pas sélectionnée car le drapeau 70 sera strictement supérieur à 8.9 étant le drapeau pour une 3Dpoly fermée (8 [3Dpoly] +1 [fermée]) Si l'on veut inclure les 3dpoly, mais pas les maillages on change le 8 du filtre en 16 Le seul bit qui peut poser probléme est le bit 128 pour la génération du type de ligne.Des polylignes 2D ayant ce bit seront ecartés. On pourait compliqué en faisant une opération booléenne pour les inclures, ou plus simplement un (rem bit 128) J'ai bon? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 19 octobre 2005 Posté(e) le 19 octobre 2005 houla, je ne voulais pas te froisserJe sais que tu connais ça très bien. C'était juste pour indiquer que le filtre ne prenait pas tout @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 20 octobre 2005 Posté(e) le 20 octobre 2005 Je ne suis pas froissée :) Ma réponse est ajustée à la questionBonjour je m'essaye à un ssget "x" + liste_filtreje ne veux conserver que les polylignes [surligneur] 2d [/surligneur]; Donc il me semble normal qu'une poly3D (ouverte ou fermée soit écartée) En résumé pour arriver à simuler le code [surligneur] (cons 100 "AcDb2dPolyline") [/surligneur]Le filtre le plus approprié serait celui-ci: (met les poignées si "pickfirst" actif) (sssetfirst nil (ssget "_X" '( (0 . "POLYLINE") (-4 . "< OR") (-4 . "<") (70 . 8) (-4 . "&=") (70 . 128) (-4 . "OR>") ) ) ) ATTENTION "espace" rajouté après le 1er < dans le code POLYLINE (avec VERTEX, LWPOLYLIGNES écartées)ayant le bit < 8 : ceci comprendra les polylignes; 0 ouverte, 1 fermée, 2 lissée, 4 splinée (donc maxi 1+2+4 <8)OU ayant le bit 128 (typeligne généré): Avantage seule les polylignes 2D peuvent avoir ce bit actif ce qui simplifie le filtre Ceci pour tout le dessin: on peut facilement compléter le filtre avec d'autre code (8 . "calque") (62 . "couleur") etc... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant