Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Koordinaten Vergleichen

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:  Koordinaten Vergleichen (1631 mal gelesen)
DasDon
Mitglied
Konstruktuer


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

Beiträge: 169
Registriert: 25.07.2011

R18 SP2. WIN

erstellt am: 28. Aug. 2013 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

moin moin,

ich habe kein Problem, suche aber trotzdem nach eurem guten Rat.

Ich habe einen Part welches ein elektrisches Kabel darstellt. Es werden Splines erzeugt und mit Rib Kreiseprofile entlang der Splines "geschossen". Es gibt natürlich auch abzweigung mit Stecker etc dran.

Ich möchte für die Hersteller der Kabel ein simples Ansicht erstellen auf denen hervorgeht wie lang jedes Segment, eine Art Unfolded View. ein Program hierfür haben wir bereits und es benötigt XML als input). Hierzu lese ich von alle Splines die Länge und die Start- und Endpunktkoordinaten aus und speicher diese in eine Datei.

Jetzt müsste ich wie folgt vorgehen:

Die xyzStartKoordinaten von Spline1 nehmen, diese gegen alle Start- und Endkoordinaten der andere Splines gegenprüfen. Stimmen diese überein, weiß ich das Spline1 einen "Verbindung" zu Spline x, y ,z etc hat. Dann nehme ich die xyzEndKoordinaten von Spline1 und mache genau das gleiche. Dann mit Spline2 etc. Bei keiner Übereinstimmung der Start- oder Endpunkte ist ein Stecker etc mit dem Ende verbunden.

Meine Frage: Wie würdet ihr vorgehen für die Auswertung?

Am liebsten wäre es mir wenn mann ein CATScript startet und am ende ein Text/CSV/XML Datei hat. Aber wenn es andere Sprachen/Programmen besser können sag Bescheid.

Gruß,
Dean

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: 28. Aug. 2013 18: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 Nur für DasDon 10 Unities + Antwort hilfreich

Servus
Meine grobe Idee dazu wäre:
- alle Splines suchen
- Tabelle/Array anlegen mit
    - Elementname (Spline.1)
    - X, Y, Z Koordinate
    - Länge des Elements (des Splines)
    - Verbindungstyp (wird erst später bestimmt)
- Tabelle/Array mit Werten füllen (Anfangspunkt und Endpunkt jeweils eine Zeile)
- Zähler für Stecker und Kreuzungspunkt erstellen
- verschachtelte Schleife über die Tabelle (vom 1. bis letztem, dann 2. bis letztem):
    - Vergleich der Koordinaten:
            - wenn nur einmal vorhanden: Verbindungstyp Stecker (zB Stecker_1)
            - wenn mehrfach vorhanden bei allen Zeilen Verbindungstyp Kreuzung (zB Kreuzung_1)
- danach Auswertung der Tabelle nach dem Muster:
  "Spline 1 von Stecker_1 nach Kreuzung_3 mit Länge X mm"

Interessant wird es wenn bei einer Abzweigung nicht alle Splines enden, sondern einer darüber wegfährt.

Gruß
Bernd

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

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

DasDon
Mitglied
Konstruktuer


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

Beiträge: 169
Registriert: 25.07.2011

R18 SP2. WIN

erstellt am: 30. Aug. 2013 15: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

moin moin,

was schönes zum Wochenende.

Ich versuche verzweifelt einen Beitrag, welches ich gestern Abend gelesen habe, wieder zu finden.
Es ging um Transformationsmatrizen.

Ich habe jetzt alle Endpunkte identifiziert und möchte nun die Positionen der Endpunkte mit der des Verbindungspunktes des Kables vergleichen.
Die Punkte der Stecker sind in einem Part der in einen Baugruppe Positioniert ist, welches wiederum zu zur "MainProduct" positioniert ist.

Leider gibt der Befehl TheMeasurable.GetPoint Coordinates nur die Koordinaten zum Part aus. Ich kenne auch keinen Befehl der die absolute Position im CATProduct ausgibt. (Gibt es die Methode?)
Eigentlich nicht so schlimm, einfach nach oben klettern und jedes

