Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  selectionset sortieren?

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
  
PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
Autor Thema:  selectionset sortieren? (2705 mal gelesen)
gzwi
Mitglied
Spezialtiefbau


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

Beiträge: 11
Registriert: 21.05.2007

erstellt am: 21. Mai. 2007 13:33    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 zusammen!

Fällt jemanden was dazu ein ob man ein Selectionset nach x bzw. y Richtung sortieren kann (ähnlich wie bei den Expresstools für Automatic Text Numbering)

Ich würde das für folgenden code benötigen:

Private Sub numberButton_Click()
PointForm.Hide
Dim sset As AcadSelectionSet, obj As AcadEntity, att, atts
    Set sset = ThisDrawing.SelectionSets.Add("002")
    sset.SelectOnScreen
        For Each obj In sset
        If TypeOf obj Is AcadBlockReference Then
            If obj.HasAttributes Then
                atts = obj.GetAttributes
                For Each att In atts
                Number = Number + 1
                att.TextString = Number
                Next
            End If
        End If
    Next
    sset.Delete
End Sub

vielen Dank im voraus
Gerald

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 21. Mai. 2007 15:17    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 gzwi 10 Unities + Antwort hilfreich

Hallo Gerald,

so ganz automatisch geht es wohl nicht.
Da war doch mal was ähnliches.

Ansonsten die Elemente in eine Array mit benutzerdefinierter Struktur (Mit Koordinaten) speichern und dann via Quick- / Bubblesort in die gewünschte Reihenfolge bringen.

Zu den Sortier Methoden gibt es in Google einiges.

Stelli

PS: herzlich willkommen im VBA Forum

------------------
Warum lisp'eln wenn's auch anders geht. 
www.ib-stelberg.de

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 21. Mai. 2007 15:53    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 gzwi 10 Unities + Antwort hilfreich

Hallo Gerald,

hatte noch eine Idee wie es ohne viel Programmieraufwand geht.
Dazu musst du unter Verweisen aber Mircrosoft ActiveX Data Objects Recordset 2.x Libary einstellen.
Dann kannst du alle Möglichkeiten eines Recordsets im Speicher nutzen.
Also Sortieren, Filtern, Suchen ..

Code:
Sub test()

    Dim MeineElemente As New ADOR.Recordset
   
    MeineElemente.Fields.Append "y", adDouble
    MeineElemente.Fields.Append "x", adDouble
    MeineElemente.Fields.Append "Index", adInteger
   
    MeineElemente.Open
    For i = 1 To 10000
        With MeineElemente
            .AddNew
            .Fields("Y").Value = Int(Rnd() * 1000)
            .Fields("X").Value = Int(Rnd() * 1000)
            .Fields("Index").Value = i
            .Update
        End With
    Next i

    MeineElemente.Sort = "y,x"
   
    For i = 1 To MeineElemente.RecordCount
        Debug.Print MeineElemente.Fields("Y"), MeineElemente.Fields("x"), MeineElemente.Fields("index")
        MeineElemente.MoveNext
    Next i


End Sub



Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

gzwi
Mitglied
Spezialtiefbau


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

Beiträge: 11
Registriert: 21.05.2007

erstellt am: 22. Mai. 2007 10:48    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 Stelli!

Erst mal Dank für Dein Wilkommensgruss und Deine Beiträge.
Bis jetzt konnte ich meine Probleme immer mit stillen mitlesen lösen, doch diesmal hänge ich einfach.

Ich bin gerade hinter dem Lösungsansatz mit dem Recordset dahinter - nun meine wahrscheinlich "blöde" Frage - wie bekomme ich meine Daten aus dem Autocad in den Recordset?

Danke für die Hilfe
Gruss
Gerald

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1360
Registriert: 24.07.2002

AutoCAD ACA 2024
Solidworks 2022 Sp5
Enterprise PDM 2022 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell Precision 3660
Intel Core i9-12900K
32 GB Arbeitsspeicher
2x Dell U2415

erstellt am: 22. Mai. 2007 13: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 Nur für gzwi 10 Unities + Antwort hilfreich

Hi Gerald,

Hier mal was auf die schnelle, wie du den Recordset füllen kannst:

