/
Edwar
/
cam-api-examples
Обзор
Документация
Войти
/
Edwar
/
cam-api-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Geometry/OSDMakerExampleNet/Program.cs
71 строка
3 KB
cepera
Refresh main branch
29 май 2025, 16:14
29 май 2025, 16:14
f9a4574
Код
Авторство
О чём код?
using CAMAPI.DotnetHelper; using CAMAPI.GeomLibrary; using CAMAPI.GeomModel; using CAMAPI.GeomImporter; using CAMAPI.ResultStatus; using CAMHelper.NativeLibUtils; using System.Runtime.InteropServices; namespace ExtensionUtilityGeometryModelNet; /// <summary> /// Export function delegate /// </summary> [UnmanagedFunctionPointer(CallingConvention.StdCall)] public delegate IntPtr CreateGeometryLibraryPointer(); public class Program { private static string binCAMDir = @"C:\Program Files\Sprut Technology\SprutCAM 18\Bin64"; private static string modelName = @"Milling_3D\49-1.igs"; static void Main(string[] args) { TResultStatus resultStatus = default; IntPtr osdMakerHandle = IntPtr.Zero; try { if (args.Length>0) modelName = args[0]; Environment.CurrentDirectory = binCAMDir; var osdMakerPath = Path.Combine(binCAMDir, "OSDMaker.dll"); var importFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), @"SprutCAM\Version 18\Models", modelName); var exportDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "CAMAPI Geometry examples"); osdMakerHandle = NativeLibLoader.LoadDll(osdMakerPath); if (osdMakerHandle == IntPtr.Zero) { Console.WriteLine("Loading OSDMaker.dll is failed."); return; } var CreateLibPointer = NativeLibLoader.GetProc<CreateGeometryLibraryPointer>(osdMakerHandle, "CreateCAMAPIGeometryLibrary"); var libPtr = CreateLibPointer(); using var geomLib = new ComWrapper<ICAMAPIGeomLibrary>((ICAMAPIGeomLibrary)Marshal.GetTypedObjectForIUnknown(libPtr, typeof(ICAMAPIGeomLibrary))); using var fullModel = new ComWrapper<ICAMAPIGeometryModel>(geomLib.Instance.CreateGeometryModel(out resultStatus)); using var importer = new ComWrapper<ICAMAPIGeometryImporter>(geomLib.Instance.CreateGeometryImporter(out resultStatus)); importer.Instance.GeometryModel = fullModel.Instance; importer.Instance.ImportFile(importFileName, "", false); if(!Directory.Exists(exportDir)) Directory.CreateDirectory(exportDir); fullModel.Instance.ExportSelectedToOSD(Path.Combine(exportDir, "ExportedModelExample.osd"), out resultStatus); if (!(resultStatus.Code == TResultStatusCode.rsSuccess)) throw new Exception(resultStatus.Description); } finally { if (osdMakerHandle != IntPtr.Zero) { NativeLibLoader.FreeDll(osdMakerHandle); } } } }