Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Eckpunkte von Geometrie entgegen Uhrzeigersinn messen

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
Autor Thema:  Eckpunkte von Geometrie entgegen Uhrzeigersinn messen (1298 / mal gelesen)
M.Ungericht
Mitglied
Student

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

Beiträge: 9
Registriert: 14.05.2018

MS Windows 7 Professional
Catia V5 6R2017

erstellt am: 07. Jun. 2018 08:03    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


Geometrie.jpg

 
Guten Morgen zusammen,

aus einer Geometrie möchte ich die Eckpunkte auslesen.
Der Anwender des Makros soll dabei einen Punkt auswählen, von dem dann entgegen des Uhrzeigersinns die restlichen Punkte angewählt werden, um dann den jeweiligen Abstand zum Referenzpunkt ausmessen zu können, der irgendwo innerhalb der Geometrie liegen kann.
Die Punkte sind dabei nicht in einer bestimmten Reihenfolge und Punkt1 nicht immer der Startpunkt,(siehe angehängte Datei) was mein Wissen an die Grenzen bringt.
Auch ist es möglich dass ein Punkt nicht auf den Linien liegt, dieser soll dann nicht beachtet werden.

Danke.

Gruß Mark

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 07. Jun. 2018 17:34    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 M.Ungericht 10 Unities + Antwort hilfreich

Servus

Die Koordinaten er Punkte solltest du über GetCoordinates auslesen können (siehe Point2D  in der Doku)
Den Abstand zum Referenzpunkt entweder berechnen (beide Koordinaten bestimmen und dann berechnen) oder den Abstand über die SPA-Workbench messen.
Fest zu stellen ob die Punkte auf einer Linie liegen:
- Punkte in eine Collection/Array packen
- Linien/Kurven in einen Array packen
- per Schleife alle Punkte abarbeiten und den Abstand zu jeder Linie/Kurve ermitteln. Falls ein Abstand 0 ist zum nächsten Punkt gehen. Falls alle Abstände eines Punktes größer 0 ist, Punkt später nicht berücksichtigen
Die Reihenfolge der Punkte (Drehsinn) könntest du so bestimmen:
- zwei Dimensionales Array anlegen: Punktname, X, Y, Winkel alpha
- Array befüllen, Winkel mit tan(Y/X) berechnen
- Array sortieren
Viel Spaß dabei das ganze auszuarbeiten und zusammen zufügen

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

M.Ungericht
Mitglied
Student

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

Beiträge: 9
Registriert: 14.05.2018

MS Windows 7 Professional
Catia V5 6R2017

erstellt am: 07. Jun. 2018 18:42    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 Bernd,

Danke für deine Antwort, ich werde mich morgen gleich mal daran versuchen. Eventuell könnten noch ein paar Problemchen auftreten 


Gruß Mark

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

M.Ungericht
Mitglied
Student

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

Beiträge: 9
Registriert: 14.05.2018

MS Windows 7 Professional
Catia V5 6R2017

erstellt am: 08. Jun. 2018 14:59    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


Geometrie2.JPG

 
Hallo nochmal,

danke Bernd, ich konnte deine Vorschläge soweit umsetzen und auch die Winkel werden richtig berechnet und im Array abgelegt.
Leider kommt, wie auf dem Bild zu sehen, das Makro bei den Punkten E und F an seine Grenzen. Da hier Punkt F einen kleineren Winkel zum Referenzpunkt in der Mitte hat, wird erst Punkt F und dann Punkt E ausgegeben, was falsch herum ist. Im Moment fällt mir dazu nichts ein, da das überall vorkommen kann.
Ich hoffe jemand hat dazu eine Idee.

Danke.

Gruß Mark

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 08. Jun. 2018 15:15    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 M.Ungericht 10 Unities + Antwort hilfreich

Servus Mark

Eckpunkte von einer Geometrie in der richtigen Reihenfolge ausgeben zu lassen könnte zB so gehen:
- Kontur erstellen (zB Skizze)
- Kontur im GSD zusammenfassen
- den Join selektieren und nach Scheitelpunkten bzw Kanten suchen lassen
- die selektieren Elemente sind (nach meinem Kurztest) dann in der entsprechenden Reihenfolge entlang der Kontur
Allerdings kann der Anfang und die Richtung nicht definiert werden. ggf dies dann danach filtern/analysieren/berechnen.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

M.Ungericht
Mitglied
Student

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

Beiträge: 9
Registriert: 14.05.2018

MS Windows 7 Professional
Catia V5 6R2017

