Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  SWX_API: Koordinaten umrechnen

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 SOLIDWORKS
  
CAD/CAM-Workshop in Suhl-Friedberg: SolidCAM + SOLIDWORKS
Autor Thema:  SWX_API: Koordinaten umrechnen (3270 mal gelesen)
monti0505
Mitglied
Ingenieur


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

Beiträge: 33
Registriert: 16.07.2008

erstellt am: 25. Nov. 2008 17:14    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,

habe das Problem, dass wenn ich in einer Zeichnung von einem Punkt die Koordinaten auslese, dass dann nicht das KO-System der Zeichnung, sondern anscheinend das KO-System des Punktes verwendet wird. Denn wenn ich in SWXSolidWorks Messe dann sind das andere Koordinaten als die die ich über das Makro bekomme.

Ich habe zwar ähnliche Beiträge gefunden aber die haben mir nicht weitergeholfen.

Ich verwende einen Sketchpoint den ich manuell in die Zeichnung setze und starte dann das Makro. Die Koordinaten vom Punkt werden geliefert aber wie gesagt es ist nicht das richtige KO-System.
Das Makro habe ich z.T. aus der API-Hilfe (GetSketchPoints:Transform Sketch to Model Example (VB)), aber ich komme nicht bei der Umrechnung weiter. Im Code habe ich das auch nochmal etwas näher erläutert.

Code:

 
        Dim swApp As SldWorks.SldWorks
        Dim selMgr As SldWorks.SelectionMgr
        Dim Model As SldWorks.ModelDoc2
        Dim SketchPoints As Variant
        Dim SketchFeature As SldWorks.Feature
        Dim PointCoords(2) As Double
        Dim MathUtil As SldWorks.MathUtility
        Dim MathTrans As SldWorks.MathTransform
        Dim MathP As SldWorks.MathPoint
        Dim ModelSketchTransform As Variant
        Dim Feature As SldWorks.SketchPoint

        'Connect the program to SolidWorks

        Set swApp = CreateObject("SldWorks.Application")

        Set Model = swApp.ActiveDoc

        'Prepare the MathUtility

        Set MathUtil = swApp.GetMathUtility

        'Get the SelectionMgr
        Set selMgr = Model.SelectionManager

   


        'Get the Sketchpoint from the SelectionMgr


        Set Feature = selMgr.GetSelectedObject6(1, -1) 'Feature ist ein Sketchpoint

        PointCoords(0) = Feature.X

        PointCoords(1) = Feature.Y

        PointCoords(2) = Feature.Z


        Set MathP = MathUtil.CreatePoint(PointCoords)

        'Display the point coordinates in relation to the sketch origin

        SketchPoints = MathP.ArrayData

        MsgBox SketchPoints(0) & ". " & SketchPoints(1) & ". " & SketchPoints(2)

    'bis hier klappt, ich bekomme die Koordinaten des gesetzen Punkts in der Zeichnung, aber die Koordinaten beziehen sich auf das KO-Systems des Punktes selbst. Wenn ich aber in SWXSolidWorks per Hand messe werden die Koordinaten vom Model/Zeichnung genommen.

    'Ab hier weiss ich dann nicht genau wie ich weitermachen soll, damit ich dem Multiplaytransform was "richtiges" übergeben kann.

    Set MathTrans = MathTrans.Inverse

        'Multiply the point by the inverse transform

        'MathP now refers to the point location in the model coordinates

        Set MathP = MathP.MultiplyTransform(MathTrans)

        'Display the point coordinates in relation to the model origin

        SketchPoints = MathP.ArrayData

        MsgBox SketchPoints(0) & ", " & SketchPoints(1) & ", " & SketchPoints(2)


Hoffe mir kann jemand weiterhelfen

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

jens_oliver
Mitglied
Softwareentwickler


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 25. Nov. 2008 17: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 monti0505 10 Unities + Antwort hilfreich

hi,

du hast ja noch keine Transfomationsmatrix.
Mit "Set MathTrans = MathTrans.Inverse" bildest du ja nur die inverse Matrix von "MathTrans". die ist aber noch nicht gefüllt bzw. die Einheitsmatrix.