Code:
.Position.GetComponents
abspeichern.
Das ist erledigt.
Jetzt komme ich nicht weiter. Irgendwie kann man diese mit einander multiplizieren/addieren etc und dann bekomme ich was ich möchte. Nur wie geth das? 
Ich habe schon gefühlte 100Formeln durch gelesen und verstehe nichts. Es ist viel zu lange her, dass ich sowas in Mathe gemacht habe. Es müsste doch irgendwo/irgendwann schon mal eine Funktion geschrieben wurden sein, der genau das macht. Im Forum finde ich nichts. Ich dachte ich hätte etwas gestern gefunden, aber wie gesagt, diesen Beitrag finde ich nicht.

Hat jemanden schonmal so eine Funktion geschrieben und könnte Sie hier Posten?

Ich wäre sehr Dankbar.

Gruß und schönes Wochenende,

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: 31. Aug. 2013 11: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 Nur für DasDon 10 Unities + Antwort hilfreich

Servus
Ich hab mal was zusammengebastelt.
Der Routine einfach direkt den Position-Array, die Punktkoordinaten und Rückgabearray für die transformierten Koordinaten übergeben. Daraus wird die Transformationsmatrix erstellt und die Matrix-Multiplikation durchgeführt:
Code:
Option Explicit

Sub TextSub()

Dim rootProduct As Product
Dim PartProduct 'As Product
Dim PointCoord(2) 'As Double
Dim PartPos(11) 'As Double
Dim Ergebnis(2) 'As Double
Dim oPart As part
Dim hybridBodies1 As hybridBodies
Dim oHybridBody As hybridBody
Dim ohybridShapePoint 'As HybridShapePointCoord

'Postion des Parts bestimmen
Set rootProduct = CATIA.ActiveDocument.Product
Set PartProduct = rootProduct.Products.Item(1)
PartProduct.Position.GetComponents PartPos

'Koordinaten des Punktes bestimmen
Set oPart = PartProduct.ReferenceProduct.Parent.part
Set hybridBodies1 = oPart.hybridBodies
Set oHybridBody = oPart.hybridBodies.Item("Geometrisches Set.1")
Set ohybridShapePoint = oHybridBody.Hybridshapes.Item("Punkt.1")
ohybridShapePoint.GetCoordinates PointCoord

'Transformation
Call KoordTranformation(PartPos, PointCoord, Ergebnis)

End Sub

Sub KoordTranformation(ArrayPosition(), PointKoord(), ByRef PointKoordTrans())
'Routine um Punktkoordinaten(2) mit einen Catia-Positions-Array(11) zu Transponieren
'für die Rückgabe muss der PointKoordTrans(2) übergeben werden

Dim ArrayTransfromation(3, 3) As Double
Dim ArrayVektor(3) As Double
Dim ArrayErgebnis(3) As Double

Dim i As Integer
Dim j As Integer

'Transformationsmatrx füllen
'1. Spalte
ArrayTransfromation(0, 0) = ArrayPosition(0)
ArrayTransfromation(1, 0) = ArrayPosition(1)
ArrayTransfromation(2, 0) = ArrayPosition(2)
ArrayTransfromation(3, 0) = 0
'2. Spalte
ArrayTransfromation(0, 1) = ArrayPosition(3)
ArrayTransfromation(1, 1) = ArrayPosition(4)
ArrayTransfromation(2, 1) = ArrayPosition(5)
ArrayTransfromation(3, 1) = 0
'3. Spalte
ArrayTransfromation(0, 2) = ArrayPosition(6)
ArrayTransfromation(1, 2) = ArrayPosition(7)
ArrayTransfromation(2, 2) = ArrayPosition(8)
ArrayTransfromation(3, 2) = 0
'4. Spalte
ArrayTransfromation(0, 3) = ArrayPosition(9)
ArrayTransfromation(1, 3) = ArrayPosition(10)
ArrayTransfromation(2, 3) = ArrayPosition(11)
ArrayTransfromation(3, 3) = 1