Code:
Private Sub numberButton()
    Dim sset As AcadSelectionSet
    Dim obj As AcadBlockReference
    Set sset = ThisDrawing.SelectionSets.Add("007")
    Dim MeineElemente As New ADOR.Recordset
    Dim i As Integer
 
    MeineElemente.Fields.Append "y", adDouble
    MeineElemente.Fields.Append "x", adDouble
    MeineElemente.Fields.Append "Index", adInteger
    sset.SelectOnScreen
    MeineElemente.Open
    i = 0
        For Each obj In sset
            With MeineElemente
            .AddNew
            .Fields("Y").Value = obj.InsertionPoint(1)
            .Fields("X").Value = obj.InsertionPoint(0)
            .Fields("Index").Value = i
            .Update
            i = i + 1
        End With
       
        Next
    sset.Delete
End Sub

Gruß, Carsten

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

gzwi
Mitglied
Spezialtiefbau


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

Beiträge: 11
Registriert: 21.05.2007

erstellt am: 23. Mai. 2007 11:49    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 Stelli und Carsten!

Vielen Dank für Eure Hilfe.

Ich habs jetzt am laufen:
Private Sub TestButton_Click()
PointForm.Hide
Dim sset As AcadSelectionSet, object As AcadEntity, att, atts
Dim ssettemp As AcadSelectionSet
    Dim obj As AcadBlockReference
    Set sset = ThisDrawing.SelectionSets.Add("001")
    Dim MeineElemente As New ADOR.Recordset
    Dim i As Integer
    Dim pkt(2) As Double
    MeineElemente.Fields.Append "y", adDouble
    MeineElemente.Fields.Append "x", adDouble
    MeineElemente.Fields.Append "Index", adInteger
    sset.SelectOnScreen
    MeineElemente.Open
    i = 0
        For Each obj In sset
                    With MeineElemente
            .AddNew
            .Fields("Y").Value = obj.InsertionPoint(1)
            .Fields("X").Value = obj.InsertionPoint(0)
            .Fields("Index").Value = i
            .Update
            i = i + 1
        End With
        Next
      MeineElemente.Sort = "x,y"
 
    For i = 1 To MeineElemente.RecordCount
        pkt(0) = MeineElemente.Fields("X")
        pkt(1) = MeineElemente.Fields("Y")
        Set ssettemp = ThisDrawing.SelectionSets.Add("002")
        ssettemp.SelectAtPoint pkt
For Each obj In ssettemp
                atts = obj.GetAttributes
                For Each att In atts
                x = x + 1
                att.TextString = x
                Next

    Next
        MeineElemente.MoveNext
        ssettemp.Delete
        Next i
    sset.Delete
PointForm.Show
End Sub

Nochmals Danke für die Hilfe
und grüsse aus Wien

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 23. Mai. 2007 12:04    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 gzwi 10 Unities + Antwort hilfreich

Hallo,

schön das es klappt.  

aber .. es geht auch schneller und eleganter ohne zweites Selectionset

Code:

For i = 1 To MeineElemente.RecordCount
    set obj = sset(MeineElemente.fields("Index"))
    atts = obj.GetAttributes
    For Each att In atts
        x = x + 1
        att.TextString = x
    Next
    MeineElemente.MoveNext
Next i


Wilfried Stelberg

[EDIT: war noch ein Fehler drin]
------------------
Warum lisp'eln wenn's auch anders geht.  
www.ib-stelberg.de

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

gzwi
Mitglied
Spezialtiefbau


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

Beiträge: 11
Registriert: 21.05.2007

erstellt am: 23. Mai. 2007 13:28    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 Stelli!

War etwas holprig mein Code -> mir fehlt doch etwas die Routine(hab mich erst letzte Woche in vba eingelesen)

Danke für den Korrektur - ein schlanker code ist mir doch am liebsten.

fg
Gerald

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

pistolpete1
Mitglied
Student


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

Beiträge: 102
Registriert: 06.01.2007

erstellt am: 26. Sep. 2007 20:07    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 gzwi 10 Unities + Antwort hilfreich


Problemstellung.jpg

 
Hallo schlaues Forum,

ich habe ein ähnliches Problem: Ich will mittels eines SelectionSets einen Bereich selektieren und zusätzlich die Elemente hinsichtlich Ihrer Koordinaten zB von unten nach oben sotieren. Die Elemente können sowohl BlockReferences, als auch AcadLines sein (siehe Skizze).

Ist das mit einem gefinkelten SelectionSet lösbar, oder muss ich mit dem Quicksort arbeiten?

Lg Peter

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 28. Sep. 2007 15:41    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 gzwi 10 Unities + Antwort hilfreich

