yoin

peter smith


Beste allen,

Ik heb in mijn kozijntekening een vaste block (blocknaam: kozjinmerk) met attribute veelvoudig gebruikt. Als er een wijziging op een kozijnmerk komt, moet ik nu handmatig stuk voor stuk selecteren. En de attribute aanpassen via property. het handmatog selecteren is tijdrovend.

Vraag:
Hoe kan ik, deze blocks (met attribute), op een bepaalde inhoud snel selecteren?


Groeten,
peter smith

hulpje

Beste Peter,

Kijk eens naar het commando QSELECT.

Mvg. Richard
HELAAS BESTAAT CADToppers.com niet meer
ACP-er (AutoDesk Certified Professional)

peter smith

Hoi beste hulpje,

via QSELECT kan ik geen inhoud van attribute selecteren.


Een voorbeeld:
ik wil bv alle kozijnmerken "A-02a" selecteren. Hoe kan ik snel selecteren?

Groeten,
peter

roy_043

Deze Lisp werkt in BricsCAD:
(defun c:MerkSelect ( / attContent ssOut)
  (vl-load-com)
  (sssetfirst nil nil)
  (if
    (and
      (/= "" (setq attContent (strcase (getstring T "\nMerk?: "))))
      (ssget "_X" '((0 . "INSERT") (2 . "kozijnmerk") (66 . 1)))
    )
    (progn
      (setq ssOut (ssadd))
      (vlax-for refObj (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
        (vl-some
          '(lambda (attObj)
            (if
              (and
                (= "KOZIJNMERK" (strcase (vla-get-tagstring attObj)))
                (= attContent (strcase (vla-get-mtextattributecontent attObj)))
              )
              (ssadd (vlax-vla-object->ename refObj) ssOut)
            )
          )
          (vlax-invoke refObj 'getattributes)
        )
      )
    )
  )
  (if (zerop (getvar 'cmdactive))
    (progn
      (sssetfirst nil ssOut)
      (princ)
    )
    ssOut
  )
)

peter smith

Weet je hoe ik deze lisp in een kale autocad moet invoeren?  :roll:
ik ben niet zo goed in lisp.

roy_043

#5
1.
Open Notepad.
2.
Kopieer alle code in het bestand.
3.
Sla op met de .lsp extensie.
4.
Gebruik bijvoorbeeld het _APPLOAD commando om het Lisp bestand te laden.
5.
Gebruik:
MerkSelect
Of:
'MerkSelect
Om het Lisp commando te starten.

Meer info:
http://www.jtbworld.com/lisp/acaddoc.htm (voor AutoCAD)
http://www.b-k-g.nl/loading-lisp-programs.html (voor BricsCAD)

peter smith

Ik heb een lsp-bestand aangemaakt en in autocad geladen (zie kozijnmerk.jpg). De commando "merkselect" wordt ook herkend. Maar als ik de merk ingetypt heb, gebeurt er niet veel(zie bijlage commando merkselect). Heb ik iets fout gedaan?

roy_043

#7
Als MerkSelect om een merk vraagt dient een merk (bijv. A-02a) te worden ingevoerd.
MerkSelect is niet hoofdlettergevoelig.

Het Lisp-commando kan op twee manieren worden gebruikt:
1.
Er is geen AutoCAD commando actief:
De kozijnen met het ingevoerde merk worden 'gegript'.
2.
Er is een AutoCAD commando actief en dat commando vraagt om een selectie:
In dit geval moet 'MerkSelect (met apostrof) worden ingevoerd om het Lisp-commando te gebruiken.
De kozijnen met het ingevoerde merk worden toegevoegd aan de selectieset van het commando.

roy_043

@ peter smith:
Werkt het 'programmaatje' ook in AutoCAD?

peter smith

Hoi roy_043,

Het werkt nog niet.  :oops: Ik durf eigenlijk ook niet meer te vragen wat ik fout heb gedaan. Daarom is het een beetje stil.

Wat ik gedaan heb:
1. ik heb de lisp-routine geladen dmv _appload
2. typen "merkselect" (zonder aanhalingstekens)
3. een kozijnmerk intypen (zoals bijgevoegd plaatje rechtsonder).

Maar daarna wordt niets geselecteerd.  :roll:
Ik heb een aantal keer geprobeerd. Zal het te maken, omdat ik een kale autocad-versie heb?  :(

Groeten,
peter

roy_043

#10
@ peter smith:
Er kunnen meerdere dingen spelen:
1.
Er wordt per ongeluk een spatie getypt als het merk wordt opgegeven.
2.
Het block heeft een andere naam gekregen.
3.
AutoCAD gaat iets anders om met de 'active selectionset'.

Bijgevoegd een alternatieve versie. Verbeteringen/wijzigingen:
1.
Deze versie kijkt niet naar de blocknaam. Hierdoor is het programmaatje meer algemeen te gebruiken.
2.
'Wildcards' (= jokertekens) kunnen worden gebruikt.
3.
De selectieset wordt op een andere manier benaderd.
4.
Het commando heet nu 'AttSelect'.

Probeer bij het testen te letten op onnodige spaties.
En probeer het commando ook eens uit 'binnen' een AutoCAD commando:
: SELECT
Select entities to include in set: 'attselect
Text to look for (wildcards possible): a-02*
<Selection set: 16454868>
Select entities to include in set:
6 found.
Entities in set: 6
Select entities to include in set:


In jouw screenshots valt op dat er tussen de tests iets wordt gedaan ('crossing', 'isoplane') wat is er dan aan de hand?