NX二次开发C#-获取体的外表面

复制代码
该代码片段实现了一个判断面是否为外表面的方法。通过调用NX Open API获取面的几何属性(法线向量、点坐标等),计算向量点积来确定面的朝向:若点积结果为负,则判定为内表面并标记为蓝色(36);否则判定为外表面标记为黄色(186)。最终将结果分别存入外表面列表(OutFace)和内表面列表(InFace)。该算法利用几何向量运算实现了实体模型内外表面的自动分类。

//判断是否为外表面
public void isOutererFace(Tag face, ref List<Tag> OutFace, ref List<Tag> InFace)
{
    //OutFace = new List<Tag>();
    // InFace = new List<Tag>();
    double[] param = new double[2] { 0.5, 0.5 };
    double[] point1 = new double[3];
    double[] u1 = new double[3];
    double[] v1 = new double[3];
    double[] u2 = new double[3];
    double[] v2 = new double[3];
    double[] unit_norm = new double[3]; //面的法线
    double[] radii = new double[2];
    theUFSession.Modl.AskFaceProps(face, param, point1, u1, v1, u2, v2, unit_norm, radii);

    int type;
    double[] point = new double[3];
    double[] dir = new double[3];
    double[] box = new double[6];
    double radius;
    double rad_data;
    int norm_dir;
    theUFSession.Modl.AskFaceData(face, out type, point, dir, box, out radius, out rad_data, out norm_dir);

    double[] vec1 = new double[3] { point[0] - point1[0], point[1] - point1[1], point[2] - point1[2] };

    double med = vec1[0] * unit_norm[0] + vec1[1] * unit_norm[1] + vec1[2] * unit_norm[2];

    if (med < 0)//其他面
    {
        //设置颜色测试
        theUFSession.Obj.SetColor(face, 186);

        OutFace.Add(face);
    }

    else////外表面
    {   //设置颜色测试
        theUFSession.Obj.SetColor(face, 36);
        InFace.Add(face);

    }
}
相关推荐
牛哇网络工作室2 小时前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
hsjiasb2 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
丰锋ff3 小时前
3.1 Qt事件之事件处理器
开发语言·qt
多弗朗皮卡丘3 小时前
C语言梦开始的地方7:函数
c语言·开发语言
月华路3 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding4 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
m0_380743874 小时前
从零调用 Claude 教程
开发语言·python·node.js
起床学FPGA4 小时前
AI回答问题之后,会自动跳到最下面的问题
开发语言·javascript·ecmascript
x_x-F5 小时前
网络数据从网卡到用户态:一场基于内存所有权转移的接力赛
开发语言·网络·php
名字还没想好☜6 小时前
Java 线上内存泄漏排查实战:jmap 导堆、MAT 找 GC Roots 与四类常见泄漏
java·开发语言·jvm·内存泄漏