Hallo Peter,
Zitat:
Original erstellt von pistolpete1:
Ist das mit einem gefinkelten SelectionSet lösbar, oder muss ich mit dem Quicksort arbeiten?

Mit Quicksort würdest du nur so was proggen was im Recordset schon drin ist.
Du kannst nach jedem Feld sortieren.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

pistolpete1
Mitglied
Student


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

Beiträge: 102
Registriert: 06.01.2007

erstellt am: 28. Sep. 2007 18:41    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 gzwi 10 Unities + Antwort hilfreich

Hallo Wilfried,

danke für deine Antwort. Kannst du mir bitte einen Anhaltspunkt bzw. eine Beispiel geben.

lg peter

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 28. Sep. 2007 18:48    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 gzwi 10 Unities + Antwort hilfreich

Hallo Peter,
Hier war ein Beispiel da wird zuerst nach Y und dann nach x sortiert.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

pistolpete1
Mitglied
Student


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

Beiträge: 102
Registriert: 06.01.2007

erstellt am: 28. Sep. 2007 19:50    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 gzwi 10 Unities + Antwort hilfreich

Hallo Wilfried,

ist es möglich, dass du den Link verwechselt hast, der verweist auf den aktuellen Thread. lg peter

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1360
Registriert: 24.07.2002

AutoCAD ACA 2024
Solidworks 2022 Sp5
Enterprise PDM 2022 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell Precision 3660
Intel Core i9-12900K
32 GB Arbeitsspeicher
2x Dell U2415

erstellt am: 29. Sep. 2007 05: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 gzwi 10 Unities + Antwort hilfreich

Hallo Peter,

Der Link von Stelli verweist doch auf ein Beispiel, wie du es haben wolltest. In diesem Fall ist es halt die 2. Antwort in diesem Beitrag.
Definiere dein Problem doch mal genauer, wenn du aus dem Beispiel nicht schlau wirst.

Gruß, Carsten

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

pistolpete1
Mitglied
Student


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

Beiträge: 102
Registriert: 06.01.2007

erstellt am: 29. Sep. 2007 12:00    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 gzwi 10 Unities + Antwort hilfreich


Problemstellung.jpg

 
Hallo Carsten,

ich hatte das Beispiel bereits vor meinem Post entdeckt und durchgedacht. Was mich verwirrt ist, dass Wilfried in seinem ersten Post gemeint hat, dass ich alles mit einem Recordset machen kann, was ich auch mit einem Sortieralgorithmus (wie in dem Beispiel) machen kann.

Ich werd mein Problem nochmal näher erklären. Im Prinzip entspricht die Lösung genau dem, wonach ich suche. Ich muss immer entlang der blauen Linie sortieren, wobei der Winkel der Linie variieren kann. Mit der Lösung von Wilfried würde es eh funktionieren, ich weiß nur nicht ob ich die Elemente mit einem Selectionset selektieren und dann manuell nach dem Algorithmus sortieren soll, oder ob es eine einfachere Lösung gibt.

Mit den Recordsets kenne ich mich nicht aus. Könntest du mir da bitte einen Anhaltspunkt geben?

lg Peter

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 29. Sep. 2007 15:56    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 gzwi 10 Unities + Antwort hilfreich

Hallo Peter,

vielleicht wäre es hilfreich wenn du mal erklärst was du machen willst.
Wie man ein Recordset erstellt, Werte abfüllt und diese sortiert ist in dem genannten Beispiel doch drin.
Ich vermute mal, dass du eine Tabelle der Schäden einer Haltung, sortiert nach Stationierung, erstellen willst. Dafür musst du dem Benutzer doch die Möglichkeit geben eine Haltung zu wählen. Wie soll das laufen ? Wie kann man erkennen welche Elemente berücksichtigt werden sollen ? Gibt es Sachdaten wie z.B. eine Schachtbezeichnung als Attribut ? Gibt es eine Zeichenvorschrift die sagt das eine Haltung immer in Fließrichtung gezeichnet ist ?
Eine Möglichkeit wäre es die Haltung vom Benutzer wählen zu lassen. Am Anfangs- und Endpunkt wird jeweils ein Selectionset (selectAtPoint) gebildet um den Anfangs- und Endschacht zu finden. Die Extremwerte der Haltung bilden ein Rechteck. Innerhalb dieses Fensters werden alle Elemente in ein Selectionset gebracht. Für jeses Element wird geprüft (intersecWith) ob es die Haltung berührt und zu den Daten gehört.... usw.
Oder wie hast du dir das vorgestellt ?

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

