Во-первых, я начинаю с открытия файла продукта с частью, которая имеет ограничение моего материала. Я дал ему размеры x и y для ограничения следующим образом:
Код: Выделить всё
INFITF.Application catiaApp = (INFITF.Application)Marshal.GetActiveObject("CATIA.Application");
Documents catDocuments = catiaApp.Documents;
PartDocument partDoc = (PartDocument)catDocuments.Add("Part");
Part part = partDoc.Part;
Bodies bodies = part.Bodies;
MECMOD.Body body = bodies.Item("PartBody");
Sketches sketches = body.Sketches;
OriginElements originElements = part.OriginElements;
Reference planeXY = (Reference)originElements.PlaneXY;
Sketch sketch = sketches.Add(planeXY);
Factory2D factory2D = sketch.OpenEdition();
double xValue = Convert.ToDouble(xTextBox.Text);
double yValue = Convert.ToDouble(yTextBox.Text);
Point2D point1 = factory2D.CreatePoint(xValue, yValue);
Point2D point2 = factory2D.CreatePoint(0, yValue);
Point2D point3 = factory2D.CreatePoint(xValue, 0);
Point2D point4 = factory2D.CreatePoint(0, 0);
Line2D line1 = factory2D.CreateLine(0, yValue, xValue, yValue);
line1.StartPoint = point2;
line1.EndPoint = point1;
Line2D line2 = factory2D.CreateLine(xValue, yValue, xValue, 0);
line2.StartPoint = point1;
line2.EndPoint = point3;
Line2D line3 = factory2D.CreateLine(xValue, 0, 0, 0);
line3.StartPoint = point3;
line3.EndPoint = point4;
Line2D line4 = factory2D.CreateLine(0, 0, 0, yValue);
line4.StartPoint = point4;
line4.EndPoint = point2;
sketch.CloseEdition();
part.Update();
Код: Выделить всё
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "CATIA Part Files (*.CATPart)|*.CATPart";
dialog.Multiselect = true;
if (dialog.ShowDialog() == DialogResult.OK)
{
foreach (string file in dialog.FileNames) // Seçilen tüm dosyalar
{
string fileName = System.IO.Path.GetFileName(file); // Yalnızca dosya adını alır
dataGridView1.Rows.Add(fileName, 1); // İkinci sütuna otomatik olarak "1" yazdırılır
// CATIA'da dosyayı aç
try
{
catiaApp.Documents.Open(file); // Her dosyayı CATIA'da aç
PartDocument partDocument = (PartDocument)catiaApp.ActiveDocument;
Part part = partDocument.Part;
Selection selection = partDocument.Selection;
object[] filter = { "Face" };
string status = selection.SelectElement2(filter, "", false);
if (status == "Normal")
{
Reference selectedFace = (Reference)selection.Item(1).Reference;
HybridShapeFactory hybridShapeFactory = (HybridShapeFactory)part.HybridShapeFactory;
HybridShapeInverse hybridShapeInverse = hybridShapeFactory.AddNewInverse(selectedFace, -1);
HybridBodies hybridBodies = part.HybridBodies;
HybridBody hybridBody = hybridBodies.Item("Geometrical Set.1");
hybridBody.AppendHybridShape(hybridShapeInverse);
part.InWorkObject = hybridShapeInverse;
part.Update();
Reference reference2 = part.CreateReferenceFromObject(hybridShapeInverse);
HybridShapeBoundary hybridShapeBoundary = hybridShapeFactory.AddNewBoundaryOfSurface(reference2);
hybridBody.AppendHybridShape(hybridShapeBoundary);
part.InWorkObject = hybridShapeBoundary;
part.Update();
}
else
{
MessageBox.Show("Bir yüz seçilmedi. İşlem iptal edildi.");
}
}
catch (Exception ex)
{
MessageBox.Show($"Dosya açılamadı: {fileName}\nHata: {ex.Message}");
}
}
}
Но есть кое-что выключенный. Как мне сделать итерации вложения в catia?
У меня есть идея размещения частей из перевода, вращения. Что касается ограничений, я могу использовать ограничение для моего предельного прямоугольника и между частями со смещением, которое я ввел в текстовое поле.
С чего мне начать расчет вложенных частей?
Мое приложение
Подробнее здесь: https://stackoverflow.com/questions/790 ... pplication