006. UG二次开发,草图类之 “固定约束“
当草图绘制在平面内,未对起位置,尺寸等进行约束时,他是会随时被不小心移动或变形的,如下图的圆,直线和点,对于圆来说,完全约束它就是固定圆心坐标尺,以及有明确的直径,这个圆才是完全约束的约束是多种条件同时使用的,如如圆,定住圆心只能定住他的坐标位置,直径还没有定住,他仍不是完全约束的,对于线来说,定住两点坐标才能完全约束,如果只顶住一点,他还是可以变长变短,绕定点旋转的,也没完全约束,对于点来说,定住了坐标它就是完全约束的平面中的一点,所以,固定约束只是让我们图形完全约束的其中约束方式之一,实现完全约束往往需要多种约束方式同时使用,本篇,只单独讲解固定约束的用法一.新版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 namex圆心x坐标/param /// param namey圆心y坐标/param /// param nameR约束半径/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();//完成草图 }自动绘制出来的圆心已经添加了固定约束其他用法类似,为避免篇幅过长,不一 一演示