Schau dir doch mal die folgenden Funktionen an
View::ModelToViewTransform und
Sketch::ModelToSketchTransform

Damit kannst du z.B. die Transformationsmatrix bekommen.

Gruß Oliver


------------------
Software nach Maß für Ihr CAD-System
www.ib-knepper.de

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

monti0505
Mitglied
Ingenieur


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

Beiträge: 33
Registriert: 16.07.2008

erstellt am: 26. Nov. 2008 14: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


pic1.png


pic2.png

 
Hallo ,
ich habe nun den Code etwas angepasst nach dem ich mir auch die oben empfohlenen Beispiele angeschaut habe.

Allerdings bekomme ich immer noch nicht die gleichen Koordinaten wie in SWX in Zeichnung selbst (v.a. stimmt die Z-Koordinate nicht) 

Ich habe mal Bilder dazugepackt und einen Teil des Code.
Hoffe jemand sieht wo der Fehler ist.

Erste MessageBox, ohne die Transformation (unten die SWX Koordinaten)

Zweite MessageBox, mit der Transformation und die Punkte manuell auf 0,0,0 gesetzt (unten die SWX Koordinaten)

Der Code ab der relevanten Zeile nach dem ersten Beitrag:

Code:

    SketchPoints = MathP.ArrayData

    MsgBox "X:" & SketchPoints(0) & vbNewLine & "Y:" & SketchPoints(1) & vbNewLine & "Z:" & SketchPoints(2)  'Erste Messagebox


    'Get the model-to-sketch transform for this sketch
    PointCoords(0) = 0  'das habe ich erst dazugemacht nachdem es auch ohne diese Zeilen
    PointCoords(1) = 0  ' nicht die richtigen Koordinaten geliefert worden sind.
    PointCoords(2) = 0
   
    Set MathP = MathUtil.CreatePoint(PointCoords)
   
    Set swMathTrans = swSketch.ModelToSketchTransform

    'Get the inversion of the transform
    Set swMathTrans = swMathTrans.Inverse

    'Multiply the point by the inverse transform

    'MathP now refers to the point location in the model coordinates

    Set MathP = MathP.MultiplyTransform(swMathTrans)

    'Display the point coordinates in relation to the model origin

    SketchPoints = MathP.ArrayData
   
    MsgBox "X:" & SketchPoints(0) * 1000# & vbNewLine & "Y:" & SketchPoints(1) * 1000# & vbNewLine & "Z:" & SketchPoints(2) * 1000#  ' Zweite Messagebox


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

jens_oliver
Mitglied
Softwareentwickler


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 27. Nov. 2008 12: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 Nur für monti0505 10 Unities + Antwort hilfreich

Ich habe es irgendwie noch nicht verstanden welche Koordinaten du denn haben möchtest.

Naja, und Wissen welche Funktion jetzt welche Transformation durchführt ist auch was anderes . Ich kann nur ein paar Vermutungen anstellen aber vielleicht helfen die ja weiter. 

Wenn du in einer Skizze (sketch) einen Punkt einfügst oder ausliest sind nur die x und y Werte relevant. Auch wenn das Objekt (sketchpoint) einen z-wert hat, liegt das nur daran das die Programmierer zu faul waren ein neues Objekt zu definieren (naja, es gibt auch noch ein paar andere Gründe). Eine Skizze hat eine bestimmte Lage(Ausrichtung) zum Bauteil, die in einer Matrix abgespeichert wird. Da eine Ansicht in einer Zeichnung auch eine Skizze hat, vermute ich, dass in der Matrix nicht die Lage zum Bauteil sondern die Lage zur Zeichnung steht. 

Set swActiveView = Model.ActiveDrawingView
Set swViewSketch = swActiveView.GetSketch
Set MathTrans = swViewSketch.ModelToSketchTransform

Der Name „ModelToSketchTransform“ ist natürlich dann sehr irreführend, da eine Zeichnung ja kein Model ist. Aber auch hier waren die Programmierer wohl nur zu „faul“ eine neue Funktion zu schreiben. Es hätte sich ja auch nur der Name „SheetToSketchTransform“ geändert, der Inhalt bleibt ja gleich.