erstellt am: 11. Jun. 2018 10: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

Hallo Bernd,

könntest du mir dazu eventuell den Code einstellen oder genauer erklären was ich zu tun habe?
Da ich absoluter Neuling bin habe ich noch nicht mit dem GSD gearbeitet und immer noch keinen richtigen Ansatz, wie ich das umsetzen soll.

Danke.

Gruß Mark

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 11. Jun. 2018 11: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 M.Ungericht 10 Unities + Antwort hilfreich

Servus Mark

Hier ein grober Code wie das aussehen könnte (nur rudimentär getestet, keine Fehlerbehandlung, nicht einheitliches Namensschema der Variablen):

Code:
Sub CATMain()

Dim partDocument1 As Document
Dim part1 As Part
Dim hybridBodies1 As HybridBodies
Dim hybridBody1 As HybridBody
Dim hybridShapeFactory1 As Factory
Dim selection1 As Selection
dim sFilter() as String
Dim sStatus as String
Dim oRefKontur as Reference
Dim hybridShapeExtract1 As HybridShapeExtract
Dim oSPAWorkbench as SPAWorkbench
Dim oMeasureable as oMeasureable
Dim oCoordinates(2) as Variant
dim oRefPoint as Reference

Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set selection1 = partDocument1.Selection
Set hybridShapeFactory1 = part1.HybridShapeFactory
Set hybridBodies1 = part1.HybridBodies

'Kante zur Kontursuche selektieren
ReDim sFilter(0)
sFilter(0) = "Edge"

sStatus = selection1.SelectElement2(sFilter, "bitte Kante zur Kontursuche wählen", False)
If sStatus <> "Normal" Then
    MsgBox "Das Makro wird abgebrochen"
    Exit Sub
End If

Set oRefKontur = selection1.item2(1).Reference

'Kante ableiten
Set hybridBody1 = hybridBodies1.Add()
hybridBody1.Name = "Kontur"

part1.Update

Set hybridShapeExtract1 = hybridShapeFactory1.AddNewExtract(oRefKontur)
hybridShapeExtract1.PropagationType = 1
hybridShapeExtract1.ComplementaryExtract = False
hybridShapeExtract1.IsFederated = False
hybridBody1.AppendHybridShape hybridShapeExtract1

part1.UpdateObject hybridShapeExtract1

'in der neuen Kontur nach Scheitelpunkten suchen
selection1.clear
selection1.add hybridShapeExtract1

selection1.Search "Topology.CGMVertex,sel"

'Scheitelpunkte messen
if selection1.count2 <> 0 then
  Set oSPAWorkbench = partDocument1.GetWorkbench("SPAWorkbench")
  for i = 1 to selection1.count2
      Set oRefPoint = selection1.item2(i).Reference
      Set oMeasureable = oSPAWorkbench.GetMeasurable(oRefPoint)
      oMeasureable.GetPoint oCoordinates
      MsgBox oCoordinates(0) & " : " & oCoordinates(1) & " : " & oCoordinates(2)
  next
end if

End Sub


Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

M.Ungericht
Mitglied
Student

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

Beiträge: 9
Registriert: 14.05.2018

MS Windows 7 Professional
Catia V5 6R2017

erstellt am: 11. Jun. 2018 13:39    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 Bernd,

danke für deine Antwort.
Leider habe ich das Problem, dass mir bei start des Makros an der Stelle

Code:

sStatus = selection1.SelectElement2(sFilter, "bitte Kante zur Kontursuche wählen", False)


immer ein Type Missmatch ausgegeben wird. sStatus ist als Variant und selection1 als Object deklariert, da ich in VBA programmiere.
Im Forum habe ich auch keinen passenden Beitrag gefunden.

Außerdem lassen sich die Befehle Part1.update und part1.updateobject ebenfalls nicht ausführen.
Fehlermeldung :" Das Verfahren Update ist fehlgeschlagen"

Ich hoffe du kannst mir nochmals helfen.

Danke.

Gruß Mark

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 11. Jun. 2018 14:30    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 M.Ungericht 10 Unities + Antwort hilfreich

Servus

Bei dir läuft der Code als CATScript durch?
Dimensioniere mal sFilter als Variant.
Bist du außerhalb einer Skizze?
Kannst du das Part händisch aktualisieren?
Schon mal mit einer einfachen Skizze (eine nur eine geschlossene Kontur) probiert? Oder wie sieht deine Skizze aus?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

M.Ungericht
Mitglied
Student

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

Beiträge: 9
Registriert: 14.05.2018