pistolpete1
Mitglied
Student


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

Beiträge: 102
Registriert: 06.01.2007

erstellt am: 29. Sep. 2007 16:36    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 gzwi 10 Unities + Antwort hilfreich


Problemstellung.jpg

 
Hallo Wilfried,

danke für deine Bemühungen. Ich werde versuchen mein Problem genauer zu definieren.
Du bist mit der Aufgabenstellung ohnehin schon durch meine zahlreichen Posts vertraut  . Die rote Linie (siehe Grafik) stellt den Kanal dar. Das Problem mit der Fließrichtung habe ich bereits gelöst, die ist zu diesem Zeitpunkt nicht relevant. Entlang der Kanallinie sind Schadstellen und Polykotierungen (also entweder AcadBlockReferences oder AcadLines).

Der Endpunkt der Linie, der innerhalb des Schachtes liegt, ist der Ausgangspunkt für die Sortierung entlang der Linie.

In meinem Beispiel soll folgendes Rauskommen:

1.) Linie von 1,1m bzw. Linie von starke Ablagerung
2.) 1,6m bzw. Block links von Muffenöffnung
3.) Linie von 2,0m
4.) Linie von Muffenöffnung
5.) Linie von 2,1m

Ich habe eine Funktion, die mir die Punkte für ein Rechteck um die Linie (abhängig vom Winkel) berechnet (siehe Grafik). Anschließend könnte ich mit einem Selectionset und acSelectionSetCrossingPolygon die Linien für die Polikotierung selektieren.

Anschließend kann ich sie mit deinem System (Abstand zum Startpunkt) sortieren. Ich weiß nicht genau, wofür ich da ein Recordset brauche.

Ich hoffe du weißt was ich meine,

lg peter

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 29. Sep. 2007 18:18    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 gzwi 10 Unities + Antwort hilfreich

Hallo Peter,

dann ist es doch relativ einfach. Du legst ein Recordset mit den Feldern ID und ABSTAND an. Du durchläufst dein Selectionset in einer Schleife und Berechnest für jeden Punkt den Abstand zum Anfangspunkt. Den Abstand und die ID, also die Position im Selectionset, speicherst du in das Recordset.
Nachdem alle Punkt abgefüllt sind sortierst du das Recordset mit rs.sort "Abstand". Das Recordset ist doch wie eine imaginäre Exceltabelle. Nach der Sortierung fängst du mit dem ersten Datensatz an und durchläufst alle Datensätze.
Damit hast du das was du brauchst. Über die ID kannst du auch noch jederzeit auf das Element zugreifen. Du könnest auch weitere Felder für deine Schadensbeschreibung anlegen und diese über den Blocknamen etc. belegen.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht. 
www.ib-stelberg.de

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

pistolpete1
Mitglied
Student


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

Beiträge: 102
Registriert: 06.01.2007

erstellt am: 29. Sep. 2007 19: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 gzwi 10 Unities + Antwort hilfreich

okay, dann werde ich das so machen.
die ObjectID bekomme ich ja mit obj.ObjectID, aber wie bekomme ich aus der ID wieder eine Referenz auf das Objekt?

Lg

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



Anzeige:Infos zum Werbeplatz >>

GWB Get wooden beams CAD APP für Holzarbeiten, 3D, Tiefbau

An add-on for AUTOCAD wich identifies wooden beams from 3D DWG drawings of wooden houses. The result of the program is a drawing with the identified parts (numbered and dimensioned) and a file of quantities that can be loaded into EXCEL.

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 30. Sep. 2007 13:02    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 gzwi 10 Unities + Antwort hilfreich

Hallo Peter,

ein Selectionset ist eine Collection von Referenzen zu Objekten die durch eine Auswahl aus der Zeichnung gefüllt wird. Das heisst, jede Referenz hat eine Position(ID) innerhalb des Selectionsets.

Code:
for ID=0 to sset.count -1
    set RefObj = sset(ID)
next ID

Du kannst aber auch das Handle der Objekte speichern.
Code:
handle=RefObj.Handle

Dann bauchst du nicht mehr auf dein Selectionset zurückgreifen und kannt mit
Code:
set RefObj=Thisdrawing.HandleToObject(Handle)

das Objekt wieder ansprechen.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht. 
www.ib-stelberg.de

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