Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Objektauswahl Filter mit IsXref funktioniert nicht (richtig?)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Objektauswahl Filter mit IsXref funktioniert nicht (richtig?) (117 mal gelesen)
Freibier
Mitglied


Sehen Sie sich das Profil von Freibier an!   Senden Sie eine Private Message an Freibier  Schreiben Sie einen Gästebucheintrag für Freibier

Beiträge: 8
Registriert: 15.09.2015

AutoCAD 2019.1.4

erstellt am: 28. Okt. 2022 08:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!

Bitte um Hilfe/Erklärung - ich stehe am Schlauch!
Ich möchte alle Blöcke, die einen bestimmten Namen(steil) haben, löschen. Allerdings nur jene, die sich innerhalb der Zeichnung befinden.
Im Beispiel mit "*test*" in der Abfrage enthalten.

Rennt ansich auch wie vorgesehen:

Code:
(vlax-for BLOCK (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
  (if (and (= (vla-get-isxref BLOCK) :vlax-false)
          (not (wcmatch (vla-get-Name BLOCK) "*|*"))
      )
      (vlax-for ITEM BLOCK 
        (if (and (= (strcase(vla-get-objectname ITEM))(strcase "AcDbBlockReference"))
                (wcmatch (strcase(vla-get-effectivename ITEM)) (strcase "*test*"))
                (not (vlax-property-available-p ITEM 'path))
            )
            (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list ITEM)))
        )
      )   
  )
)

Ist jedoch ein XREF hinterlegt, das mit seinem Namen das Kriterium auch erfüllt (Bsp.: "Polierplan Test"), wird dieses ebenfalls gelöscht.
Erst nachdem in der zweiten if-Abfrage das zusätzliche Kriterium mit dem Pfad (oben fett markiert) ergänzt wird, wird das XREF nicht mehr gelöscht.

Meine Frage daher:
macht der Code eigentlich "eh" was er soll und verstehe ich ihn nur falsch oder habe ich beim Code für das Kriterium etwas falsch geschrieben?
Mir ist nicht ganz klar, warum ein XREF aufgrund der ersten if-Abfrage überhaupt in die zweite Runde kommt  


Bin für jeden Hinweis dankbar!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21317
Registriert: 03.06.2002

Alles

erstellt am: 28. Okt. 2022 09:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Freibier 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Freibier:
Mir ist nicht ganz klar, warum ein XREF aufgrund der ersten if-Abfrage überhaupt in die zweite Runde kommt
Bin für jeden Hinweis dankbar

Lasse mal folgenden Code laufen
vllt ergibt sich dadurch der AHA-Effekt oder auch der AHHHH- oder Arrrgghh-Effekt.

Code:
(vlax-for BLOCK (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
  (if (and (= (vla-get-isxref BLOCK) :vlax-false)
          (wcmatch (vla-get-Name BLOCK) "`**")
      )
      (alert (vla-get-Name BLOCK)) 
  )
)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Freibier
Mitglied


Sehen Sie sich das Profil von Freibier an!   Senden Sie eine Private Message an Freibier  Schreiben Sie einen Gästebucheintrag für Freibier

Beiträge: 8
Registriert: 15.09.2015

AutoCAD 2019.1.4

erstellt am: 28. Okt. 2022 14:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für den ersten Schubser, ist garantiert die falsche Erkenntnis, aber ich wage den Versuch 

- Mit ":vlax-false" ist das XREF als anonymer Block mitgelistet --> *T|REF30
- Mit ":vlax-true" kommt nil
- Damit möchtest du mir sagen, dass die erste if-Abfrage falsch ist, wenn damit XREFs "ausgeschlossen" werden sollen (?)

Sehe es leider dennoch nicht, wies anders geschrieben sein sollte.
Die Abfrage "IsXref" in der zweiten Schleife liefert den

Code:
; Fehler: ActiveX-Server gab folgenden Fehler zurück: unbekannter Name: IsXRef

und die Abfrage nach einem "Pfad" in der zweiten Schleife differenziert dann offenbar sehr wohl zwischen intern/extern, sonst würde mit dieser Ergänzung das Ergebnis augenscheinlich nicht stimmen 


Bekomme ich bitte noch einen Dominostein? 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Konstrukteur Maschinenbau Anlagenbau (m/w/d)
Menschen und Technologien verbinden. Den Perfect Match für unsere Kunden gestalten. Immer die richtigen Experten für die jeweilige Herausforderung finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir Sie: als ambitionierten Kollegen, der wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden des Maschinenbaus und übernehmen Verantwortung für komplexe Entwicklungsprojekte....
Anzeige ansehenMaschinenbau
cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21317
Registriert: 03.06.2002

Alles

erstellt am: 28. Okt. 2022 15:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Freibier 10 Unities + Antwort hilfreich

>>"ist garantiert die falsche Erkenntnis"
Ja.

Ich wollte dir die Erkenntnis bringen dass du durch den Modellbereich und die Layouts wanderst
und Blockreferenzen suchst.

Eine Blockreferenz ist keine Xref und die Blockreferenz der verweist
auf den Blocknamen und der enthält keinen Pipe"*|*"

- Mit ":vlax-false" ist das XREF als anonymer Block mitgelistet --> *T|REF30
Ich verstehe den Satz nicht wirklich, die Antwort darauf wird dennoch Nein sein.


- Mit ":vlax-true" kommt nil
:vlax-true" hat mit nil zunächst nichts zutun,
aber die Lispfunktion = liefert true oder nil zurück, je nachdem wie der Vergleich ausgefallen ist.

- Damit möchtest du mir sagen, dass die erste if-Abfrage falsch ist, wenn damit XREFs "ausgeschlossen" werden sollen (?)
Absolut nicht, du bist auf dem völlig falschen Dampfer.

Sehe es leider dennoch nicht, wies anders geschrieben sein sollte.
Die Abfrage "IsXref" in der zweiten Schleife

Anmerkung: Diese Eigenschaft haben nur Blöcke!
https://help.autodesk.com/view/ACD/2023/DEU/?guid=GUID-2DB912E6-401E-4859-8D71-CAF474483D91

liefert den  Code:; Fehler: ActiveX-Server gab folgenden Fehler zurück: unbekannter Name: IsXRef
Weil in der zweiten Schleifer keine Blöcke bearbeitet werden und somit gibt es kein Objekt mit der Eigenschaft,
bereits beim ersten Objekt rennt der Code somit in einen Fehler.

>>"und die Abfrage nach einem "Pfad" in der zweiten Schleife differenziert dann offenbar sehr wohl zwischen intern/extern"
Nur Blockreferenzen der Xref selbst tragen einen Pfad,
Blöcke welche in der externen Datei definiert sind nicht!
Schau es dir an.


Für die Referenzen der externen DWG Referenzen,
welche kein kein Modellbereich und auch keine Layouts sind,
deren Referenzname auch keinen "|" enthält
musst du also extra schauen - was du mit dem "Eigenschaft PFad vorhanden?" machst.

 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2022 CAD.de | Impressum | Datenschutz