MS Windows 7 Professional
Catia V5 6R2017

erstellt am: 12. Jun. 2018 07:11    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 Bernd,

der sFilter war es, danke. Jetzt läuft das Makro ohne Probleme durch. Danke für deine Hilfe! 
Wenn ich jetzt dann noch die Sortierfunktionen erfolgreich eingebracht hab kann ich das Thema abschließen.

Gruß Mark

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 13. Jun. 2018 09: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 M.Ungericht 10 Unities + Antwort hilfreich

Servus

Was meinst du mit sortieren der Punkte?
Die Reihenfolge (gemäß meines Kurztest) sollte doch stimmen.
Die "richtige" Richtung zu bestimmen wird da schon schwerer.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

M.Ungericht
Mitglied
Student

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

Beiträge: 9
Registriert: 14.05.2018

MS Windows 7 Professional
Catia V5 6R2017

erstellt am: 13. Jun. 2018 09: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

Hallo Bernd,

Die Reihenfolge stimmt, aber da ich dem Bediener ermöglichen will, von einem beliebig ausgesuchten Punkt zu starten musste ich die Werte in ein Array schreiben, den Bediener einen Punkt selektieren lassen und anschließend das Array umsortieren, so dass der Punkt dann am Anfang des Arrays steht aber die Reihenfolge weiter stimmt.

Nach mehrmaligem testen habe ich festgestellt, dass die Richtung, in der die Kontur immer im Uhrzeigersinn auf Scheitelpunkte untersucht wird, jedenfalls war es bei mir nach 20 Testdurchläufen mit unterschiedlichen Skizzen so. Deshalb muss ich dass Array einfach einmal umsortieren, um die Reihenfolge entgegen des Uhrzeigersinns zu haben.

Ich habe ein zweidimensionales Array gewählt, um x und y Koordinaten zusammen zu halten.

Hier der Codeausschnitt:

Code:

'---Umsortieren des erstellten Arrays, da die Werte im Uhrzeigersinn ausgelesen werden---
        Dim temp1, temp2 As Double
        Dim top, bottom As Integer
        top = AnzahlWerte
        bottom = LBound(Werte)
        While bottom < top
            temp1 = Werte(bottom, 1)
            temp2 = Werte(bottom, 2)
            Werte(bottom, 1) = Werte(top, 1)
            Werte(bottom, 2) = Werte(top, 2)
            Werte(top, 1) = temp1
            Werte(top, 2) = temp2
            bottom = bottom + 1
            top = top - 1
        Wend


        ReDim sFilter(0)
        sFilter(0) = "AnyObject"

        '---Startpunkt für Durchnummerierung bzw. Buchstabenvergabe auswählen---
        sStatus = selection1.SelectElement2(sFilter, "Bitte Startpunkt auswählen", False)
        If sStatus <> "Normal" Then
            MsgBox "Makro wird beendet"
            Exit Sub
        End If

        Set Startpunkt = selection1.Item2(1)
        Set oRefPoint = Startpunkt.Reference
        Set refpoint1 = Bezugspunkt 'Vorher festgelegt
        Set oMeasureable = oSPAWorkbench.GetMeasurable(oRefPoint)
        oMeasureable.GetMinimumDistancePoints refpoint1, oCoordinates
       

        Dim StartpunktCoords(1)
        StartpunktCoords(0) = oCoordinates(3) - oCoordinates(0)
        StartpunktCoords(1) = oCoordinates(4) - oCoordinates(1)
       
        '---Position des Startpunkts im aktuellen Array feststellen---
        Dim Position As Integer
        For i = 1 To AnzahlWerte
            If StartpunktCoords(0) = Werte(i, 1) Then
                If StartpunktCoords(1) = Werte(i, 2) Then
                    Position = i
                    Exit For
                End If
            End If
        Next i
       
        '---Werte nach Startpunkt in neuem Array sortieren---
        Dim WerteSortiert(1 To 30, 1 To 2) As Double
        Dim s As Integer
        i = 1
        For s = Position To AnzahlWerte
            WerteSortiert(i, 1) = Werte(s, 1)
            WerteSortiert(i, 2) = Werte(s, 2)
            i = i + 1
        Next s

        For s = 1 To (Position - 1)
            WerteSortiert(i, 1) = Werte(s, 1)
            WerteSortiert(i, 2) = Werte(s, 2)
            i = i + 1
        Next s


Einiges ist bestimmt noch Verbesserungsfähig, aber ich denke das werde ich mit der Zeit hinbekommen.

Gruß Mark

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