Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Komponente verschieben mit dem DragOperator

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
  
Cloud-basierte Elektrokonstruktion
Autor Thema:  Komponente verschieben mit dem DragOperator (2129 mal gelesen)
Ralph Stelzer
Mitglied
HSL

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

Beiträge: 4
Registriert: 16.02.2005

erstellt am: 16. Feb. 2005 11: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

Ich möchte eine Assembly animieren, d.h. ein Teil bewegen, wobei in Abhängigkeit der Bewegung und definierter Abhängigkeiten zu anderen Teilen, sich diese Teile gleichfalls bewegen müssen. Dies entspricht quasi der Dialogfunktion "Komponente verschieben".
Der dragoperator scheint dafür sinnvoll zu sein, allerdings ist seine Anwendung ohne Erläuterung bzw. Beispiel die reine Zauberei.
Hat dazu jemand Erfahrungen, Tipps oder ggf. auch ein kurzes Beispiel?

Gruß Ralph

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

Oldie
Mitglied
Senior design engineer


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

Beiträge: 750
Registriert: 22.01.2001

Catia V5 R16 - R19

erstellt am: 16. Feb. 2005 11: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 Ralph Stelzer 10 Unities + Antwort hilfreich

Hallo Ralph,

das geht auch bedeutend einfacher: http://www.solidworks.com/pages/products/solutions/animator.html

Gruß  Oldie           

------------------
Der direkte Weg ist nicht immer der schnellste.

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

Ralph Stelzer
Mitglied
HSL

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

Beiträge: 4
Registriert: 16.02.2005

erstellt am: 16. Feb. 2005 12: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

Danke für den Hinweis. Allerdings ist das Tool bekannt und nutzt leider nichts. Es geht nicht um die simple Bewegung an und für sich (im Sinne einer hübschen Präsentation), sondern um eine programmgesteuerte Analyse der Bewegungszustände. Und da muss ich schon selbst Zugriff auf die Komponenten bekommen. U.a. auch deshalb, weil die resultierenden Koordinaten und Rotationsmatrizen der Komponenten benötigt werden.
Trotzdem vielen Dank!

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

Oldie
Mitglied
Senior design engineer


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

Beiträge: 750
Registriert: 22.01.2001

Catia V5 R16 - R19

erstellt am: 16. Feb. 2005 12: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 Nur für Ralph Stelzer 10 Unities + Antwort hilfreich

Sorry Ralph,

Hab dich wohl zu unrecht mit einigen anderen Studenten, die in letzter Zeit unser Forum entdeckt haben, in einen Topf geworfen.

Gruß  Oldie           

------------------
Der direkte Weg ist nicht immer der schnellste.

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 16. Feb. 2005 13: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 Ralph Stelzer 10 Unities + Antwort hilfreich

Hallo Ralph,

und herzlich willkommen im SolidWorks Brett auf CAD.de   

Wenn ich deine Aufgabe nach deinem zweiten Posting richtig verstehe läuft das ganze mehr auf eine Dynamische Simulation hinaus ... das wird mit SolidWorks Bordmittel etwas schwierig (um nicht zu sagen: ich hab keine Ahnung, wie das nur mit SolidWork sgehen sollte     ).

Dafür gibt es aber spezialisierte Tools wie COSMOS/Motion , die genau das können; allerdings sind die nicht ganz preiswert.

