NXの二次開発-モデリング-サーフェスの接線サーフェスを取得します

UG NXでは、面を選択するときに、接線面、ソリッド面などがあります。

 

二次現像工程では、表面の接線面を取得するために、記録関数を使用して接線面を取得するためのコード(オフセット面を例にとる)を取得し、次のコードを取得します。

// NX 1934
// Journal created by Administrator on Wed Nov 11 23:48:21 2020 中国标准时间

//
using System;
using NXOpen;

public class NXJournal
{
  public static void Main(string[] args)
  {
    NXOpen.Session theSession = NXOpen.Session.GetSession();
    NXOpen.Part workPart = theSession.Parts.Work;
    NXOpen.Part displayPart = theSession.Parts.Display;
    // ----------------------------------------------
    //   菜单:插入(S)->偏置/缩放(O)->偏置曲面(O)...
    // ----------------------------------------------
    NXOpen.Session.UndoMarkId markId1;
    markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "起点");
    
    NXOpen.Features.Feature nullNXOpen_Features_Feature = null;
    NXOpen.Features.OffsetSurfaceBuilder offsetSurfaceBuilder1;
    offsetSurfaceBuilder1 = workPart.Features.CreateOffsetSurfaceBuilder(nullNXOpen_Features_Feature);
    
    NXOpen.Unit unit1;
    unit1 = offsetSurfaceBuilder1.Radius.Units;
    
    NXOpen.Expression expression1;
    expression1 = workPart.Expressions.CreateSystemExpressionWithUnits("5", unit1);
    
    offsetSurfaceBuilder1.OutputOption = NXOpen.Features.OffsetSurfaceBuilder.OutputOptionType.OneFeatureForAllFaces;
    
    offsetSurfaceBuilder1.Tolerance = 0.001;
    
    offsetSurfaceBuilder1.Radius.SetFormula("5");
    
    offsetSurfaceBuilder1.SetOrientationMethod(NXOpen.Features.OffsetSurfaceBuilder.OrientationMethodType.UseExistingNormals);
    
    offsetSurfaceBuilder1.ApproxOption = true;
    
    offsetSurfaceBuilder1.PartialOption = true;
    
    offsetSurfaceBuilder1.MaximumExcludedObjects = 10;
    
    offsetSurfaceBuilder1.RemoveProblemVerticesOption = true;
    
    theSession.SetUndoMarkName(markId1, "偏置曲面 对话框");
    
    NXOpen.ScCollector nullNXOpen_ScCollector = null;
    NXOpen.GeometricUtilities.FaceSetOffset faceSetOffset1;
    faceSetOffset1 = workPart.FaceSetOffsets.CreateFaceSet("5", nullNXOpen_ScCollector, false, 0);
    
    offsetSurfaceBuilder1.FaceSets.Append(faceSetOffset1);
    
    NXOpen.ScCollector scCollector1;
    scCollector1 = workPart.ScCollectors.CreateCollector();
    
    NXOpen.Features.SweepAlongGuide sweepAlongGuide1 = ((NXOpen.Features.SweepAlongGuide)workPart.Features.FindObject("SWEEP(2)"));
    NXOpen.Face face1 = ((NXOpen.Face)sweepAlongGuide1.FindObject("FACE 563448 {(-8.5786437626905,0,191.4213562373095) SWEEP(2)}"));
    NXOpen.Face[] boundaryFaces1 = new NXOpen.Face[0];
    NXOpen.FaceTangentRule faceTangentRule1;
    faceTangentRule1 = workPart.ScRuleFactory.CreateRuleFaceTangent(face1, boundaryFaces1, 0.050000000000000003);
    
    NXOpen.SelectionIntentRule[] rules1 = new NXOpen.SelectionIntentRule[1];
    rules1[0] = faceTangentRule1;
    scCollector1.ReplaceRules(rules1, false);
    
    faceSetOffset1.FaceCollector = scCollector1;
    
    offsetSurfaceBuilder1.PartialOption = true;
    
    NXOpen.Session.UndoMarkId markId2;
    markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "偏置曲面");
    
    theSession.DeleteUndoMark(markId2, null);
    
    NXOpen.Session.UndoMarkId markId3;
    markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "偏置曲面");
    
    NXOpen.NXObject nXObject1;
    nXObject1 = offsetSurfaceBuilder1.Commit();
    
    theSession.DeleteUndoMark(markId3, null);
    
    theSession.SetUndoMarkName(markId1, "偏置曲面");
    
    workPart.Expressions.Delete(expression1);
    
    NXOpen.Expression expression2 = offsetSurfaceBuilder1.Radius;
    NXOpen.Expression expression3 = faceSetOffset1.Offset;
    offsetSurfaceBuilder1.Destroy();
    
    // ----------------------------------------------
    //   菜单:工具(T)->操作记录(J)->停止录制(S)
    // ----------------------------------------------
    
  }
  public static int GetUnloadOption(string dummy) { return (int)NXOpen.Session.LibraryUnloadOption.Immediately; }
}

実際、接線を取得するためのコードは次のとおりです。

NXOpen.ScCollector scCollector1;
    scCollector1 = workPart.ScCollectors.CreateCollector();
    
    NXOpen.Features.SweepAlongGuide sweepAlongGuide1 = ((NXOpen.Features.SweepAlongGuide)workPart.Features.FindObject("SWEEP(2)"));
    NXOpen.Face face1 = ((NXOpen.Face)sweepAlongGuide1.FindObject("FACE 563448 {(-8.5786437626905,0,191.4213562373095) SWEEP(2)}"));
    NXOpen.Face[] boundaryFaces1 = new NXOpen.Face[0];
    NXOpen.FaceTangentRule faceTangentRule1;
    faceTangentRule1 = workPart.ScRuleFactory.CreateRuleFaceTangent(face1, boundaryFaces1, 0.050000000000000003);
    
    NXOpen.SelectionIntentRule[] rules1 = new NXOpen.SelectionIntentRule[1];
    rules1[0] = faceTangentRule1;
    scCollector1.ReplaceRules(rules1, false);
    

ここで取得されるのはNXOpen.ScCollectorscCollector1です。NXObjectが関与していないため、NXOpen.ScCollectorscCollector1でサーフェスを抽出する方法。調査後、次の機能を使用して次のことを実現できます。

/// <summary>
        /// 获取面的相切面(tangentFaces)
        /// </summary>
        ///<returns>tangentFaces[]</returns>>
        public Face[] GetTangentFaces()
        {
            Face [] tangentFaces = new Face[0];
            NXOpen.FaceTangentRule faceTangentRule;
            NXOpen.Face[] boundaryFaces1 = new NXOpen.Face[0];
            faceTangentRule = workPart.ScRuleFactory.CreateRuleFaceTangent(theFace, boundaryFaces1, 0.5);

            NXOpen.SelectionIntentRule[] rules = new NXOpen.SelectionIntentRule[1];
            rules[0] = faceTangentRule;
            NXOpen.ScCollector scCollector;
            scCollector = workPart.ScCollectors.CreateCollector();
            scCollector.ReplaceRules(rules, false);
            TaggedObject[] taggedObjects = scCollector.GetObjects();
            foreach (var to in taggedObjects)
            {
                Array.Resize(ref tangentFaces, tangentFaces.Length + 1);
                tangentFaces[tangentFaces.Length - 1] = (Face)to;
            }
            return tangentFaces;
        }

TaggedObject [] tagsedObjects = scCollector.GetObjects();を使用して、サーフェスオブジェクトを取得します。

おすすめ

転載: blog.csdn.net/yang19861007/article/details/109634070