Hallo,
für den externen Zugriff hier mal ein kleines Beispiel; allerdings in C#. Für C++ müsste es dann eine entsprechende Methode geben
-----------------------------------------------------------
object CatiaApp = null;
object CatiaDoc = null;
object Doc = null;
CatiaApp = Marshal.GetActiveObject("CATIA.Application");
//Ausschalten der Userinteraktion
object[] Wert = new object[1]{"False"};
object DisplayFileAlerts = CatiaApp.GetType().InvokeMember("DisplayFileAlerts", BindingFlags.SetProperty, null, CatiaApp, Wert);
//Catia über LateBinding #######################################################
try
{
CatiaDoc = CatiaApp.GetType().InvokeMember("Documents", BindingFlags.GetProperty, null, CatiaApp, null );
object[] part = new object[1]{"Part"};
Doc = CatiaDoc.GetType().InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, CatiaDoc, part);
}
catch
{
return;
}
//Erstellen eines neuen geöffneten Körpers
try
{ //Geöffneten Körper hinzufügen
object Part = Doc.GetType().InvokeMember("Part", BindingFlags.GetProperty, null, Doc, null );
object openbodies = Part.GetType().InvokeMember("HybridBodies", BindingFlags.GetProperty, null, Part, null );
object openbody = openbodies.GetType().InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, openbodies, null);
object[] openbodyname = new object[1]{"ImportedPoints"};
object obname = openbody.GetType().InvokeMember("Name", BindingFlags.SetProperty, null, openbody, openbodyname);
//Punkte erzeugen; Punktkoordinaten im Array "punkte"
object HybridShapeFactory = Part.GetType().InvokeMember("HybridShapeFactory", BindingFlags.GetProperty, null, Part, null );
for(int i = 0; i< punkte.GetUpperBound(0); i++)
{
object[] coord = new object[3]{punkte.GetValue(i,0), punkte.GetValue(i,1),punkte.GetValue(i,2)};
object point = HybridShapeFactory.GetType().InvokeMember("AddNewPointCoord", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, HybridShapeFactory, coord);
object[] addpoint = new object[1]{point};
object AppendHybridShape = openbody.GetType().InvokeMember("AppendHybridShape", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, openbody, addpoint);
}
object Update = Part.GetType().InvokeMember("Update", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, Part, null);
}
catch
{
return;
}
--------------------------------------------------------
Jens
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP