Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Auswahlsatz mit Filtern wird nicht korrekt erzeugt

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:  Auswahlsatz mit Filtern wird nicht korrekt erzeugt (1149 mal gelesen)
hendersson
Mitglied
GeoInformatiker


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

Beiträge: 27
Registriert: 12.08.2004

erstellt am: 21. Feb. 2005 12:19    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 liebes Forum,

mal wieder eine kleine Nachfrage zum einem Problem, das ich hier habe:
Ich will in einem Selectionset alle Elemente unterbringen, deren Layer mit dem Präfix "ELT" beginnen. Leider gibt der Code die Elemente aller  Layer in den Auswahlsatz und die weitere Verarbeitung läuft nicht mehr korrekt ab.
Gibt es generell Probleme bei der Anwndung von Filtern, die auf den DXF-Gruppencodes basieren? Vielleicht weiß ja der eine oder andere was dazu.

Hier noch ein bissel Code:

    Dim FilterType(0) As Integer
    Dim FilterData(0) As Variant
   
    FilterType(0) = 8
    FilterData(0) = "ELT*"
   
    Set acsAuswahlsatz = ThisDrawing.ActiveSelectionSet
    acsAuswahlsatz.Select acSelectionSetAll, , , FilterType, FilterData

Danke schon mal !!!!

hendersson

------------------

  L  I  N  U  X
  >Phear the Penguin<

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil
Inventor AIP 4-11, 2008 -2022
Win 10

erstellt am: 21. Feb. 2005 14:58    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 hendersson 10 Unities + Antwort hilfreich

Jo, diese Phänomen hatte ich auch schon mal. Allerdings mit AutoCAD 2002 und Ansteuerung via MS FoxPro.
DXF-Codes in Filtern hatten nicht die gewünschte Wirkung, stattdessen kamen immer alle Objekte zurück.

Hatte aber keine Lösung für das Problem und musste in einer Schleife nochmals die gesuchten Werte selektieren.

Bin aber auch interessiert an einer Lösung.
Käme da nicht Startrek in Frage?

------------------
Mit freundlichem Gruß

Udo Hübner
----------
Der versteckte Fehler bleibt nie unentdeckt.

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

hendersson
Mitglied
GeoInformatiker


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

Beiträge: 27
Registriert: 12.08.2004

erstellt am: 21. Feb. 2005 16:32    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

Und ich wieder.

Wir haben das Problem gefunden. Zum einen habe ich dem Auswahlsatz keinen neuen Namen zugeordnet, d.h. im Lokalfenster stand immer nur "Current". Ob das was mit unserem Problem zu tun hatte, wissen wir nicht zu 100 % - wahrscheinlich schon. Eine genaue Antwort brächte nur ein weiterer Test, für den ich allerdings leider keine Zeit habe.

Ein zweiter möglicher Punkt ist die weitere Verarbeitung der Auswahldaten. Guck dir mal meinen Code durch. Die Anmerkungen stehen in den REMs:

    Dim acsAuswahlsatz As AcadSelectionSet      'Auswahlsatz für die Darstellung
    Dim intAuswahl As Long                      'Laufindex der Objekte im Auswahlsatz
   