mit
Set MathTrans = MathTrans.Inverse
Set MathP = MathP.MultiplyTransform(MathTrans)
bekommst du also die Koordinaten bezogen auf deine Zeichnung(Blatt).
Das ist zumindest das Ergebnis eines kleinen Testdurchlaufs bei mir.

Allerdings gibt es auch noch die Funktionen View::GetViewXform bzw. View::GetXForm. Ob der Inhalt nun gleich ist mit der „ModelToSketchTransform“ der Skizze bzw. wo der Unterschied ist, weiß ich aber auch nicht.

Warum du die Werte auf (0,0,0) setzt verstehe ich allerdings nicht. Wie soll da etwas herauskommen was mit deinem Punkt zutun hat.

Gruß Oliver

------------------
Software nach Maß für Ihr CAD-System
www.ib-knepper.de

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

monti0505
Mitglied
Ingenieur


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

Beiträge: 33
Registriert: 16.07.2008

erstellt am: 27. Nov. 2008 17: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,

also ich will die Koordinaten die mir SWXSolidWorks für den markierten Punkt anzeigt. Und dazu gehört auch der Z-Wert (in SWXSolidWorks wird für Z 20mm angezeigt). Wie im ersten Bild zu sehen bekomme ich aber bei der ersten Msgbox für Z = 0 raus. Die X und Y-Werte stimmen aber.
Also habe ich das mit der Transformation versucht, zuerst ohne das Array mit 0en zu überschreiben, und als das nicht das gewünschte Ergebnis brachte (für X, Y und Z kam nicht der richtige Wert raus.), habe ich das mit 0en gefüllt, da ich dachte das ich den Punkt angeben muss der als Referenz dienen soll. Aber das hat leider auch nicht den korrekten Z-Wert geliefert und zusätzlich kam für X und Y auch nicht der richtige Wert raus.

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

jens_oliver
Mitglied
Softwareentwickler


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 28. Nov. 2008 09:21    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 monti0505 10 Unities + Antwort hilfreich

hi,

die frage ist ja, was sw gerade anzeigt. wenn du den punkt in der zeichnung(ansicht) erstellt hast stehen dort die koordinaten bezogen auf deine zeichnung. da die skizze zur zeichnung gehört, kannst du mit
Set swActiveView = Model.ActiveDrawingView
Set swViewSketch = swActiveView.GetSketch
Set MathTrans = swViewSketch.ModelToSketchTransform
dir die koordinaten berechnen.

wurde der punkt aber im 3d erstellt, stehen dort die koordinaten bezogen auf den ursprung des bauteils.
liest du den punkt aus, bekommst du aber nicht direkt diese koordinaten sondern wieder die parameter (x und y-wert) der skizze. das die ersten beiden werte bei dir stimmen ist nur zufall. deine skizze liegt halt in der x-y ebene und ist um 20mm in z verschoben. um die richtigen werte zu berechnen benötigst du also die transformationsmatrix der skizze im 3d und nicht der zeichnung.

gruß oliver

------------------
Software nach Maß für Ihr CAD-System
www.ib-knepper.de

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

monti0505
Mitglied
Ingenieur


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

Beiträge: 33
Registriert: 16.07.2008

erstellt am: 29. Nov. 2008 12: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

Hi,

also die Koordinaten die da stehen (in den Bilder, wo auch der Z-Wert mit 20 mm angegeben ist) sind die Koordinaten des Punktes in 3d, also aus der Baugruppe.
Wenn ich aber in der Zeichnung die Werte des Punktes auslese bekomme ich, wie du schon richtig sagst die Punkt-Koordinaten bezogen auf die Zeichnung, was ich aber nicht möchte. Also will ich diese Koordinaten umrechnen auf die Koordinaten/Ursprung der Baugruppe und genau das bekomme ich nicht hin.

Hoffe, du hast jetzt verstanden was ich will und kannst mir evtl. noch einen Tipp geben.

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

