using Inventor;
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
static string path_for_part = @"D:\cube.ipt"; //путь к файлу
[STAThread]
static void
Main(string[] args)
{
Console.WriteLine("1 - видимый режим\n0 - невидимый режим");
string choise;
choise = Console.ReadLine();
bool visibility; //режим создания
if (Convert.ToInt32(choise) == 1)
{
visibility = true; //тут всё работает
}
else
{
visibility = false; //тут уже нет
}
Application InvApp = GetInventorApplication();
if (visibility == false) InvApp.ScreenUpdating = false;
//Процесс создания файла детали из шаблонов по умолчанию
PartDocument oPartDoc;
PartComponentDefinition oPartCompDef;
DrawingDocument oDrawDoc;
oPartDoc = (PartDocument)InvApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject,
InvApp.FileManager.GetTemplateFile(DocumentTypeEnum.kPartDocumentObject), true);
oPartCompDef = oPartDoc.ComponentDefinition;
//Создаём эскиз на плоскости X-1, Y-2, Z-3
PlanarSketch oSketch;
oSketch = oPartCompDef.Sketches.Add(oPartCompDef.WorkPlanes[3]);
//Используем переходную геометрию для создания линий в эскизе
TransientGeometry transGeo;
transGeo = InvApp.TransientGeometry;
SketchPoints oSketchPoints;
//создаем контейнер для хранения точек
oSketchPoints = oSketch.SketchPoints;
SketchEntitiesEnumerator oRectangle;
//создаем прямоугольник по двум(одной) точкам и центру
oRectangle = oSketch.SketchLines.AddAsTwoPointCenteredRectangle(transGeo.CreatePoint2d(0, 0), transGeo.CreatePoint2d(5, 5));
Profile oProfile;
oProfile = oSketch.Profiles.AddForSolid();
//настраиваем параметры выдавливания
//создаем выдавливание
ExtrudeDefinition ExtrudeDef;
ExtrudeDef = oPartCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, PartFeatureOperationEnum.kJoinOperation);
ExtrudeDef.SetDistanceExtent(10, PartFeatureExtentDirectionEnum.kPositiveExtentDirection);
ExtrudeFeature oExtrude;
//делаем выдавливание
oExtrude = oPartCompDef.Features.ExtrudeFeatures.Add(ExtrudeDef);
ReSaveFile(InvApp, oPartDoc); //сохраняем
oPartDoc.Close();
//создаём чертеж только что созданной детали
//Процесс создания файла чертежа из шаблонов по умолчанию
oDrawDoc = (DrawingDocument)InvApp.Documents.Add(DocumentTypeEnum.kDrawingDocumentObject, CreateVisible: true);
//Устанавливаем сслыку на лист.
Sheet oSheet;
oSheet = (Sheet)oDrawDoc.Sheets[1];
//Открываем модель (деталь, сборку) в скрытом режиме
_Document oModel = (_Document)InvApp.Documents.Open(path_for_part, false);
// Создаём точку для вставки центра вида
Point2d oDimPoint;
oDimPoint = InvApp.TransientGeometry.CreatePoint2d(oSheet.Width / 2, oSheet.Height / 2);
//Создаём баозвый вид
DrawingView oBaseView = (DrawingView)oSheet.DrawingViews.
AddBaseView(oModel, oDimPoint, 1, ViewOrientationTypeEnum.kRightViewOrientation,
DrawingViewStyleEnum.kHiddenLineRemovedDrawingViewStyle);
//делаем обрезку вида
DrawingSketch oSk;
oSk = oBaseView.Sketches.Add(); //создаём эскиз
oSk.Edit();
oSk.SketchCircles.AddByCenterRadius(transGeo.CreatePoint2d(0, 0), 2.5);
oSk.ExitEdit();
oDrawDoc.SelectSet.Select(oSk); //выделяем эскиз
Console.WriteLine(oDrawDoc.SelectSet.Count);
ControlDefinition oDef;
oDef = InvApp.CommandManager.ControlDefinitions["DrawingCropViewCmd"]; //команда по обрезке
oDef.Execute();
oModel.Save();
ReSaveFile(InvApp, oDrawDoc); //сохраняем
oDrawDoc.Close();
//открываем чертеж
_ = (_Document)InvApp.Documents.Open(path_for_part.Replace(".ipt", ".idw"), true);
InvApp.ScreenUpdating = true;
InvApp.ActiveView.Update();
}
static Application GetInventorApplication()
{
Application InvApp;
try
{
//Попытка присоединится к загруженному в память Inventor
InvApp = Marshal.GetActiveObject("Inventor.Application") as Application;
}
catch
{
//Загрузка Inventor в память и присоединение к нему
Type InvType = Type.GetTypeFromProgID("Inventor.Application");
InvApp = Activator.CreateInstance(InvType) as Application;
InvApp.Visible = true;
}
return InvApp;
}
static void ReSaveFile(Application Inventor, PartDocument PartDoc)
{
try
{//Попытка сохранить файл впервые
//создаем ссылку на файл
PartDocument oTestDoc = (PartDocument)Inventor.Documents.ItemByName[path_for_part];
//закрываем файл, если он открыт
oTestDoc.Close(true);
//сохраняем новый файл на место старого файла
PartDoc.SaveAs(path_for_part, false);
}
catch
{//Попытка сохранить файл c заменой
PartDoc.SaveAs(path_for_part, false);
}
}
static void ReSaveFile(Application Inventor, DrawingDocument oDrawDoc)
{
oDrawDoc.SaveAs(path_for_part.Replace(".ipt", ".idw"), false);
}
}
}