''' Löscht eventuell vorhandene Auswahlsätze
    If ThisDrawing.SelectionSets.count > 0 Then
      For intAuswahl = 0 To ThisDrawing.SelectionSets.count - 1
          ThisDrawing.SelectionSets.Item(intAuswahl).Delete
      Next intAuswahl
    End If
   
    Dim FilterType(0) As Integer
    Dim FilterData(0) As Variant
   
    FilterType(0) = 8
    FilterData(0) = "ELT*"
   
    Set acsAuswahlsatz = ThisDrawing.SelectionSets.Add("acsElementSelection") 'Hier der erste wichtige oben angesprochene Punkt
    acsAuswahlsatz.Select acSelectionSetAll, , , FilterType, FilterData

'' Alle Elemente der Zeichnung auf die richtigen EEDs prüfen und einem Array zuordnen
   
    For loZaehler = 0 To acsAuswahlsatz.count - 1
      '' EEDs des Elements holen
   
    'Wenn das Element auf einem Layer mit den ersten 4 Characters "xxxx"...
       
        acsAuswahlsatz.Item(loZaehler).GetXData xxxxxxx, varXDataTyp, varXDataWert
       
        '' Wenn die richtigen EEDs vorhanden sind
        If VarType(varXDataTyp) <> vbEmpty Then
            '' Index des Datensatzes aus den EEDs lesen
            loDataSetID = varXDataWert(2)
           
            '' Wenn ein Datenbank-Index vorhanden ist
            If loDataSetID > 0 Then
           
                '' Zähler addieren
                loElementsFound = loElementsFound + 1
                ''Array vergrößern
                ReDim Preserve entElementArray(loElementsFound - 1) As AcadEntity
                '' Element in das Array kopieren
                'Set entElementArray(loElementsFound - 1) = ThisDrawing.ModelSpace.Item(loZaehler) Diese Zeile ist fehlerhaft: Nicht der Modelspace mit seinen Elementen ist gefragt, sondern der Auswahlsatz !!!
                Set entElementArray(loElementsFound - 1) = acsAuswahlsatz.Item(loZaehler)
               
           
            End If
        End If
    Next
 

So, bei Fragen einfach melden.

Für mich ist das Thema abgeschlossen.

Cheers,

Hendrik

------------------

  L  I  N  U  X
  >Phear the Penguin<

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 21. Feb. 2005 20:44    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 hendersson 10 Unities + Antwort hilfreich

> Käme da nicht Startrek in Frage?

Udo, das war einer deiner Besten heute ;-))

Filterdata(0) = "startrek" >> runtime error at 021011488200078,
im Ernst, kenn mich mit den Filterndingens kaum bis wenig aus

lg Nancy
--
What is this 'Virtual' stuff?
If it's there and you can see it == it's real.
If it's not there and you can see it == it's virtual.
If it's there and you can't see it == it's transparent.
If it's not there and you can't see it == you erased it.
                                                           

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

TomiProg
Mitglied
Technischer Zeichner


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

Beiträge: 51
Registriert: 29.04.2004

WinNT4.0(SP6) + AutoCAD 14.01, P3/400MHz(gääähn),256MB,Graphtec KD4620, ATI 3D Rage Pro(8MB)

erstellt am: 24. Feb. 2005 14:12    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 hendersson 10 Unities + Antwort hilfreich

Hallo hendersson.

Probiere mal folgende geänderte Zeilen:
-----------------------------------------------

    Dim acsAuswahlsatz As AcadSelectionSet      'Auswahlsatz für die Darstellung
    Dim intAuswahl As Long                      'Laufindex der Objekte im Auswahlsatz
   
''' Löscht eventuell vorhandene Auswahlsätze
    If ThisDrawing.SelectionSets.count > 0 Then
      For intAuswahl = 0 To ThisDrawing.SelectionSets.count - 1
          ThisDrawing.SelectionSets.Item(intAuswahl).Delete
      Next intAuswahl
    End If
   
    Dim FilterType(0) As Integer
    Dim FilterData(0) As Variant
    Dim FType As Variant
    Dim FData As Variant

    FilterType(0) = 8
    FilterData(0) = "ELT*"
   
    FType = FilterType
    FData = FilterData

    Set acsAuswahlsatz = ThisDrawing.SelectionSets.Add("acsElementSelection") 'Hier der erste wichtige oben angesprochene Punkt
    acsAuswahlsatz.Select acSelectionSetAll, , , FType, FData

'' Alle Elemente der Zeichnung auf die richtigen EEDs prüfen und einem Array zuordnen
   
    Dim TeilObj as Object
    For Each TeilObj in acsAuswahlsatz
      '' EEDs des Elements holen
   
        TeilObj.GetXData xxxxxxx, varXDataTyp, varXDataWert
       
        '' Wenn die richtigen EEDs vorhanden sind
        If VarType(varXDataTyp) <> vbEmpty Then
            '' Index des Datensatzes aus den EEDs lesen
            loDataSetID = varXDataWert(2)
           
            '' Wenn ein Datenbank-Index vorhanden ist
            If loDataSetID > 0 Then
                ''Array vergrößern
                ReDim Preserve entElementArray(Ubound(entElementArray) + 1) As AcadEntity
                '' Element in das Array kopieren
                Set entElementArray(Ubound(entElementArray)) = TeilObj
            End If
        End If
    Next

--------------------------------------------------
Die Variablen FilterType und FilterData wurden nochmal auf Variant-Variablen ohne Datenfelder zugewiesen (FType und FData) und als Filterkriterium verwendet.
Im unteren Abschnitt wird der Auswahlsatz über For Each durchlaufen und die einzelnen Objekte auf GetXData-Inhalte geprüft.
Wozu das gemacht wird entzieht sich meiner Kenntniss.
Ich hoffe dir damit etwas weiter geholfen zu haben.

Gruß
Tomiprog

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