jens_oliver
Mitglied
Softwareentwickler


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 29. Nov. 2008 14:29    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 monti0505 10 Unities + Antwort hilfreich

Zitat:
Wenn ich aber in der Zeichnung die Werte des Punktes auslese bekomme ich, wie du schon richtig sagst die Punkt-Koordinaten bezogen auf die Zeichnung...

du bekommst meiner meinung eben nicht die koodinaten bezogen auf die zeichnung sondern bezogen auf die skizze in der der punkt erstellt wurde.
versuche doch mal von da aus rückwärts zu rechnen.

SketchPoint::GetSketch
Sketch::ModelToSketchTransform

jetzt hast du wahrscheinlih aber erstmal nur die koordinate bezogen auf das bauteil. wenn du eine baugruppe hast geht das spiel halt weiter. mit
Component2::Transform2
bekomst du die lage des bauteils in der bauruppe und kannst die koordinaten wieder umrechnen.

gruß oliver


------------------
Software nach Maß für Ihr CAD-System
www.ib-knepper.de

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

monti0505
Mitglied
Ingenieur


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

Beiträge: 33
Registriert: 16.07.2008

erstellt am: 01. Dez. 2008 11: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

Hallo,

ich habe es jetzt hinbekommen.
Der Knackpunkt war, das ich das GetSketch für den Punkt anwenden muss.

Hier das komplette Makro für die Community:

Code:

Option Explicit

    Dim swApp As SldWorks.SldWorks
    Dim selMgr As SldWorks.SelectionMgr
    Dim Model As SldWorks.ModelDoc2
    Dim SketchPoints As Variant
    Dim SketchFeature As SldWorks.Feature
    Dim PointCoords(2) As Double
    Dim MathUtil As SldWorks.MathUtility
    Dim MathTrans As SldWorks.MathTransform
    Dim MathP As SldWorks.MathPoint
    Dim ModelSketchTransform As Variant
    Dim Feature As SldWorks.SketchPoint
    Dim swSheet As SldWorks.Sheet
    Dim swDraw As SldWorks.DrawingDoc
    Dim swModel As SldWorks.ModelDoc2
    Dim swViewSketch As SldWorks.Sketch
    Dim swActiveView As SldWorks.View
    Dim boolstatus As Boolean
    Dim longstatus As Long, longwarnings As Long

Sub main()


    'Connect the program to SolidWork

  Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

    Set swDraw = swModel
    Set selMgr = swModel.SelectionManager

    Set swSheet = swDraw.GetCurrentSheet

    Set swActiveView = swDraw.ActiveDrawingView

  ' Set swViewSketch = swActiveView.GetSketch

    Set Feature = selMgr.GetSelectedObject6(1, -1) 'SketchPoint

    PointCoords(0) = Feature.X

    PointCoords(1) = Feature.Y

    PointCoords(2) = Feature.Z
 
    Set swViewSketch = Feature.GetSketch  '******DAS WAR DER KNACKPUNKT ********

    Set MathUtil = swApp.GetMathUtility
 
    Set MathP = MathUtil.CreatePoint(PointCoords)

    'Display the point coordinates in relation to the sketch origin
   
    'swSketch.ModelToSketchTransform

    SketchPoints = MathP.ArrayData

    MsgBox "X:" & SketchPoints(0) & vbNewLine & "Y:" & SketchPoints(1) & vbNewLine & "Z:" & SketchPoints(2)


    'Get the model-to-sketch transform for this sketch

    Set MathTrans = swViewSketch.ModelToSketchTransform
    'Get the inversion of the transform
    Set MathTrans = MathTrans.Inverse

    'Multiply the point by the inverse transform

    'MathP now refers to the point location in the model coordinates

    Set MathP = MathP.MultiplyTransform(MathTrans)

    'Display the point coordinates in relation to the model origin

    SketchPoints = MathP.ArrayData
   

  ' MsgBox "X:" & SketchPoints(0) & vbNewLine & "Y:" & SketchPoints(1) & vbNewLine & "Z:" & SketchPoints(2)  'Koordinaten im 3D

End Sub



Danke für deine Hilfe, das hat mir den Ansatz geliefert. 

 

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