Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  CAA CATSurface zu C# API zurückgeben MECMOD.Face

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 CATIA & Co.
  
KISTERS 3DViewStation WebViewer: Sichere 3D-Visualisierung - jederzeit und überall, eine Pressemitteilung
Autor Thema:  CAA CATSurface zu C# API zurückgeben MECMOD.Face (339 / mal gelesen)
user7
Mitglied



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

Beiträge: 21
Registriert: 26.08.2022

erstellt am: 24. Jun. 2024 11:34    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 zusammen,

ich versuche gerade in Catia CAA eine funktion zu schreiben, welche über C# angesteuert werden kann und mehrere Faces zurück gibt.
In CAA habe ich die entsprechenden Faces als CATFace / CATSurface vorliegen.


Die C# Seite schaut für den Testcase so aus:

Code:

public static List<Face> Test(MECMOD.Face face, MECMOD.Part part) {
   
    CustomPart caaPart = (CustomPart)part;
             
    object[] faces = caaPart.TestFunction((Reference)face);
    object firstFace = faces[0];
              var typeObject1 = TypeDescriptor.GetClassName(firstFace);

    Face f = firstFace as MECMOD.Face; /// Null!
}


---------------- IDL

Code:
HRESULT TestFunction(out /*IDLRETVAL*/ CATSafeArrayVariant oArray);


---------------- CustomPart.h

Code:
HRESULT __stdcall TestFunction(CATSafeArrayVariant*& oArray);


---------------- CustomPart.cpp

Code:

HRESULT CustomPart::TestFunction(CATSafeArrayVariant*& oArray) {
        HRESULT hr = CATReturnSuccess;

        // somecode

        CATFace* cf = (CATFace*)fac; /// fac existiert aus vorhergehenden Schritten in CAA
        CATSurface* csf = cf->GetSurface();

        /// Frage: welches Interface muss dem CATSurface angezogen werden damit es ordnungsgemäß in das CATBaseDispatch array einfügt werden kann, und das objekt in der C# API zu einer Reference und dann zu Face gecastet werden kann? 
        /// Irgendwie müsste ich von CATFace/CATSurface zu einem Interface auf dem LateType CATRSurImpl kommen.
       


        // Erstellen eines Rückgabe-Arrays um die Faces in die C# API zu überführen - im Beispiel nur ein Element
        const CATBaseDispatch** arrayx = new const CATBaseDispatch * [1];
        arrayx[0] = catiaBase2;
        oArray = ::BuildSafeArrayVariant(arrayx, 1);
        return hr;
}



Ich hänge hier schon seit geraumer Zeit und würde mich über jeden Pointer freuen. Auch wenn jemand einen anderen Weg kennt, wie ich ein CATFace irgendwie in die C# Api bekomme (so dass es dort als Face vorliegt). Bisher hatte ich nur den Weg über die UserSelection benutzt - sprich, der Selection wird in CAA das CATFace hinzugefügt, und die Selection wird dann in C# ausgelesen. Den Weg würde ich allerdings gerne ersetzen, da er sehr zeitintensiv ist.


Bisher habe ich erfolglos herumexperimentiert mit:

Code:

CATSurface_var spInputFaceSurface = csf;
CATIMmiUseBRepAccess* pBRepAccess = NULL;
hr = spInputFaceSurface->QueryInterface(IID_CATIMmiUseBRepAccess, (void**)&pBRepAccess);
CATIBRepAccess* pBRepAccessGeometry = NULL;
pBRepAccess->QueryInterface(IID_CATIBRepAccess, (void**)&pBRepAccessGeometry);

CATBaseDispatch* dispatcherie = NULL;
pBRepAccessGeometry->QueryInterface(IID_CATBaseDispatch, (void**)&dispatcherie);
CATIAReference* dispatchRef = (CATIAReference*)pBRepAccessGeometry;

CATIABase* catiaBase = (CATIABase*) csf;
csf->QueryInterface(IID_CATIABase, (void**)&catiaBase);

CATIAReference* testRef2 = NULL;
::GetReferenceFromObject(catiaBase, testRef2);



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