Aller au contenu

liste de filtre


Messages recommandés

Posté(e)

Bonjour je m'essaye à un ssget "x" + liste_filtre

je 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

Posté(e)

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

Posté(e)

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 @)

Posté(e)

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

Posté(e)

(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

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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

Posté(e)

Je ne suis pas froissée :)

 

Ma réponse est ajustée à la question

Bonjour je m'essaye à un ssget "x" + liste_filtre

je 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

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é