当草图绘制在平面内,未对起位置,尺寸等进行约束时,他是会随时被不小心移动或变形的,如下图的圆,直线和点,
对于圆来说,完全约束它就是固定圆心坐标尺,以及有明确的直径,这个圆才是完全约束的
约束是多种条件同时使用的,如如圆,定住圆心只能定住他的坐标位置,直径还没有定住,他仍不是完全约束的,对于线来说,定住两点坐标才能完全约束,如果只顶住一点,他还是可以变长变短,绕定点旋转的,也没完全约束,对于点来说,定住了坐标它就是完全约束的平面中的一点,
所以,固定约束只是让我们图形完全约束的其中约束方式之一,实现完全约束往往需要多种约束方式同时使用,本篇,只单独讲解固定约束的用法
一.新版UG几何约束构造器的成员
新版ug几何关系约束构造器包含下图11种约束关系,分别是:
1.重合约束: 他不仅是重合,也是旧版草图的点在线上副新版本把他两归为一类,
2.共线约束
3.水平约束
4.竖直约束
5.相切约束
6.平行约束
7.垂直约束
8.相等约束
9.对称约束
10点在中点上约束
11.固定约束
本节内容主要探套固定约束
二.固约束构造器的代码封装
目前,我只封装了固定圆弧圆心, 直线的起点, 点 的判断逻辑,对于不常用的有需要用到再封装,
/// <summary> /// 固定约束,传入一个约束对象,将其固定在草图中,防止移动 /// </summary> public void fix(NXOpen.NXObject nXObject1) { NXOpen.SketchFixObjectsBuilder fixBuilder = workPart.Sketches.CreateSketchFixObjectsBuilder(); NXOpen.Sketch.ConstraintGeometry fixGeo = new NXOpen.Sketch.ConstraintGeometry(); fixGeo.Geometry = nXObject1; // 根据类型智能匹配约束点 if (nXObject1 is NXOpen.Arc) { // 圆弧:固定圆心 fixGeo.PointType = NXOpen.Sketch.ConstraintPointType.ArcCenter; } else if (nXObject1 is NXOpen.Line) { // 直线:通常固定起点 (StartVertex) fixGeo.PointType = NXOpen.Sketch.ConstraintPointType.StartVertex; //注意,草图的自动捕捉是关闭不掉的,要避免自由活动的终点x,y坐标落在0上, //否则会被捕捉添加了多余的约束,导致直线首尾两点都被约束,即终点的坐标xy都不要有零,(0,0) } else if (nXObject1 is NXOpen.Point) { // 点:直接固定点本身 fixGeo.PointType = NXOpen.Sketch.ConstraintPointType.None; } else { // 默认情况,防止报错 fixGeo.PointType = NXOpen.Sketch.ConstraintPointType.None; } fixGeo.SplineDefiningPointIndex = 0; fixBuilder.AddObject(fixGeo); fixBuilder.Commit(); fixBuilder.Destroy(); }调用固定约束方法fix()时,传给他一个要固定的对象Arc ,Line, Point等,他就会自定为我们的对象添加固定约束
例如:
1.在圆草图算法中使用固定约束
在圆的草图算法中,我们调用了固定约束方法fix()
/// <summary> /// 绘制圆,并固定圆心位置,加约束直径 (完全约束) /// </summary> /// <param name="x">圆心x坐标</param> /// <param name="y">圆心y坐标</param> /// <param name="R">约束半径</param> public void Arc(double x,double y,double R) { // 2. 创建圆 nXMatrix1 = theSession.ActiveSketch.Orientation; NXOpen.Point3d center1 = new NXOpen.Point3d(x, y, 0.0); NXOpen.Arc arc1 = workPart.Curves.CreateArc(center1, nXMatrix1, R, 0.0, 2.0 * Math.PI); theSession.ActiveSketch.AddGeometry(arc1, NXOpen.Sketch.InferConstraintsOption.InferNoConstraints); theSession.ActiveSketch.Update(); fix(arc1);//固定圆心约束,防止圆移动 // 4.尺寸约束构造器 NXOpen.SketchRapidDimensionBuilder dimBuilder = workPart.Sketches.CreateRapidDimensionBuilder(); // 设置为直径测量 dimBuilder.Measurement.Method = NXOpen.Annotations.DimensionMeasurementBuilder.MeasurementMethod.Diametral; dimBuilder.FirstAssociativity.SetValue(arc1, null, center1); //将约束直径尺寸关联到 arc1 // 设置尺寸值(直径) dimBuilder.Driving.DimensionValue = R*2; // 提交 NXOpen.Session.UndoMarkId markId = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "CreateSketchDimension");//记号点,高级编程用,可删 dimBuilder.Commit();//提交尺寸约束 dimBuilder.Destroy();//销毁尺寸约束构造器 // 5. 保持环境状态 theSession.ActiveSketch.CalculateStatus();//强制刷新草图求解器 theSession.ActiveSketch.Update();//立即更新草图 }当我们使用这个绘制圆算法,它的圆心就成功添加上固定约束了
public void dwg() { sketch.cad.Arc(0,10,20);//绘制完全约束的圆 sketch.end();//完成草图 }自动绘制出来的圆心已经添加了固定约束
其他用法类似,为避免篇幅过长,不一 一演示