internal static Snap.NX.SplitBody CreateSplitBody(Snap.NX.Body targetBody, Snap.NX.Face[] toolFaces) { NXOpen.Part work = Globals.Session.Parts.Work; NXOpen.Features.SplitBodyBuilder featureBuilder = work.Features.CreateSplitBodyBuilder(null); featureBuilder.BooleanTool.ExtrudeRevolveTool.ToolSection.PrepareMappingData(); featureBuilder.BooleanTool.ExtrudeRevolveTool.ToolSection.DistanceTolerance = Globals.DistanceTolerance; featureBuilder.BooleanTool.ExtrudeRevolveTool.ToolSection.ChainingTolerance = (Globals.UnitType == Globals.Unit.Millimeter) ? 0.02413 : 0.00095; ScCollector collector = work.ScCollectors.CreateCollector(); NXOpen.Body[] bodies = new NXOpen.Body[] { targetBody }; BodyDumbRule rule = work.ScRuleFactory.CreateRuleBodyDumb(bodies); SelectionIntentRule[] rules = new SelectionIntentRule[] { rule }; collector.ReplaceRules(rules, false); featureBuilder.TargetBodyCollector = collector; SelectionIntentRule[] ruleArray2 = new SelectionIntentRule[toolFaces.Length]; for (int i = 0; i < toolFaces.Length; i++) { ruleArray2[i] = work.ScRuleFactory.CreateRuleFaceBody((NXOpen.Body)toolFaces[i].Body); } featureBuilder.BooleanTool.FacePlaneTool.ToolFaces.FaceCollector.ReplaceRules(ruleArray2, false); NXOpen.Features.SplitBody split = (NXOpen.Features.SplitBody)Snap.NX.Feature.CommitFeature(featureBuilder); featureBuilder.Destroy(); return(new Snap.NX.SplitBody(split)); }
/// <summary> /// 抽取体 /// </summary> /// <param name="features"></param> /// <param name="bodies"></param> /// <param name="associative"></param> /// <returns></returns> public static ExtractFace CreateExtractGeometry(this FeatureCollection features, Body[] bodies, bool associative = false) { ExtractFaceBuilder extractFaceBuilder = _workPart.Features.CreateExtractFaceBuilder(null); extractFaceBuilder.ParentPart = ExtractFaceBuilder.ParentPartType.WorkPart; extractFaceBuilder.Associative = associative; extractFaceBuilder.FixAtCurrentTimestamp = true; extractFaceBuilder.HideOriginal = false; extractFaceBuilder.InheritDisplayProperties = false; extractFaceBuilder.Type = ExtractFaceBuilder.ExtractType.Body; extractFaceBuilder.CopyThreads = false; extractFaceBuilder.FeatureOption = ExtractFaceBuilder.FeatureOptionType.SeparateFeatureForEachBody; BodyDumbRule bodyDumbRule1 = _workPart.ScRuleFactory.CreateRuleBodyDumb(bodies, true); SelectionIntentRule[] rules1 = new SelectionIntentRule[1]; rules1[0] = bodyDumbRule1; extractFaceBuilder.ExtractBodyCollector.ReplaceRules(rules1, false); ExtractFace nXObject1 = (ExtractFace)extractFaceBuilder.Commit(); extractFaceBuilder.Destroy(); return(nXObject1); }
/// <summary> /// 链接到工作部件中(非关联) /// </summary> /// <param name="seleObj">要链接的体</param> /// <returns></returns> public static NXOpen.Features.Feature WaveBodys(params NXObject[] seleObj) { Part workPart = theSession.Parts.Work; NXOpen.Features.Feature nullNXOpen_Features_Feature = null; NXOpen.Features.WaveLinkBuilder waveLinkBuilder1 = workPart.BaseFeatures.CreateWaveLinkBuilder(nullNXOpen_Features_Feature); NXOpen.Features.ExtractFaceBuilder extractFaceBuilder1; extractFaceBuilder1 = waveLinkBuilder1.ExtractFaceBuilder; extractFaceBuilder1.FaceOption = NXOpen.Features.ExtractFaceBuilder.FaceOptionType.FaceChain; waveLinkBuilder1.Type = NXOpen.Features.WaveLinkBuilder.Types.BodyLink; extractFaceBuilder1.FaceOption = NXOpen.Features.ExtractFaceBuilder.FaceOptionType.FaceChain; extractFaceBuilder1.AngleTolerance = 45.0; extractFaceBuilder1.ParentPart = NXOpen.Features.ExtractFaceBuilder.ParentPartType.OtherPart; extractFaceBuilder1.Associative = false; //关联 extractFaceBuilder1.MakePositionIndependent = false; extractFaceBuilder1.FixAtCurrentTimestamp = false; extractFaceBuilder1.HideOriginal = false; extractFaceBuilder1.InheritDisplayProperties = false; NXOpen.ScCollector scCollector1; scCollector1 = extractFaceBuilder1.ExtractBodyCollector; extractFaceBuilder1.CopyThreads = false; //是否复制 extractFaceBuilder1.FeatureOption = NXOpen.Features.ExtractFaceBuilder.FeatureOptionType.OneFeatureForAllBodies; Body[] seleBody = new Body[seleObj.Length]; for (int i = 0; i < seleObj.Length; i++) { seleBody[i] = (Body)seleObj[i]; } BodyDumbRule bodyDumbRule1 = workPart.ScRuleFactory.CreateRuleBodyDumb(seleBody, true); SelectionIntentRule[] rules1 = new SelectionIntentRule[1]; rules1[0] = bodyDumbRule1; scCollector1.ReplaceRules(rules1, false); try { return(waveLinkBuilder1.CommitFeature()); } catch (Exception ex) { LogMgr.WriteLog("AssmbliesUtils:WaveBodys:" + ex.Message); return(null); } finally { extractFaceBuilder1.Destroy(); } }
/// <summary> /// 获取极限点 /// </summary> /// <param name="measureManager"></param> /// <param name="body"></param> /// <param name="measureDirection"></param> /// <param name="secondDirection"></param> /// <param name="thirdDirection"></param> /// <returns></returns> public static Point3d MeasureExtreme(this MeasureManager measureManager, Body body, Vector3d measureDirection, Vector3d secondDirection, Vector3d thirdDirection) { NXOpen.Unit lengthUnit = WorkPart.UnitCollection.FindObject("MilliMeter"); #if NX12 BodyDumbRule bodyDumbRule = (WorkPart as BasePart).ScRuleFactory.CreateRuleBodyDumb(new Body[] { body }); #else BodyDumbRule bodyDumbRule = WorkPart.ScRuleFactory.CreateRuleBodyDumb(new Body[] { body }); #endif ScCollector scCollector = WorkPart.ScCollectors.CreateCollector(); scCollector.ReplaceRules(new SelectionIntentRule[] { bodyDumbRule }, false); Direction direction1 = WorkPart.Directions.CreateDirection(new Point3d(), measureDirection, NXOpen.SmartObject.UpdateOption.WithinModeling); Direction direction2 = WorkPart.Directions.CreateDirection(new Point3d(), secondDirection, NXOpen.SmartObject.UpdateOption.WithinModeling); Direction direction3 = WorkPart.Directions.CreateDirection(new Point3d(), thirdDirection, NXOpen.SmartObject.UpdateOption.WithinModeling); var bodiesExtreme = measureManager.NewRectangularExtreme(lengthUnit, direction1, direction2, direction3, scCollector, false); return(bodiesExtreme.Point); }
internal static Snap.NX.TrimBody CreateTrimBody(Snap.NX.Body targetBody, Snap.NX.Face toolFace, bool direction) { NXOpen.Part workPart = (NXOpen.Part) Globals.WorkPart; TrimBody2Builder featureBuilder = workPart.Features.CreateTrimBody2Builder(null); featureBuilder.Tolerance = Globals.DistanceTolerance; featureBuilder.BooleanTool.ExtrudeRevolveTool.ToolSection.DistanceTolerance = Globals.DistanceTolerance; featureBuilder.BooleanTool.ExtrudeRevolveTool.ToolSection.ChainingTolerance = (Globals.UnitType == Globals.Unit.Millimeter) ? 0.02413 : 0.00095; ScCollector collector = workPart.ScCollectors.CreateCollector(); NXOpen.Body[] bodies = new NXOpen.Body[] { targetBody }; BodyDumbRule rule = workPart.ScRuleFactory.CreateRuleBodyDumb(bodies); SelectionIntentRule[] rules = new SelectionIntentRule[] { rule }; collector.ReplaceRules(rules, false); featureBuilder.TargetBodyCollector = collector; SelectionIntentRule[] ruleArray2 = new SelectionIntentRule[] { workPart.ScRuleFactory.CreateRuleFaceBody((NXOpen.Body) toolFace.Body) }; featureBuilder.BooleanTool.FacePlaneTool.ToolFaces.FaceCollector.ReplaceRules(ruleArray2, false); featureBuilder.BooleanTool.ReverseDirection = direction; TrimBody2 trim = (TrimBody2) Snap.NX.Feature.CommitFeature(featureBuilder); featureBuilder.Destroy(); return new Snap.NX.TrimBody(trim); }