Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Get coordinates goes wrong...

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:  Get coordinates goes wrong... (2664 mal gelesen)
s_mich
Mitglied


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

Beiträge: 3
Registriert: 27.03.2006

erstellt am: 27. Mrz. 2006 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

Well, first of all I'm sorry but I've some problems to write german(but I can read it & understand)... so I'll begin in English and really if I must write in german I'll try to (but I don't know if anyone will understand me)
========================================================

So my problem : I've tried to get the coordinates of 2 points Into an assembly by 2 ways (macro and with the ruler) and the results are different... you can see my code below

Zitat:
Dim mySelection1,mySelection2,Selection1,Selection2, Status, InputObjectType(0)
pDocument1.Selection.Clear
pDocument2.Selection.Clear
Set mySelection1 = pDocument1.Selection
InputObjectType(0) = "Point"
Status = mySelection1.SelectElement3(InputObjectType, "Selection Point", True, CATMultiSelTriggWhenSelPerf, True)
Set reference1 = mySelection1.Item(1)
Set reference1v = reference1.value
MsgBox "reference1 =" & reference1v.Name
Set TheMeasurable1 = TheSPAWorkbench.GetMeasurable(reference1v)
Dim MyPointCoord1(2)
reference1v.GetCoordinates MyPointCoord1
Dim C1_X,C1_Y,C1_Z
C1_X = MyPointCoord1(0)
C1_Y = MyPointCoord1(1)
C1_Z = MyPointCoord1(2)
MsgBox "X="&C1_X &",Y="& C1_Y &",Z="& C1_Z
mySelection1.Clear
Set mySelection1 = pDocument2.Selection
InputObjectType(0) = "Point"
Status = mySelection1.SelectElement3(InputObjectType, "Selection Point", True, CATMultiSelTriggWhenSelPerf, True)
Set reference2 = mySelection1.Item(1)
Set reference2v = reference2.value
MsgBox "reference2 =" & reference2v.Name
Set TheMeasurable2 = TheSPAWorkbench.GetMeasurable(reference2v)
Dim MyPointCoord2(2)
reference2v.GetCoordinates MyPointCoord2
Dim C2_X,C2_Y,C2_Z
C2_X = MyPointCoord2(0)
C2_Y = MyPointCoord2(1)
C2_Z = MyPointCoord2(2)
MsgBox "X="&C2_X &",Y="& C2_Y &",Z="& C2_Z
mySelection1.Clear

->getcoordinates or getpoint gives the same result
->When I use the Get coordinates comand, does any one know what is the OriginPoint( ) used? Is it the one of each part? (I think it is, otherwise the measures should be good)
->And then is it a solution to set the origin point of the product as the origin point of all my measures?

thanks a lot for any idea which could help (because I'm blocked by this function which doesn't give the "waited result") and sorry not to write in german.

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

prosper
Mitglied
Dipl.-Ing. -- Methoden und Prozessentwicklung Catia V5


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

Beiträge: 86
Registriert: 05.05.2004

erstellt am: 28. Mrz. 2006 20:20    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 s_mich 10 Unities + Antwort hilfreich

Hallo,

ich schreibe mal auf Deutsch....
GetCoordinates gibt dir immer die Kooardinaten besogen aufs Absolute Achsensysten (relativ aux deine 3 Hauptebene).
Im der Datei speichert also CATIA immer deine Absolute Koordinnaten. Ab R15 ist es bischen anders.
Die Koordinnaten besogen aufs aktive Achsensystem werden automatisch und dynamisch beim Feature klicken berechnet.

Um die globale Koord. in einem lokalen AS zu berechnen gibt es meiner Meinung nach folgende Möglichkeit:
Positionsmatrize des AS (GetComponents glaube ich, elfer array) auslesen. koordinnaten des Punkts auslesen, die werden "absolut" ausgeschrieben und durch eine Tranformationsmatrix einfach die neuen lokalen Koordinnaten über ein Kreuz Produkt ausrechnen lassen.

Hoffe das kann dir weiterhelfen, an sonst, sagt einfach Bescheid, kann dir gern ein Beispiel senden.

Gruß und viel Erfolg
Prosper

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

s_mich
Mitglied


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

Beiträge: 3
Registriert: 27.03.2006

erstellt am: 29. Mrz. 2006 16: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

Well I'll try to answer in german...

Ich habe meine Makro mit CATIA V5R14 geschrieben, deshalb denke ich dass die Koordinnaten in das Absolute Achsensysten geschrieben sind(ich weiss nicht ob "es deutch ist"...:confused

Der Grund, für den ich es denke, ist, daß CATIA gute Maßnahmen finde aber nur für Punkte ,die zu die gleiche PART gehören.

Aber meine Catia Realease ist 14... and ob du ein Beispiel oder andere Beispiel hast, wäre ich sehr dankbar.

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

prosper
Mitglied
Dipl.-Ing. -- Methoden und Prozessentwicklung Catia V5


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

Beiträge: 86
Registriert: 05.05.2004

erstellt am: 29. Mrz. 2006 20: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 s_mich 10 Unities + Antwort hilfreich

Hallo,

habe leider kein Part internes Beispiel, habe nur ein Produktübergreifendes Beispiel. Die Vorgehensweise ist aber ähnlich.

Das Makro gibt dir die Koordinnaten eines Punktes im Rootprodukt.

Zum testen folgende Struktur aufbauen:

RootProd
|
|-SubProd1
    |
    |-SubProd2
        |
        |-Part (mit Punkt)

SubProd1, SubProd2 und Part im Raum verschieben (mit 3D constraints oder Kompasss)

Makro starten, Punkt selektieren. Als Ergebniss kriegst du die Koord vom Punkt im Rootprodukt. Über eine Schleife und Transformationen werden die Koordinnaten des Punkts im obersten Produkt berechnet.

Sub CATMain()

Set osel = CATIA.ActiveDocument.Selection
osel.Clear

Dim afilter(0)
afilter(0) = "Point"
Status = osel.SelectElement(afilter, "Select a point.", False)
Set opoint = osel.Item(1).Value
osel.EndSelectElement

Dim acoord_in_part(2)
opoint.GetCoordinates acoord_in_part

Dim acoord_part_in_product(11)
Dim acoord_product_in_sub_product(11)
Dim atmp(2)
Dim acoord_in_product(2)

osel.Clear
osel.Add opoint

Set opart_product = osel.FindObject("CATIAProduct")

opart_product.Position.GetComponents acoord_part_in_product

acoord_in_product(0) = acoord_part_in_product(0) * acoord_in_part(0) + acoord_part_in_product(3) * acoord_in_part(1) + acoord_part_in_product(6) * acoord_in_part(2) + acoord_part_in_product(9)
acoord_in_product(1) = acoord_part_in_product(1) * acoord_in_part(0) + acoord_part_in_product(4) * acoord_in_part(1) + acoord_part_in_product(7) * acoord_in_part(2) + acoord_part_in_product(10)
acoord_in_product(2) = acoord_part_in_product(2) * acoord_in_part(0) + acoord_part_in_product(5) * acoord_in_part(1) + acoord_part_in_product(8) * acoord_in_part(2) + acoord_part_in_product(11)

Set oparent_product = opart_product.Move.Parent.Parent

Do
    oparent_product.Position.GetComponents acoord_product_in_sub_product
   
    atmp(0) = acoord_in_product(0)
    atmp(1) = acoord_in_product(1)
    atmp(2) = acoord_in_product(2)
   
    acoord_in_product(0) = acoord_product_in_sub_product(0) * atmp(0) + acoord_product_in_sub_product(3) * atmp(1) + acoord_product_in_sub_product(6) * atmp(2) + acoord_product_in_sub_product(9)
    acoord_in_product(1) = acoord_product_in_sub_product(1) * atmp(0) + acoord_product_in_sub_product(4) * atmp(1) + acoord_product_in_sub_product(7) * atmp(2) + acoord_product_in_sub_product(10)
    acoord_in_product(2) = acoord_product_in_sub_product(2) * atmp(0) + acoord_product_in_sub_product(5) * atmp(1) + acoord_product_in_sub_product(8) * atmp(2) + acoord_product_in_sub_product(11)
   
    Set oparent_product = oparent_product.Move.Parent.Parent

Loop Until CATIA.ActiveDocument.Product.Name = oparent_product.Name

spart = "The coordinates of the point in his Local Part are:" & vbCrLf & vbCrLf & "X=" & acoord_in_part(0) & vbCrLf & "Y=" & acoord_in_part(1) & vbCrLf & "Z=" & acoord_in_part(2) & vbCrLf & vbCrLf
sproduct = "The coordinates of the same point in the Global Product are:" & vbCrLf & vbCrLf & "X=" & acoord_in_product(0) & vbCrLf & "Y=" & acoord_in_product(1) & vbCrLf & "Z=" & acoord_in_product(2)

MsgBox spart & sproduct

End Sub


Falls du es nicht hin kriegst, kann ich dir ein Skript schreiben was dir die Koord von einem Punkt in einem anderen AS als das Absolute umwandelt (Part intern). Falls ich richtig verstanden habe was du brauchst....

Gruß,
Prosper

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

prosper
Mitglied
Dipl.-Ing. -- Methoden und Prozessentwicklung Catia V5


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

Beiträge: 86
Registriert: 05.05.2004

erstellt am: 29. Mrz. 2006 20: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 Nur für s_mich 10 Unities + Antwort hilfreich

ah ja,

mit R15 wird dir Getcoordinates, vermute ich mal, dir trotzdem die Koord relativ aufs Absolute AS geben. Habe ich aber noch nicht getestet, arbeite auch auf R14.
Der Unterschied ab R15 ist, daß du ein AS als Reference für deine Koord klicken kannst. Es kann dann sein, daß die Koord mit GetCoordinates relativ aufs angeklickten AS angezeigt werden, aber wie schon gesagt, no idea. Vielleicht hat einer von euch schon mal diese Erfahrung gemacht....

Schau mr mal, wie man hier so schön sagt... 

Gruß,
Prosper

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

s_mich
Mitglied


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

Beiträge: 3
Registriert: 27.03.2006

erstellt am: 04. Apr. 2006 10:38    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

Zitat:
dim monInstance
dim maSel
set maSel=CATIA.ActiveDocument.Selection
maSel.Search"'Product Structure'.Product.'Part Number'="&ref.Part.Name&",all"
CATIA.SystemService.Print maSel.Count
set monInstance=maSel.item(1).value
dim monArray(12)
CATIA.SystemService.Print monInstance.Position.getComponents(monArray)
'##Lire les données dans une fenetre a cote
'CATIA.SystemService.Print monArray(0)&" " &monArray(1)&" " &monArray(2)
'CATIA.SystemService.Print monArray(3)&" " &monArray(4)&" " &monArray(5)
'CATIA.SystemService.Print monArray(6)&" " &monArray(7)&" " &monArray(8)
'CATIA.SystemService.Print monArray(9)&" " &monArray(10)&" " &monArray(11)
'##=========================
x=monArray(0)*c1_x+monArray(3)*c1_y+monArray(6)*c1_z+monArray(9)
y=monArray(1)*c1_x+monArray(4)*c1_y+monArray(7)*c1_z+monArray(10)
z=monArray(2)*c1_x+monArray(5)*c1_y+monArray(8)*c1_z+monArray(11)

Thanks a lot it works 

But many people told me that my following code should work but when I launch it they are surprised because it doesn't give the coordinates into the Global AS... (if anyone has an idea I'm still here because I don't really understand too)

But anyway your code works and is helpfull.

Zitat:
'Dim TheSPAWorkbench,TheMeasurable1,MinimumDistance
'Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
'Set TheMeasurable = TheSPAWorkbench.GetMeasurable(reference1v)
'Dim Dist_r1_r2 'As Double
'Dim MyPointCoordXY(2)
'Dist_r1_r2 = TheMeasurable.GetMinimumDistance(reference2v)

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