'Vektor füllen
For i = 0 To UBound(PointKoord)
    ArrayVektor(i) = PointKoord(i)
Next
ArrayVektor(3) = 1

'Matrixmultiplikation
For i = 0 To UBound(ArrayTransfromation, 1)
    For j = 0 To UBound(ArrayTransfromation, 2)
        ArrayErgebnis(i) = ArrayErgebnis(i) + ArrayTransfromation(i, j) * ArrayVektor(j)
    Next
Next

'Werte in PointKoordTrans schreiben
For i = 0 To UBound(PointKoordTrans)
    PointKoordTrans(i) = ArrayErgebnis(i)
Next

End Sub


Wer einen besseren Code hat, oder diesen verbessern will, nur her damit.

Gruß
Bernd

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

[Diese Nachricht wurde von bgrittmann am 31. Aug. 2013 editiert.]

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



Projektleiter TGA (m/w/d)

Ein mittelständisches Architektur- und Ingenieurbüro im Süden Hamburgs mit über 40 Mitarbeiter:innen, mit Tätigkeit in allen Leistungsphasen der HOAI. Mit unseren Partner:innen finden wir maßgeschneiderte Lösungen und bringen unsere jahrelange Erfahrung in die Koordinierung und Umsetzung unserer Bauvorhaben ein.

Für unser Planungsteam der Technischen Gebäudeausrüstung suchen wir Verstärkung als Projektleiter:in TGA....

Anzeige ansehenProjektmanagement
DasDon
Mitglied
Konstruktuer


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

Beiträge: 169
Registriert: 25.07.2011

R18 SP2. WIN

erstellt am: 02. Sep. 2013 21:22    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

moin bernd,

danke für die Ideen.
Das mit dem Stecker_x und Kreuzung_y habe ich glatt übernommen.
Die Koordinaten der Punkte werden ausgelesen und als string zusammen gekettet. Dieses wird dann in einen Dictionary als key Wert gespeichert. Default Vaule ist "stecker". .exsits(koordinateString) dann KeyValue "kreuzung". Danach bekommen die Values einen Zähler. Diese Informationen werden dann in eine Dateil abgespeichert.

Úm die Stecker zu bestimmen habe ich den Befehl .GetMinimumDistancePoints benutzt. Die Punkte werden über Search selektiert und dann passiert das hier.

Code:

for i = 1 to CATIA.ActiveDocument.Selection.Count
'set the different object and get positions
set oPoint = CATIA.ActiveDocument.Selection.Item(i).value
set pointPart = CATIA.ActiveDocument.Selection.Item(i).LeafProduct
set pointPartParent = pointPart.Parent.Parent


refString = oProd.PartNumber & "/" & pointPartParent.Name & "/" & pointPart.Name & "/!" & oPoint.Name

Set reference1 = oProd.CreateReferenceFromName(refString)
Set reference2 = oProd.CreateReferenceFromName(refString)

Set TheMeasurable = TheSPAWorkbench.GetMeasurable(reference1)
TheMeasurable.GetMinimumDistancePoints reference2, Coordinates

xStart = round(Coordinates(0),4)
yStart = round(Coordinates(1),4)
zStart = round(Coordinates(2),4)
id1 = "x_" & xStart & "y_" & yStart & "z_" & zStart


... damit habe ich wieder ein ID fürs Dictionary und benutze diese um Stecker_y einen PArt(Stecker) zuzuweisen.

Es ist etwas langsam. (Selektieren und dann Messen) aber das Ergebniss ist bei den TestProdukt aufjedenfall korrekt. Und die 30-60sec die es benötigt um durchzulaufen ist schneller als per Hand.
Optimieren werde ich später.

Jetzt muss ich nur noch die Daten korrekt aus werten und die einzelne Stänge mit einander bzw einen Stecker verlinken. Reinste Text bearbeitung.

Danke also nochmal für die Inspirationen.

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