Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Schneller Zugriff auf Liste

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
  
Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
Autor Thema:  Schneller Zugriff auf Liste (824 mal gelesen)
Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 25. Feb. 2010 11:23    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,

ich bräuchte bitte mal eine kleine Starthilfe.
Problemstellung:
Eine dwg mit mehreren tausend Blöcken muss mehrfach nach einem bestimmten Block durchsucht werden.
Bisher hab ich dafür mit ... for each Block in ... gesucht. Aber das ist bei vielen Suchläufen langsam.
Idee:
Alle Blöcke inklusiver der relevanten Eigenschaften (Attributinhalt) in eine Liste einlesen, und dort nach dem entsprechenden Werten suchen.
Frage:
Welche Art von Liste muss ich verwenden, und wie kann ich schnell eine Info aus der Liste abfragen. Kann ich das irgendwie indizieren, oder muss ich in der Liste wieder mit for each suchen?
Sollte ich das im VBA machen? Oder ist es besser VB2008 zu verwenden?

lg
Didi

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


Ex-Mitglied

erstellt am: 25. Feb. 2010 11:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

zuerst mal der AutoCAD-Teil mittels SelectionSet, wo Du Blockname bereits angibst. Dann sucht AutoCAD für Dich und Du musst nicht alle Elemente durchscannen, was mit VBA (insbesondere, wenn Du 64bit AutoCAD arbeitest) extrem viel langsamer ist.

Aus dem Resultat hätte ich mir dann ein Array oder Collection gebaut, in der ich per Klassendefinition Handle und Attributswerte (und was auch sonst noch notwendig ist) speichere. Dann hast Du mal alles im Memory und bist schneller als jedesmal von neuem Attributswerte aus der Blockreferenz zu lesen.

'Suchen'/'Vergleichen'/'Sortieren' solltest Du in div. VBA-Foren jede Menge Beispiele finden.


>> Sollte ich das im VBA machen? Oder ist es besser VB2008 zu verwenden?

Ich kenne weder die Aufgabe genau genug, noch hätte ich eine Mengendefinition (wie groß sind Deine Zeichnungen, wie oft brauchst Du diese Funktion) und auch Deine Fähigkeiten sind mir nicht bekannt. Da wird's mit Tips schwer ob VBA oder VS.
Würde ich es machen, hängt es ebenfalls von diesen Kriterien ab (nur meine (Un-)Fähigkeiten kenne ich ein wenig )

- alfred -

------------------
www.hollaus.at

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 25. Feb. 2010 13:08    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 sehr

lg
didi

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 25. Feb. 2010 16:25    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 nochmal,

für den Fall, dass es jemanden interessiert.

Ich habe jetzt im VBA einfach mal die Attribute und Handles der Blöcke in ein unsortiertes Array geschrieben. Und suche nicht mehr mit .. for each .. im Autocad Objektcontainer sondern mit for i = 0 to AnzahlEinträge eben in jenem Array. Wenn ich was finde übergebe ich das Handle an eine Objektvariable usw.

Der Geschwindigkeitsvorteil ist überwältigend!
Also ohne mir Gedanken über schnellen Listenzugriff, Sortierung, Array, Collection oder sonstiges zu machen hab ich mein Makro schon mal enorm beschleunigt.

Testeweise habe ich in ca. 13000 Blöcken nach 33 Blöcke mittels AttWert-Vergleich gesucht.
... for each Block ...  braucht 14 sec.
... suche in Liste ...  braucht  0 sec. 
und das inklusive Aufbau der Liste!


lg
Didi

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)2025 CAD.de | Impressum | Datenschutz