Luna Posté(e) le 17 mars 2020 Posté(e) le 17 mars 2020 Bonjour à toutes et à tous, Après beaucoup de travail acharné, je me suis dit que je pourrais partager une routine que j'utilise au quotidien sur autoCAD et aussi dans mes programmes : (select-filter). Le but est assez simple, elle retourne un jeu de sélection (au même titre que la fonction (ssget) en appliquant des filtres) ainsi que le détail du nombre d'objets sélectionnés en fonction des différentes méthodes programmées. C'est encore un peu brouillon et c'est loin d'être aussi parfait et optimisé que des routines de (gile) ou Patrick_35 (et je serais ravie d'avoir des propositions d'amélioration), mais je n'ai pas encore eu de problèmes alors.. ^^"Je post le fichier .lsp correspondant (ça risque d'être un peu trop long si je le poste en dur ^^')2020-03-17_Select-filter.LSP Bref voilà, si jamais ça aide certaines personnes j'en serai ravie, et si j'ai des retours et/ propositions d'amélioration, je suis preneuse également ! ;)Et puis il y a également quelques fonctions nécessaires à son fonctionnement qui peuvent également s'avérer utiles (Je remercie d'ailleurs Lee-Mac pour ses fonctions sur les blocs dynamiques et sur les options de la fonction (ssget) !!) Bisous !
philsogood Posté(e) le 17 mars 2020 Posté(e) le 17 mars 2020 hellopas testé ton lisp mais en tout cas merci pour le partageje teste dès que je peux (et que j'y pense) c'est aps pour tout de suite mais sait-on jamais, sur un malentendu...++Phil Projeteur Revit Indépendant - traitement des eaux/CVC
PHILPHIL Posté(e) le 14 avril 2021 Posté(e) le 14 avril 2021 hello LUNA tu le lances comment le lisp ?? c'est avec une boite de dialogue ? Phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
didier Posté(e) le 14 avril 2021 Posté(e) le 14 avril 2021 Bonjour @Luna Chat c'est vraiment gentil de partager, je pense que bien des utilisateurs en cours de formation vont être intéressés par ce LSP qui a l'air complet, je vais le regarder de plus près et reviendrai vers toi en chat de questions ou de suggestion, encore merci. ---------------------------------------------------------------------------------------------------- @PHILPHIL Je ne connais pas ton niveau d'expérience en LSP mais, comme je l'explique sur mon site : puisqu'il n'y a pas de "c:" en entête du nom de commande derrière le DEFUN cela signifie que c'est une fonction qui ne sera pas appelée telle quelle en ligne de commande, mais à l'intérieur d'un programme en lui donnant les arguments attendus. Les arguments attendus étant les "variables" situées entre la première parenthèse ouvrante et la barre oblique (slash). Si tu souhaites la lancer en ligne de commande, comme à l'intérieur d'un programme, il faut la mettre entre parenthèses comme dans les exemples que Luna a pris la peine de retranscrire dans son programme. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 14 avril 2021 Auteur Posté(e) le 14 avril 2021 Coucou, Nah c'est une fonction (je n'ai pas eu le courage de la transposer sous forme de commande) donc elle possède 4 arguments (cf. les commentaires sur le .lsp) : mode -> correspond à une chaîne de caractères. 4 valeurs possibles : - "DXF" permet d'effectuer une sélection basée sur la liste DXF d'un objet donc fonctionne de la même façon que la fonction (ssget) avec la liste des filtres - "BLC" permet d'effectuer une sélection basée sur le nom de la définition de bloc (donc références de blocs uniquement) - "ATT" permet d'effectuer une sélection basée sur le nom et/ou la valeur d'un ou plusieurs attribut de bloc (donc références de blocs uniquement) - "DYN" permet d'effectuer une sélection basée sur le nom et/ou la valeur d'une ou plusieurs propriété dynamique de bloc (donc références de blocs uniquement) blocname -> correspond soit au nom de la définition de bloc (pour les modes "BLC", "ATT" et "DYN") en recherche relative (cf. Wildcard Characters) sous format string, soit à la liste des codes DXF que l'on souhaite trier (pour le mode "DXF") sous format liste. tag -> correspond soit au nom de l'attribut/propriété dynamique (pour les modes "ATT" et "DYN") en recherche relative sous format string, soit au mode de sélection de la fonction (ssget) (cf. Méthode de sélection (ssget)) sous format string (pour les modes "DXF" et "BLC") value -> correspond soit à la valeur de l'attribut/propriété dynamique (pour les modes "ATT" et "DYN") en recherche relative sous format string, soit à la liste de filtres de la fonction (ssget) (cf. Filtres de sélection) sous format liste (pour les modes "DXF" et "BLC") Quelques exemple d'utilisation : ;; Aucune pré-sélection, donc sélection de la totalité des blocs dont le nom commence par "SUNGROW" et possède la chaîne "Eclisse" Commande: (select-filter "BLC" "SUNGROW*Eclisse*" nil nil) Nombre d'objet(s) sélectionné(s) = 6410 u Liste des blocs trouvés : - SUNGROW - Eclisse (6410u - 100%) <Selection set: 2163> ;; Pré-sélection d'objets avant lancement de la fonction donc seul les blocs pré-sélectionnés sont décomptés Commande: (select-filter "BLC" "*" nil nil) Nombre d'objet(s) sélectionné(s) = 1208 u Liste des blocs trouvés : - Module générique F 2000x992x40 (448u - 37.09%) - SUNGROW - Eclisse (200u - 16.56%) - SUNGROW - Fixation structure primaire (8u - 0.66%) - SUNGROW - Flotteur (Ext.) (120u - 9.93%) - SUNGROW - Flotteur (Int.) (224u - 18.54%) - SUNGROW - Structure primaire (6.37m) (128u - 10.6%) - SUNGROW - Structure secondaire (4.25m) (16u - 1.32%) - SUNGROW - Structure secondaire (6.38m) (64u - 5.3%) <Selection set: 217d> ;; Aucune pré-sélection donc sélection de la totalité des blocs possédant un attribut nommé "A" Commande: (select-filter "ATT" "*" "A" "*") Nombre d'objet(s) sélectionné(s) = 97 u selon la recherche des propriétés : - "A" = "01" ( 1u - 1.03%) - "A" = "02" ( 1u - 1.03%) - "A" = "03" ( 1u - 1.03%) - "A" = "04" ( 1u - 1.03%) - "A" = "05" ( 1u - 1.03%) - "A" = "06" ( 1u - 1.03%) - "A" = "07" ( 1u - 1.03%) - "A" = "08" ( 1u - 1.03%) - "A" = "09" ( 1u - 1.03%) - "A" = "1" ( 8u - 8.25%) - "A" = "10" ( 7u - 7.22%) - "A" = "11" ( 1u - 1.03%) - "A" = "12" ( 1u - 1.03%) - "A" = "13" ( 1u - 1.03%) - "A" = "14" ( 1u - 1.03%) - "A" = "15" ( 1u - 1.03%) - "A" = "16" ( 1u - 1.03%) - "A" = "17" ( 1u - 1.03%) - "A" = "18" ( 1u - 1.03%) - "A" = "19" ( 1u - 1.03%) - "A" = "2" ( 6u - 6.19%) - "A" = "20" ( 1u - 1.03%) - "A" = "21" ( 1u - 1.03%) - "A" = "22" ( 1u - 1.03%) - "A" = "23" ( 1u - 1.03%) - "A" = "24" ( 1u - 1.03%) - "A" = "25" ( 1u - 1.03%) - "A" = "26" ( 1u - 1.03%) - "A" = "27" ( 1u - 1.03%) - "A" = "28" ( 1u - 1.03%) - "A" = "29" ( 1u - 1.03%) - "A" = "3" ( 6u - 6.19%) - "A" = "30" ( 1u - 1.03%) - "A" = "31" ( 1u - 1.03%) - "A" = "32" ( 1u - 1.03%) - "A" = "33" ( 1u - 1.03%) - "A" = "4" ( 6u - 6.19%) - "A" = "5" ( 6u - 6.19%) - "A" = "6" ( 6u - 6.19%) - "A" = "7" ( 6u - 6.19%) - "A" = "8" ( 6u - 6.19%) - "A" = "9" ( 6u - 6.19%) - "A" = "C" ( 2u - 2.06%) Liste des blocs trouvés : - Repère (97u - 100%) <Selection set: 219d> ;; Utilisation du précédent jeu de sélection pour décompte des blocs selon leur calque Commande: (select-filter "DXF" '(8) nil nil) Nombre d'objet(s) sélectionné(s) = 97 u Liste des entités trouvées pour le code DXF "8" : - "0" (64u - 65.98%) - "UBS-400-Zonage (Assemblage)" (33u - 34.02%) <Selection set: 21a8> ;; Sélection manuelle de blocs dont le nom commence par "Module" et qui sont situés sur le calque "0" ou les calques commençant par "UBS-100-" Commande: (select-filter "BLC" "Module*" "user" '((8 . "0,UBS-100-*"))) Seul(s) le(s) bloc(s) "Module FS 6g 2.004x1.232m", "Module générique A 1650x992x35", "Module générique B 1685x1000x42", "Module générique C 1698x1004x35", "Module générique D 1735x1010x42", "Module générique E 1757x1048x35", "Module générique F 2000x992x40", "Module générique G 2024x1004x35", "Module générique H 2108x1048x35", "Module générique J 2187x1102x30" seront pris en compte dans la sélection. Sélectionner des objets: 0 trouvé(s) Sélectionner des objets: Spécifiez le coin opposé: 5443 trouvé(s), 13 groupes, 5443 au total Sélectionner des objets: Nombre d'objet(s) sélectionné(s) = 5264 u Liste des blocs trouvés : - Module générique F 2000x992x40 (5264u - 100%) <Selection set: 21bf> Bisous, Luna
Luna Posté(e) le 14 avril 2021 Auteur Posté(e) le 14 avril 2021 merci @didier ! je sais déjà que l'écriture de la fonction pourrait être grandement simplifiée mais je n'ai pas beaucoup de temps pour la modifier actuellement. Toute remarque sera la bienvenue et ce n'est que récemment que j'ai amélioré les commentaires en début de fichier donc il faudra que j'essaye d'ajouter quelques ligne de commentaires pour mieux expliciter les potentialités de la fonction et son fonctionnement. Bisous, Luna
Luna Posté(e) le 21 avril 2021 Auteur Posté(e) le 21 avril 2021 Coucou, Bon petite refonte de ma fonction (Select-Filter) pour plus d'efficacité et de possibilité dans la gestion des filtres. De nombreux changements sur l'utilisation de la fonction mais l'ensemble des pratiques d'utilisation de la fonction sont clairement explicitées sur le fichier .lsp ci-joint, en début de programme. J'ai également ajouté un ensemble de commentaires pour faciliter sa compréhension dans la limite du raisonnable et pour permettre de la modifier en cas de nécessité :3 Ci-dessous les commentaires d'explication pour l'utilisation de la fonction avec l'explication de chaque argument et quelques exemples d'utilisation : --- Nom de la fonction []-----------------------[] Select-Filter []-----------------------[] --- Date de création > 18/02/2020 --- Dernière modification > 20/04/2021 --- Auteur(e) > Luna --- Version > 3.0.0 --- Classe > "DtSel" --- But et domaine d'application > Afin de faciliter grandement la sélection de blocs dynamiques, cette fonction a pour but de pouvoir sélectionner les blocs (ou objet) selon différents modes et ainsi retourner la composition du jeu de sélection en fonction des paramètres spécifiés. Il est ainsi possible de filtrer les blocs par rapport à leurs attributs, propriétés dynamiques, EffectiveName, liste DXF, etc Son fonctionnement est similaire à la fonction (ssget), avec quelques ajouts en plus. Le retour dans l'historique de commande permet d'avoir un décomptes des blocs et objet en fonction de leurs propriétés respectives. Attention cependant, après plusieurs essais, il semblerait que la fonction n'est pas en mesure de fonctionner correctement lors d'une sélection importante (limite du nombre d'objets à définir), générant une erreur de "Access violation ...". --- Déclaration des arguments La fonction (Select-Filter) possède 4 argument(s) : ¤ mode > 4 modes de sélection ont été programmé : "DXF" permet d'effectuer une sélection standard (ssget) en ajoutant tout de même un décompte des objets selon leurs propriétés DXF (spécifiées en argument). "BLC" permet d'effectuer une sélection à partir de l'EffectiveName de la référence de bloc, permettant ainsi de sélectionner sans encombre des blocs dynamiques et standard. Le décompte se fera donc en fonction du nom de chaque définition de bloc présente dans le jeu de sélection. Si aucune pré-sélection, utilise le mode de sélection "_X" de la fonction (ssget). "ATT" permet d'effectuer une sélection à partir du nom et/ou de la valeur d'un ou plusieurs attribut(s) de références de bloc (standard et/ou dynamique). Le décompte se fera donc en fonction du nom de l'attribut et de sa valeur. Si aucune pré-sélection, utilise le mode de sélection "_X" de la fonction (ssget). "DYN" permet d'effectuer une sélection à partir du nom et/ou valeur d'une ou plusieurs propriété(s) dynamique de références de bloc (dynamique uniquement). Le décompte se fera donc en fonction du nom de la propriété dynamique et de sa valeur. Si aucune pré-sélection, utilise le mode de sélection "_X" (ssget). (type mode) = 'STR | Ex. : "DXF", "BLC", "ATT" ou "DYN" ¤ filter > en fonction du mode de sélection, 2 possibilités : si mode = "DXF" alors filter correspond à la liste des codes DXF que l'on souhaite utiliser pour le décompte. Si un objet ne possède aucun des codes DXF spécifiés, il n'apparaîtra pas dans le décompte détaillé, mais il sera tout de même présent dans le jeu de sélection et le nombre d'objets. (type filter) = 'LST | Ex. : '(0 8), '(0), '(6 62 420), ... si mode = "BLC" alors filter correspond à la clé de recherhe concernant l'EffectiveName du bloc. Une clé de ou mode = "ATT" recherche permet l'utilisation de Wildcard Characters afin de spécifier plusieurs nom de blocs ou mode = "DYN" par exemple ou bien une recherche relative, etc. (type filter) = 'LST | Ex. : '("Module*" "PDT*,PDL*,Local*,LT*"), '("*"), '("*PVBlock"), ... ¤ arg-lst > correspond à la liste des arguments de la fonction (ssget) pour une utilisation de la fonction native dans ses pleines possibilités. Prise en compte des arguments facultatifs de (ssget) sous forme de liste ainsi faite ([sel-method] [pt1 [pt2]] [pt-list] [filter-list]). Voici une liste non-exhaustive des méthodes de sélection de la fonction (ssget), proposée par LeeMac : - "_" Non-localised mode string prefix Ensures the English version of the mode string is used in non-English versions of AutoCAD. Not strictly necessary for all mode strings, but safer to include than exclude. - "+." Point selection mode Forces ssget to remain in 'point' mode, similar to setting PICKAUTO to 0 May be combined with the ":S" single-selection mode and ":E" mode to emulate an entsel selection by avoiding implied selection windows. - "A" All Similar to the "X" mode string but excludes objects on frozen layers. Selects all objects on thawed layers. This mode string cannot be combined with graphical selection mode strings. - "B" Box Selects all objects inside or crossing a rectangle specified by 2 points If the points are specified from right to left, Box is equivalent to Crossing. Otherwise, Box is equivalent to Window. - "C" Crossing Selects objects residing within and/or crossing a rectangular area defined by two points. The supplied points should be expressed relative to the UCS, however, the crossing window will always be orthogonal to the WCS axes. Caution: Only objects visible in the drawing area at the time of selection will be selected by this method. Consider temporarily zooming to the selection window before performing the selection, and then zoom previous to restore the original screen position. - "CP" Crossing Polygon Selects objects residing within and/or crossing a polygon defined by a list of UCS points. The polygon can be any shape but cannot cross or touch itself. AutoCAD will construct the last segment of the polygon to ensure it is closed at all times. The CP mode string is not affected by the PICKADD System Variable. Caution: Only objects visible in the drawing area at the time of selection will be selected by this method. Consider temporarily zooming to the selection window before performing the selection, and then zoom previous to restore the original screen position. - ":D" Allow Duplicates Includes duplicate selected entities in the selection, else duplicates are ignored. - ":E" Everything within Aperture Allows selection of everything within the cursor's object selection pickbox. This mode may be used in conjunction with the "+." and ":S" mode strings to emulate entsel selection behaviour. - "F" Fence Selects all objects crossing a selection fence. The Fence method is similar to CP (Crossing Polygon) except that AutoCAD does not close the fence, and a fence can cross itself. Fence is not affected by the PICKADD System Variable. Caution: Only objects visible in the drawing area at the time of selection will be selected by this method. Consider temporarily zooming to the selection window before performing the selection, and then zoom previous to restore the original screen position. - "G" Groups Selects all objects within a specified group. Although a valid ssget mode string, there is no provision for passing group names as arguments to the ssget function and hence this option is only of use at the command-line during the Select objects prompt. - "I" Implied Implied selection (objects selected while PICKFIRST is in effect). - "L" Last Selects the last visible object added to the drawing database. Caution: when using the "L" selection method in an MDI environment, you cannot always count on the last object drawn to remain visible. For example, if your application draws a line, and the user subsequently minimizes or cascades the AutoCAD drawing window, the line may no longer be visible. If this occurs, ssget with the "L" option will return nil. - ":L" Exclude Locked Layers Rejects selection of objects residing on locked layers. - "M" Multiple Specifies multiple points without highlighting the objects, thus speeding up the selection process for complex objects. The Multiple method also selects two intersecting objects if the intersection point is specified twice. - ":N" Nested Call ssnamex for additional information on container blocks and transformation matrices for any entities selected during the ssget operation. This additional information is available only for entities selected via graphical selection methods such as Window, Crossing, and point picks. Unlike the other object selection methods, :N may return multiple entities with the same entity name in the selection set. For example, if the user selects a subentity of a complex entity such as a BlockReference, PolygonMesh, or old style polyline, ssget looks at the subentity that is selected when determining if it has already been selected. However, ssget actually adds the main entity (BlockReference, PolygonMesh, etc.) to the selection set. The result could be multiple entries with the same entity name in the selection set (each will have different subentity information for ssnamex to report). This ssget mode string is known to perform erratically. - "P" Previous Selects the most recent selection set. The Previous selection set is cleared by operations that delete objects from the drawing. AutoCAD keeps track of whether each selection set was specified in model space or paper space. The Previous selection set is ignored if you switch spaces. - ":P" Reject Viewports Rejects selection of Viewport objects. Equivalent to: (ssget '((0 . "~VIEWPORT"))) - ":R" Permit Long Transaction Allows entities in a long transaction to be selected. - ":S" Single Selection The user is permitted a single attempt to make a selection of objects using any available selection method. When combined with either "+." or ":E", only a single object may be selected, emulating an entsel. - ":U" Enable Subentity Selection - 2006+ Cannot be combined with the duplicate (":D") or nested (":N") selection modes. In this mode, top-level entities are selected by default, but the user can attempt to select subentities by pressing the CTRL key while making the selection. This option is supported only with interactive selection, such as window, crossing, and polygon. It is not supported for all, filtered, or group selections. - ":V" Force Subentity Selection - 2006+ Treats all interactive, graphic selections performed by the user as subentity selections. The returned selection set contains subentities only. This option cannot be combined with the duplicate (":D") or nested (":N") selection modes. This option is supported only with interactive selections, such as window and crossing. It is not supported for all, filtered, or group selections. - "W" Window Selects all objects residing completely inside a rectangle defined by 2 UCS points. Caution: Only objects visible in the drawing area at the time of selection will be selected by this method. Consider temporarily zooming to the selection window before performing the selection, and then zoom previous to restore the original screen position. - "WP" Window Polygon Selects objects completely inside a polygon defined by a list of points. The polygon can be any shape but cannot cross or touch itself. AutoCAD will construct the last segment of the polygon to ensure it is closed at all times. WPolygon is not affected by the PICKADD System Variable. Caution: Only objects visible in the drawing area at the time of selection will be selected by this method. Consider temporarily zooming to the selection window before performing the selection, and then zoom previous to restore the original screen position. - "X" Extended search (Entire Drawing Database) Iterates over the entire drawing database selection all entities matching the criteria given by the supplied filter list (if present), includes entities on layers that are off, frozen & locked, and entities outside of the visible drawing area. Voici une liste non-exhaustive des opérateurs de la liste de filtre de (ssget), proposée par LeeMac : - "*" Anything goes (always true) Example: > (ssget '((0 . "LINE") (-4 . "=,*,=") (10 1.0 0.0 1.0))) Select lines with start point passing through (1.0,*,1.0) i.e. with any Y-coordinate. - "=" Equal Example: > (ssget '((0 . "CIRCLE") (-4 . "*,*,=") (10 0.0 0.0 4.0))) Select circles with a center at an elevation of 4.0 units. - "!=" Not Equal "/=" All three listed operators are equivalent. "<>" Example: > (ssget '((0 . "CIRCLE") (-4 . "<>") (40 . 5.0))) Select circles with a radius not equal to 5.0. - "<" Less Than Example: > (ssget '((0 . "ARC") (-4 . "<") (40 . 2.0))) Select arcs with a radius less than 2.0. - "<=" Less Than or Equal to Example: > (ssget '((0 . "TEXT") (-4 . "*,<=") (11 0.0 10.0 0.0))) Select text with alignment point with Y-coordinate less than or equal to 10.0 units, with any X & Z coordinate value. - ">" Greater Than Example: > (ssget '((0 . "LINE") (-4 . ">,>") (11 3.0 3.0 0.0))) Select lines with end point passing through a point with X & Y coordinate greater than (3.0,3.0), with any Z-coordinate value. - ">=" Greater Than or Equal to Example: > (ssget '((0 . "POINT") (-4 . "<,>=,=") (10 5.0 7.0 0.0))) Select points with X-coordinate less than 5.0, Y-coordinate greater than or equal to 7.0, and with Z-coordinate equal to 0.0. - "&" Bitwise AND (integer groups only) Equivalent to: (/= 0 (logand bit filter)) Example: > (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 6))) Select Polylines with either curve-fit (2) or spline-fit (4) vertices added. - "&=" Bitwise Masked Equals (Integer groups only) Equivalent to: (= filter (logand bit filter)) Example: > (ssget '((0 . "LWPOLYLINE") (-4 . "&=") (70 . 1))) Select closed LWPolylines. - "<AND...AND>" Logical AND Matches all enclosed expressions. Since the ssget filter list has an implied AND operator (matching all supplied items), this operator is mostly used in conjunction with other logical operators to form compound filters. Example: > (ssget '( (-4 . "<OR") (-4 . "<AND") (0 . "ARC") (40 . 1.5) (-4 . "AND>") (-4 . "<AND") (0 . "CIRCLE") (40 . 2.0) (-4 . "AND>") (-4 . "OR>") ) ) Selects arcs with radius 1.5 or circles with radius 2.0. - "<OR...OR>" Logical Inclusive OR Matches one or more enclosed expressions. Example: > (ssget '( (0 . "TEXT") (-4 . "<OR") (40 . 1.0) (8 . "0") (62 . 3) (-4 . "OR>") ) ) Selects text objects with text height of 1.0 or layer "0", or with colour set to 3 (green), or a combination of all of these properties. - "<XOR...XOR>" Logical Exclusive OR Matches one of two enclosed expressions. Example: > (ssget '((0 . "TEXT") (-4 . "<XOR") (40 . 1.0) (62 . 3) (-4 . "XOR>"))) Selects text with text height of 1.0 or with colour set to 3, but not both. - "<NOT...NOT>" Logical NOT Rejects objects matching the single enclosed expression. Example: > (ssget '((0 . "LINE") (-4 . "<NOT") (62 . 256) (-4 . "NOT>"))) Selects lines with colour not set to 256 (ByLayer). (type arg-lst) = 'LST | Ex. : '("_X" ((0 . "*LINE") (62 . 1) (70 . 0))), nil, ... ¤ flg-lst > correspond à la liste des attributs/propriétés sous forme de liste de paires pointées (tag . value) pour filtrer la sélection en fonction du mode spécifié. Selon le mode de sélection choisi, les paires pointées seront comparer à différentes listes possibles : - mode = "BLC" -> flg-lst est comparée à la liste des propriétés de l'objet disponibles via la fonction (vlax-dump-object) pour permettre un filtre sur des propriétés non accessibles depuis la liste DXF de l'objet (cf. filter-list (ssget)). - mode = "ATT" -> flg-lst est comparée à la liste des attributs de l'objet (get-att-list) pour permettre un filtre sur le nom et/ou la valeur d'un ou plusieurs attribut. - mode = "DYN" -> flg-lst est comparée à la liste des attributs de l'objet (get-dynprop-list) pour permettre un filtre sur le nom et/ou la valeur d'une ou plusieurs propriété dynamique. - mode = "DXF" -> flg-lst est comparée à l'ensemble des propriétés de l'objet correspondant à (append (get-att-list) (get-dynprop-list)) afin de permettre un filtre sur l'ensemble des propriétés autres que la liste DXF. (type flg-lst) = 'LST | Ex. : nil, '(("Num*" . "##") ("A" . "[0-9]")), ... ¤ flag > permet d'afficher ou non le décompte des objets (type flag) = 'SYM | Ex. : T si l'on souhaite afficher la décomposition du jeu de sélection, nil sinon. --- Liste des fonctions (définies localement par la fonction) ¤ "UtDac" ---> str2lst | v1.0.0 - ##/##/#### ((gile)) ¤ "UtDac" ---> lst2str | v1.0.0 - 19/04/2021 (Luna) ¤ "BaLst" ---> modf-ss | v1.0.0 - 19/04/2021 (Luna) ¤ "BaLst" ---> KeyList-Gen | v1.0.0 - 19/04/2021 (Luna) ¤ "BaEqc" ---> check-list | v1.0.0 - 19/04/2021 (Luna) ¤ "VlPrp" ---> vlax-dump-object->list | v#.#.# - 15/12/2016 (LeeMac) ¤ "VlPrp" ---> get-att-list | v1.1.0 - 14/09/2017 (LeeMac) ¤ "VlPrp" ---> get-DynProp-list | v1.1.0 - 14/09/2017 (LeeMac) --- Retour La fonction (Select-Filter) renvoie le jeu de sélection filtré selon les critères, ainsi que le décompte des objets dans l'historique de commande selon le mode défini en argument. Ex. : > (select-filter "BLC" '("*") nil nil t) renvoie <Selection set: 217d> ainsi que le décompte suivant dans l'historique de commande (cas d'une pré-sélection d'objets avant lancement de la fonction pour décomposer le jeu de sélection selon le nom des blocs) : Nombre d'objet(s) sélectionné(s) = 1116u Liste des bloc(s) trouvé(s) : - "Module générique F 2000x992x40" (448u - 40.14%) - "SUNGROW - Eclisse" (162u - 14.52%) - "SUNGROW - Fixation structure primaire" (16u - 1.43%) - "SUNGROW - Flotteur (Ext.)" (40u - 3.58%) - "SUNGROW - Flotteur (Int.)" (224u - 20.07%) - "SUNGROW - Structure d'arrimage (E-W)" (8u - 0.72%) - "SUNGROW - Structure d'arrimage (N-S)" (18u - 1.61%) - "SUNGROW - Structure primaire (6.37m)" (120u - 10.75%) - "SUNGROW - Structure secondaire (4.25m)" (16u - 1.43%) - "SUNGROW - Structure secondaire (6.38m)" (64u - 5.73%) > (select-filter "ATT" '("*") '("_X") '(("A" . "*")) t) renvoie <Selection set: 219d> ainsi que (sélection de la totalité des blocs possédant un attribut nommé "A", quelque soit sa valeur) : Nombre d'objet(s) sélectionné(s) = 97u Liste des attribut(s) trouvé(s) : - "A" = 01 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 02 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 03 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 04 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 05 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 06 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 07 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 08 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 09 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 1 (8u - 8.25%) -> "Repère" (8u - 100%) - "A" = 10 (7u - 7.22%) -> "Repère" (7u - 100%) - "A" = 11 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 12 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 13 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 14 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 15 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 16 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 17 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 18 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 19 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 2 (6u - 6.19%) -> "Repère" (6u - 100%) - "A" = 20 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 21 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 22 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 23 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 24 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 25 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 26 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 27 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 28 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 29 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 3 (6u - 6.19%) -> "Repère" (6u - 100%) - "A" = 30 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 31 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 32 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 33 (1u - 1.03%) -> "Repère" (1u - 100%) - "A" = 4 (6u - 6.19%) -> "Repère" (6u - 100%) - "A" = 5 (6u - 6.19%) -> "Repère" (6u - 100%) - "A" = 6 (6u - 6.19%) -> "Repère" (6u - 100%) - "A" = 7 (6u - 6.19%) -> "Repère" (6u - 100%) - "A" = 8 (6u - 6.19%) -> "Repère" (6u - 100%) - "A" = 9 (6u - 6.19%) -> "Repère" (6u - 100%) - "A" = C (2u - 2.06%) -> "Repère" (2u - 100%) > (select-filter "DXF" nil nil '((8 . "UBS-*")) T) renvoie <Selection set: 21a8> ainsi que (pré-sélection d'objet pour ne conserver que les objets présents sur des calques dont le nom commence par "UBS-") et strictement équivalent à (select-filter "DXF" '(8) '(((8 . "UBS-*"))) nil T) : Nombre d'objet(s) sélectionné(s) = 2207u Liste des propriété(s) d'objet trouvée(s) : - 8 = UBS-100-Cotation (20u - 0.91%) -> "DIMENSION" (20u - 100%) - 8 = UBS-100-Ensemble structurel (Ponton) (113u - 5.12%) -> "INSERT" (113u - 100%) - 8 = UBS-100-Modules (48u - 2.17%) -> "LWPOLYLINE" (48u - 100%) - 8 = UBS-100-Structure eclisse (32u - 1.45%) -> "INSERT" (32u - 100%) - 8 = UBS-100-Structure flottante (Ext.) (31u - 1.4%) -> "INSERT" (31u - 100%) - 8 = UBS-100-Structure flottante (Int.) (28u - 1.27%) -> "INSERT" (28u - 100%) - 8 = UBS-100-Structure primaire (6.37m) (20u - 0.91%) -> "INSERT" (20u - 100%) - 8 = UBS-100-Structure primaire (7.13m) (1u - 0.05%) -> "INSERT" (1u - 100%) - 8 = UBS-100-Structure secondaire (4.25m) (12u - 0.54%) -> "INSERT" (12u - 100%) - 8 = UBS-300-Tranchées (Coupes) (1872u - 84.82%) -> "ARC" (534u - 28.53%) -> "DIMENSION" (45u - 2.4%) -> "HATCH" (15u - 0.8%) -> "INSERT" (109u - 5.82%) -> "LWPOLYLINE" (1124u - 60.04%) -> "MTEXT" (7u - 0.37%) -> "MULTILEADER" (32u - 1.71%) -> "SOLID" (6u - 0.32%) - 8 = UBS-900-Fenêtre de Présentation (30u - 1.36%) -> "CIRCLE" (16u - 53.33%) -> "LWPOLYLINE" (13u - 43.33%) -> "MTEXT" (1u - 3.33%) > (select-filter "BLC" '("Module*") '(((8 . "0,UBS-100-*"))) nil T) renvoie <Selection set: 21bf> ainsi que (pas de pré-sélection donc seuls les blocs dont le nom commence par "Module" et qui sont situés sur les calques "0" ou commençant par "UBS-100-") : Sélectionner des objets: Spécifiez le coin opposé: 4233 trouvé(s), 9 groupes Sélectionner des objets: Nombre d'objet(s) sélectionné(s) = 4032u Liste des bloc(s) trouvé(s) : - "Module générique F 2000x992x40" (4032u - 100%) > (select-filter "BLC" '("Module*") '(((8 . "0,UBS-100-*"))) nil nil) renvoie <Selection set: 21bf> ainsi que (sélection identique à la précédente) : 4032 trouvé(s) correspondant au retour de la fonction (ssget) (donc le nombre affiché peut être différent). --- Modifications apportées par rapport à la version précédente > Refonte totale de la fonction pour permettre une utilisation plus complète et plus riche. Ajout d'un argument !!! Si jamais vous avez quelques difficultés à l'utilisation, je peux expliciter un peu mieux que chat au cas par cas au besoin ! Bisous, Luna DtSel ¤ Select-Filter (3.0.0 - 20-04-2021).lsp
yann69690 Posté(e) le 7 février 2022 Posté(e) le 7 février 2022 Bonjour Luna, Je cherchais à pouvoir sélectionner uniquement des bloc avec une certaine valeur d'attribut, donc vraiment bien ta fonction, MERCI, juste maintenant il a creer un <Selection set: 219d> mais comment l'utiliser ou le rappeler pour en faire ce qu'on veut derrière hors script (perso j'ai besoin de copier et coller avec le point d'origine) Je te souhaite une excellente journée Cordialement
yann69690 Posté(e) le 7 février 2022 Posté(e) le 7 février 2022 Bon je me réponds à moi meme, c'est deja selectionnée Xd (pour ma petite défense c'était des points de GPS recollement donc si typePT mal réglé on ne vois pas s'ils sont sélectionnés ... En tout cas merci pour ce Lisp ça m'a éviter de chercher à la main 240 points parmi 4000. D'ailleurs la fonction filtre ne peux pas le faire (prendre uniquement les bloc ayant un attribut spécifié ayant une valeur commençant par....)? perso pas réussi Bonne journée et encore merci
Luna Posté(e) le 8 février 2022 Auteur Posté(e) le 8 février 2022 Coucou, Vui je n'ai pas trouvé de méthode pour le faire en version normale via la commande FILTRE ou SELECTRAP... En effet la fonction (select-filter) renvoie le jeu de sélection (pour le développeur) et rend la sélection courante (pour l'utilisateur). Elle n'est franchement pas évidente à utiliser malheureusement, bien que son utilisation ait pour but d'être utile, donc je suis contente de voir que tu as réussi 😉 Évidemment, elle n'est pas encore suffisamment au point et nécessite encore de nombreuses updates/améliorations avant d'être comme je le souhaite mais bon...quand le temps m'en laissera la chance >w< Bisous, Luna
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