Hot News:

Unser Angebot:

  Foren auf CAD.de
  MicroStation
  Tags und VBA

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
  
TRICAD MS Piping 3D - Effizient Apparate- und Rohrleitungsmodelle planen , eine App
Autor Thema:  Tags und VBA (1134 mal gelesen)
zech
Mitglied



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

Beiträge: 97
Registriert: 09.11.2004

erstellt am: 22. Feb. 2005 12:10    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 habe ein kleines Problem.
Es geht dabei um Vermessungspunkte. Jeder Punkt ist eine Line der Länge 0.0. Dies ist wohl so bei Microstation, es gibt hier keinen
Punkt sowie bei Acad. Jeder dieser Punkte hat eine bestimmte Punktnummer. Diese ist wichtig um Punkte zu identifizieren. Haben wir zusätzlich als Text mit dran. Jetzt soll mit den Punkten z.B. gerechnet werden, oder Linien sollen automatisch über die Angabe der Punktnummer gezeichnet werden.
Dazu habe ich ein Tagset PUNKT eingerichtet mit einer Definition NR
(also PUNKT.NR) und noch einige andere Definitionen, die hier aber keine Rolle spielen (Art des Punktes usw. ist halt Vermessung)

ich gebe jetzt eine Punktnummer ein und muss nach der Programmierung (siehe unten) sämtliche Elemente durchgehen die Tags haben und dann einzel immer vergleichen ob PUNKT.NR = meine gesuchte Nummer ist.

Bei vielen Punkten dauert dies ziemlich lange.
kann man vielleicht die Suche noch weiter eingrenzen?

Die integrierten Funktionen sind viel schneller.
Bearbeiten
  Auswählen über Attribute
            Sachdaten
              dann PUNKT.NR gleich <die entsprechende Nummer>

  filter.ExcludeAllTypes
  filter.IncludeType msdElementTypeTag
 
  Set oEnum = ActiveModelReference.Scan(filter)
 
  Do While oEnum.MoveNext
    usw....
 
hier die Schleife muss ich jetzt bis zum Ende durchlaufen
und den TagDefinitionName suchen bis er übereinstimmt.
Dauert lange

Vielleicht hat jemand ein ähnliches Problem und kann mir helfen

Danke schon im voraus

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

stark
Mitglied
Dipl.Informatiker


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

Beiträge: 680
Registriert: 27.06.2001

MicroStation V8i auf Windows 7 + 8.1

erstellt am: 25. Feb. 2005 12:01    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 zech 10 Unities + Antwort hilfreich

Hallo Zech

1. definiere Schneller, ich glaube kaum, das das wirklich der Fall ist. Du suchst bei 1000 Punkten in der Zeichnung 1000 mal alle Elemente durch (do while enum.next), die MicroStation sucht das Ganze einmal (in Auswählen über Attribute). Dazu kommt, das die MicroStation den Tag sofort auswertet, währen Du dies im Nachgang machst, also die Extraktion der Tags mindestens 2 mal erfolgt und Du nicht nur Deine Tagdefinitionen durchsuchst, sondern alle in der Zeichnung enthaltenen. (OK, MS kann hier einfach schneller filtern  in mdl)
2. Du kannst Dir einmal die Ganze Liste zurückgeben lassen,und dann Deinen eigenen Suchbaum aufbauen, das ist wahrscheinlich wesentlich effektiver (ein binärer Suchbaum benötigt hier 8 Schritte, statt durchschnittlich 500 bei sequentieller Suche mit Abbruch)
3. warum suchst Du die Punkte aus der Zeichnung. Soweit ich mich an meine Vermessungszeiten erinnere, hatte ich die Informationen welche Punkte für Linien benötigt werden, immer nur zu dem Zeitpunkt, als ich die Punkte erzeugt habe (aus der Feldvermessung, alles andere dürfte ohnehin nur manuell gehen - damals mit Leica Geräten). Also warum nicht ein Liste halten, die die benötigten Punkte enthält, und die ElementID beim Erzeugen des Punktes in diese Liste eintragen ? Die Suche über die ElementID kostet so gut wie gar nichts.

Noch ein wenig mehr Code für die Funktion in der Schleife wäre hilfreich, aber noch besser Schleife eliminieren. Bin kein VBA-Programmierer, kann Dir also syntaktisch kaum weiterhelfen, aber alle Deine VBA-Routinen gehen auf mdl-Funktionen zurück, und die kenn ich besser.

HTHHope this helps (Hoffe, es hilft weiter) Michael

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