Проблема с параметризацией линейного размера

Автор maksim krotov, 01.11.25, 20:22:58

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

maksim krotov

Я не совсем понимаю, как сделать линейные размеры параметрическими. Вот например, как это делаю с диаметральными размерами:

ISymbols2DContainer symbols2dContainer = (ISymbols2DContainer)view;

IDiametralDimension diametralDimension = symbols2dContainer.DiametralDimensions.Add();
diametralDimension.BaseObject = circle;
diametralDimension.Update();

IDrawingObject1 drawingObject12 = (IDrawingObject1)diametralDimension;
IParametriticConstraint parametriticConstraint2 = drawingObject12.NewConstraint();
parametriticConstraint2 = drawingObject12.NewConstraint();
parametriticConstraint2.ConstraintType = Kompas6Constants.ksConstraintTypeEnum.ksCDimWithVariable;
parametriticConstraint2.Variable = "v1";
parametriticConstraint2.Expression = "D";
parametriticConstraint2.Create();

parametriticConstraint2 = drawingObject12.NewConstraint();
parametriticConstraint2.ConstraintType = Kompas6Constants.ksConstraintTypeEnum.ksCFixedDim;
parametriticConstraint2.Create();


IVariable7 variableSketch = (sketch as IFeature7).Variable[false, false, "v1"];
variableSketch.Expression = "D";

sketch.EndEdit();

С ними все получается. А вот с линейными размерами есть проблемы:

ILineSegment lineSegment = drawingContainer.LineSegments.Add();
lineSegment.X1 = 0;
lineSegment.Y1 = 0;
lineSegment.X2 = 100;
lineSegment.Y2 = 0;
lineSegment.Update();

ISymbols2DContainer symbols2dContainer = (ISymbols2DContainer)view;


ILineDimension lineDimension = symbols2dContainer.LineDimensions.Add();
lineDimension.X1 = 0;
lineDimension.Y1 = 0;
lineDimension.X2 = 100;
lineDimension.Y2 = 0;
lineDimension.Update();

IDrawingObject1 drawingObject12 = (IDrawingObject1)lineDimension;
IParametriticConstraint parametriticConstraint2 = drawingObject12.NewConstraint();
parametriticConstraint2 = drawingObject12.NewConstraint();
parametriticConstraint2.ConstraintType = Kompas6Constants.ksConstraintTypeEnum.ksCDimWithVariable;
parametriticConstraint2.Variable = "v1";
parametriticConstraint2.Expression = "L";
parametriticConstraint2.Create();

parametriticConstraint2 = drawingObject12.NewConstraint();
parametriticConstraint2.ConstraintType = Kompas6Constants.ksConstraintTypeEnum.ksCFixedDim;
parametriticConstraint2.Create();


IVariable7 variableSketch = (sketch as IFeature7).Variable[false, false, "v1"];
variableSketch.Expression = "L";

sketch.EndEdit();


На строчку variableSketch.Expression = "L"; компилятор ругается, выдавая исключение System.NullReferenceException

Вячеслав_К

Можно проверить, что возвращает метод parametriticConstraint2.Create(). Возможно, линейный размер с ограничениями не создается.

maksim krotov

Я понимаю, что линейный размер с ограничениями не создается. Как его создать?

Miroshnyk

Всё создаётся, просто Вы не все ограничения создали.


maksim krotov

Хорошо, спасибо! Можете, пожалуйста, еще показать, как добавить эти ограничения?

Miroshnyk

Цитата: maksim krotov от 02.11.25, 21:55:05Хорошо, спасибо! Можете, пожалуйста, еще показать, как добавить эти ограничения?
На рисунке видно - совпадение точек, без них размер не зафиксируется.
Не С# -
+ Благодарностей: 1

maksim krotov

Спасибо, удалось:

IApplication application = Marshal.GetActiveObject("KOMPAS.Application.7") as IApplication;
IKompasDocument document = application.Documents.Add(DocumentTypeEnum.ksDocumentPart);
IPartDocument partDocument = document as IPartDocument;
IPart7 part7 = partDocument.TopPart;

IModelContainer modelContainer = (IModelContainer)part7;
ISketch sketch = modelContainer.Sketchs.Add();
sketch.Plane = part7.DefaultObject[ksObj3dTypeEnum.o3d_planeYOZ];
sketch.Hidden = false;
sketch.Angle = 90.0;
sketch.LeftHandedCS = true;
sketch.Update();

IKompasDocument2D document2D = sketch.BeginEdit();
IKompasDocument2D1 IKompasDocument2D1_ = (IKompasDocument2D1)document2D;

IViewsAndLayersManager viewsAndLayersManager = document2D.ViewsAndLayersManager;
IDrawingContainer drawingContainer = (IDrawingContainer)viewsAndLayersManager.Views.ActiveView;
IView view = (IView)drawingContainer;
ISymbols2DContainer symbols2dContainer = (ISymbols2DContainer)view;

ILineSegment lineSegment = drawingContainer.LineSegments.Add();
lineSegment.X1 = 0;
lineSegment.Y1 = 0;
lineSegment.X2 = 100;
lineSegment.Y2 = 0;
lineSegment.Update();

ILineDimension lineDimension = symbols2dContainer.LineDimensions.Add();
lineDimension.X1 = 0;
lineDimension.Y1 = 0;
lineDimension.X2 = 100;
lineDimension.Y2 = 0;
lineDimension.Y3 = 100;
lineDimension.Update();

IDrawingObject1 drawingObject1 = (IDrawingObject1)lineSegment;

IParametriticConstraint parametriticConstraint1 = drawingObject1.NewConstraint();
parametriticConstraint1.Index = 0;
parametriticConstraint1.Partner = lineDimension;
parametriticConstraint1.PartnerIndex = 0;
parametriticConstraint1.ConstraintType = ksConstraintTypeEnum.ksCMergePoints;
parametriticConstraint1.Create();



IDrawingObject1 drawingObject2 = (IDrawingObject1)lineSegment;
IParametriticConstraint parametriticConstraint2 = drawingObject2.NewConstraint();
parametriticConstraint2.Index = 1;
parametriticConstraint2.Partner = lineDimension;
parametriticConstraint2.PartnerIndex = 1;
parametriticConstraint2.ConstraintType = ksConstraintTypeEnum.ksCMergePoints;
parametriticConstraint2.Create();

sketch.EndEdit();