Wenn ich mich aber nicht irre gibt es für eine Studentenversion auch eine COSMOS Variante ( http://www.solidworksacademic.de/content.php?si=282  ), dass sollte die 50 EUR mehr wert sein ... wenn du berechtigt bist eine Studentenversion zu nutzen, sonst wird es deutlich teurer  

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite
http://solidworks.cad.de

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

Ralph Stelzer
Mitglied
HSL

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

Beiträge: 4
Registriert: 16.02.2005

erstellt am: 16. Feb. 2005 16: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

Danke für die Empfehlung.
Aber eines Zusatztools bedarf es wirklich nicht.
SolidWorks íst ohne weiteres in der Lage die geforderte Funktion zu erfüllen. Das kann ja jeder mittels des Standarddialogfunktion "Komponente verschieben" sehen. Ein Verschieben von Teilen (allerdings eben ohne die Constraints zu beachten) geht mit der API-Funktion ".Transform2 " je auch ohne Schwierigkeit. (Da kann ich ggf. gern weiterhelfen.) Für die von mir gewünschte Fuktionalität wurde die API des DragOperators zur Verfügung gestellt:
----------
The preferred way to change the position of an assembly component is to use the DragOperator object. This object allows access to the settings for the Move Component command in the SolidWorks user interface. Components moved with this API honor all assembly mate and in-context relationships.  When done moving a component (DragOperator::EndDrag), you might have to call ModelDoc2::EditRebuild3 to update any model geometry.
--------------

Allerdings in "bewährter" Manier, d.h. ohne Beispiel und ohne Erläuterung.
Na mal sehen, ob sie nicht doch mal jemand schon benutzt hat.
Nochmal vielen Dank für all die Hinweise!!

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

Ralph Stelzer
Mitglied
HSL

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

Beiträge: 4
Registriert: 16.02.2005

erstellt am: 26. Feb. 2005 10:16    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 der Vollständigkeit halber: Die Lösung ist gefunden. Im neuesten Hilfefile von SW gibt es nun auch dafür ein Beispiel. Zur Information das Gerüst nachfolgend:

Public Sub UseDragOperator()

Const PI                As Double = 3.14159
Const RadPerDeg        As Double = PI / 180#

    Dim swApp                  As SldWorks.SldWorks
    Dim swModel                As SldWorks.ModelDoc2
    Dim swAssy                  As SldWorks.AssemblyDoc
    Dim swDragOp                As SldWorks.DragOperator
    Dim swSelMgr                As SldWorks.SelectionMgr
    Dim swComp(1)              As SldWorks.Component2
    Dim vComp                  As Variant
    Dim swXform                As SldWorks.MathTransform
    Dim swMathUtil              As SldWorks.MathUtility
    Dim swOriginPt              As SldWorks.MathPoint
    Dim swX_Axis                As SldWorks.MathVector
    Dim nPts(2)                As Double
    Dim vData                  As Variant
    Dim nNow                    As Single
    Dim i                      As Long
    Dim bRet                    As Boolean
    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swAssy = swModel
    Set swDragOp = swAssy.GetDragOperator
    Set swSelMgr = swModel.SelectionManager
    Set swComp(0) = swSelMgr.GetSelectedObjectsComponent(1)
    Set swComp(1) = swSelMgr.GetSelectedObjectsComponent(2)
    Set swMathUtil = swApp.GetMathUtility
    vComp = swComp
    nPts(0) = 0#
    nPts(1) = 0#
    nPts(2) = 0#
    vData = nPts
    Set swOriginPt = swMathUtil.CreatePoint(vData)
    nPts(0) = 1#
    nPts(1) = 0#
    nPts(2) = 0#
    vData = nPts
    Set swX_Axis = swMathUtil.CreateVector(vData)
    ' This is an incremental rotation,
    ' so angle is always the same.
    Set swXform = swMathUtil.CreateTransformRotateAxis(swOriginPt, swX_Axis, 1# * RadPerDeg)
    bRet = swDragOp.AddComponent(swComp(0), False)
    Debug.Assert bRet
    swDragOp.DynamicClearanceEnabled = False
    ' Axial rotation
    swDragOp.TransformType = 1
    ' Solve by relaxation
    swDragOp.DragMode = 2
    bRet = swDragOp.BeginDrag
    Debug.Assert bRet
    For i = 0 To 500
        bRet = swDragOp.DragAsUI(swXform)
    Next i
    bRet = swDragOp.EndDrag
    Debug.Assert bRet
End Sub

MfG
Ralph

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

krisztian
Mitglied


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

Beiträge: 4
Registriert: 06.08.2009

erstellt am: 06. Aug. 2009 16:35    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 Ralph Stelzer 10 Unities + Antwort hilfreich


error.JPG

 
Hallo,

wie schon besagt finden sich ja zwei Beispiel zum Thema bewegen von Teilen in Assemblys in der API Hilfe.
Einmal das oben bereits erwähnte Beispiel mit DragAsUi und dann noch eins mit Drag.

Hab mal beide in VB.Net umgeschrieben und IMHOIn my humble oppinion (Meiner Meinung nach) auch keine groben Schnitzer gemacht.
Code für DragAsUI sieht jetzt so aus:

Code:
Friend Function Spin() As SldWorks.ModelDoc2
      Const PI As Double = 3.14159
      Const RadPerDeg As Double = PI / 180.0#

      Dim oRobot As SldWorks.ModelDoc2
      Dim swAssy As SldWorks.AssemblyDoc
      Dim swDragOp As SldWorks.DragOperator
      Dim oComp As Object
      Dim swComp(1) As SldWorks.Component2
      Dim swSelMgr As SldWorks.SelectionMgr
      Dim swMathUtil As SldWorks.MathUtility
      Dim swTrans As SldWorks.MathTransform
      Dim swOriginPt As SldWorks.MathPoint
      Dim swZ_Axis As SldWorks.MathVector
      Dim nPts(2) As Double
      Dim oData As Object
      Dim i As Long
      Dim bret As Boolean

      oRobot = CType(oSwApp.ActiveDoc, SldWorks.ModelDoc2)
      swAssy = CType(oRobot, SldWorks.AssemblyDoc)
      swDragOp = CType(swAssy.GetDragOperator, SldWorks.DragOperator)
      swSelMgr = CType(oRobot.SelectionManager, SldWorks.SelectionMgr)
      swComp(0) = CType(swSelMgr.GetSelectedObjectsComponent(1), SldWorks.Component2)
      swComp(1) = CType(swSelMgr.GetSelectedObjectsComponent(2), SldWorks.Component2)
      swMathUtil = CType(oSwApp.GetMathUtility, SldWorks.MathUtility)
      oComp = swComp
      nPts(0) = 0
      nPts(1) = 0
      nPts(2) = 0
      oData = nPts
      swOriginPt = CType(swMathUtil.CreatePoint(oData), SldWorks.MathPoint)
      nPts(0) = 0
      nPts(1) = 0
      nPts(2) = 1
      oData = nPts
      swZ_Axis = CType(swMathUtil.CreateVector(oData), SldWorks.MathVector)
      swTrans = CType(swMathUtil.CreateTransformRotateAxis(swOriginPt, swZ_Axis, 1.0# * RadPerDeg), SldWorks.MathTransform)
      bret = swDragOp.AddComponent(swComp(0), False)
      Debug.Assert(bret)
      swDragOp.DynamicClearanceEnabled = False
      swDragOp.TransformType = 1
      swDragOp.DragMode = 0
      bret = swDragOp.BeginDrag
      Debug.Assert(bret)
      For i = 0 To 180
        bret = swDragOp.DragAsUI(swTrans)
      Next i
      bret = swDragOp.EndDrag
      Debug.Assert(bret)

  End Function


Nun funktioniert die Rotation um eine Achse (in meinem Fall Z) wunderbar allerdings bekomme ich dem Durchlauf der For-Schleife in der Zeile swDragOp.EndDrag einen Fehler. Oder um genauer zu sein:swDragOp.EndDrag gibt False zurück und damit wird mir in der nächsten Zeile der Fehler angezeigt.

Dies passiert so in beiden Varianten und ich weiß nicht wirklich warum das so ist. Die Debug Meldung führt auf auch nicht unbedingt dazu, dass ich daraus schlau werd.


Vielleicht kennt hier ja jemand den Fehler oder sieht auf den ersten Blick, dass ich Fehler im Code habe.
Würde mich auf alle Fälle freuen.

Grüße
krisztian

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