Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Problem 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
  
Dassault Systèmes auf der Hannover Messe 2024 (kostenlose Tickets verfügbar)
Autor Thema:  Problem mit dem Dragoperator (810 mal gelesen)
UncleJ
Mitglied
Werksstudent

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

Beiträge: 9
Registriert: 16.12.2007

Ich verwende die Solidworks Student Edition 2007 auf einem P4-System mit 3GHz und 2GB RAM, OS Vista Business

erstellt am: 14. Okt. 2008 11: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


CAD-Modell-Basic.rar

 
Hallo,

Ich habe ein kleines Problem bei der Verschiebung mittels des Dragoperators und weiß nicht wirklich woran es liegt. Irgendwie wird der übergebene Winkel total ignoriert.
Ich verwende in Anlehnung an die API-Hilfe folgende C++-Funktion:

Code:
void SolidWorks::rotateThePartInRad(ISldWorks *pSldWorks, IComponent2 *pComponent, double dPoint[], double dVector[], double dAngle)
{
IMathPoint*            pMathPoint = NULL;
IMathUtility*          pMathUtility = NULL;
IMathVector*            pMathVector = NULL;
IMathTransform*        pXform = NULL;
VARIANT_BOOL            retval = FALSE;
HRESULT                hr = S_OK;
IDragOperator*          pDragOperator = NULL;
IMathTransform*        pPosition = NULL;
IMathTransform*        pResult = NULL;

if( pComponent != NULL ){
  hr = SolidWorks::getDragOperator(pSldWorks, &pDragOperator);
  if(hr == S_OK){
  hr = pSldWorks->IGetMathUtility(&pMathUtility);
  if(hr == S_OK){
    hr = pMathUtility->ICreatePoint(dPoint, &pMathPoint);  // Origin Point
    if(hr == S_OK){
    hr = pMathUtility->ICreateVector(dVector, &pMathVector);        // Normal Vector
    if(hr == S_OK){
      hr = pMathUtility->ICreateTransformRotateAxis( pMathPoint, pMathVector, dAngle, &pXform );
      if(hr == S_OK){
      hr = pComponent->GetTotalTransform(FALSE, &pPosition);    // Position des Bauteils auslesen
      if(hr == S_OK){
        hr = pPosition->IMultiply(pXform, &pResult);
        if(hr == S_OK){
        hr = pDragOperator->AddComponent(pComponent, FALSE, &retval);
        if(hr == S_OK){
          hr = pDragOperator->put_CollisionDetectionEnabled(TRUE);
          if(hr == S_OK){
          hr = pDragOperator->put_DynamicClearanceEnabled(TRUE);
          if(hr == S_OK){
            // DragOperator::TransformType
            // Translation    0 => Transform is translation only
            // Axial rotation  1 => Transform is rotation only
            // General        2 => Transform can be translation or rotation or both
            hr = pDragOperator->put_TransformType(2);      //General fransformation
            if(hr == S_OK){
            // DragOperator: ragMode
            // Minimum Move    0 => Move smallest number of geometries
            // Maximum Move    1 => Move geometries rigidly if possible
            // Relaxation      2 => Solve geometries using relaxation */
            hr = pDragOperator->put_DragMode(2);    //Solve by relaxation
            if(hr == S_OK){
              hr = pDragOperator->put_UseAbsoluteTransform(FALSE);
              if(hr == S_OK){
              hr = pDragOperator->BeginDrag(&retval);
              if(hr == S_OK){
                hr = pDragOperator->Drag(pResult, &retval);    // Returns false if drag fails
                hr = pDragOperator->EndDrag(&retval);
              }      // hr = pDragOperator->BeginDrag(&retval);
              }      // hr = pDragOperator->put_UseAbsoluteTransform(FALSE);
            }      // hr = pDragOperator->put_DragMode(2);
            }      // hr = pDragOperator->put_TransformType(2);
          }      // hr = pDragOperator->put_DynamicClearanceEnabled(FALSE);
          }      // hr = pDragOperator->put_CollisionDetectionEnabled(FALSE);
        }      // hr = pDragOperator->AddComponent(pXYcomponent, FALSE, &retval);
        pResult->Release();
        }      // hr = pXYform->IMultiply(pPosition, &pResult);
        pPosition->Release();
      }      // hr = pXYcomponent->get_Transform2(&pPosition);
      pXform->Release();
      }      // hr = pMathUtility->ICreateTransformRotateAxis(pMathPoint, pMathVector, dXYAngle, &pXYform);
      pMathVector->Release();
    }      // hr = pMathUtility->ICreateVector(dXYVector, &pMathVector);
    pMathPoint->Release();
    }      // hr = pMathUtility->ICreatePoint(dXYPoint, &pMathPoint);
    pMathUtility->Release();
  }      // hr = pSldWorks->IGetMathUtility(&pMathUtility);
  pDragOperator->Release();
  }      // hr = pAssemblyDoc->IGetDragOperator(&pDragOperator);
}
return;
}


Die Funktion SolidWorks::getDragOperator ermittelt den aktuellen Dragoperator der Assembly.
Die Funktion rufe ich dann mit dVector = (0.0, 0.0, 1.0), dPoint = (1.25, 5.25, 0.25), dAngle = 0.75 und der Komponente "Drehgestell" (siehe Modell im Anhang) auf.
Würde mich sehr freuen, wenn jemand vielleicht eine Idee hätte wo der Fehler ist.

Mit freundlichen Grüßen
Jörg Eichhorn

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: 14. Okt. 2008 11:51    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 UncleJ 10 Unities + Antwort hilfreich

Hallo Jörg,

ich hab von C++ und auch der Verschiebung per Dragoperator zwar keine Ahnung, aber ich argwöhne bei deinen Angaben (dVector = (0.0, 0.0, 1.0), dPoint = (1.25, 5.25, 0.25), dAngle = 0.75) das du die falschen Einheiten nutzt: alle Längengaben erfolgen in der API per Meter (dPojnt sieht nach Millimeter aus) und Winkel in RAD (dAngle sieht nach Grad aus). Vielleicht probierst du das mal mit den entsprechend angepassten Einheiten, ob es dann ungefähr so aussieht, wie du es erwarten würdest.

Ciao,
Stefan

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

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

UncleJ
Mitglied
Werksstudent

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

Beiträge: 9
Registriert: 16.12.2007

Ich verwende die Solidworks Student Edition 2007 auf einem P4-System mit 3GHz und 2GB RAM, OS Vista Business

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

Hallo,

danke für die Tipps, jedoch sind die Angaben in Metern schon richtig so und auch der Winkel ist schon in Rag (~45°).

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