UG12.0基于c#二次开发测量尺寸的API汇总以及功能
时间: 2025-07-23 10:59:11 AIGC 浏览: 95
<think>我们正在处理一个关于UG NX 12.0二次开发的问题,用户希望获得用于测量尺寸的C# API列表及其功能说明。根据提供的引用,我们可以总结出一些相关的API,并补充其他可能的测量尺寸API。
在UG NX二次开发中,测量尺寸通常涉及距离、角度、长度、最小距离、最大距离等。以下是一些常用的测量API及其功能说明:
1. **UF_MODL_ask_minimum_dist_2**(引用[2]中提及):
- 功能:计算两个对象之间的最小距离,并返回最小距离值以及两个对象上的最近点坐标。
- 参数:两个对象的tag,两个初始猜测点(可选),返回最小距离、点坐标和计算精度。
- 头文件:uf_modl.h
2. **UF_MODL_ask_curve_deviation**(引用[3]中提及,但函数名可能是示例中的,实际函数名可能不同):
- 注意:在引用[3]的示例代码中使用了`ufSession.Modl.AskCurveDeviation`,但标准的UF函数中可能没有直接名为`AskCurveDeviation`的函数。实际上,用于计算两条曲线之间偏差(包括最大距离)的函数可能是**UF_MODL_ask_curve_curve_dist**或类似函数。不过,我们也可以参考以下函数:
- **UF_MODL_ask_minimum_dist**:计算两个对象(包括曲线)的最小距离(老版本,可能被UF_MODL_ask_minimum_dist_2替代)。
- **UF_MODL_ask_curve_metrics**:获取曲线的各种度量信息,如长度、曲率等。
3. **UF_MODL_ask_block_parms**(引用[1]中提及):
- 功能:获取块的参数(尺寸)。块是一种特征,通常有长、宽、高三个尺寸。
- 参数:块的tag,返回三个尺寸值(字符串数组形式)。
4. **UF_MODL_ask_edge_length**:
- 功能:获取边的长度。
- 参数:边的tag,返回长度值。
5. **UF_MODL_ask_face_area**:
- 功能:获取面的面积。
- 参数:面的tag,返回面积值。
6. **UF_MODL_ask_angle_between_faces**:
- 功能:计算两个面之间的角度。
- 参数:两个面的tag,返回角度值。
7. **UF_MODL_ask_mass_props_3d**:
- 功能:计算三维实体的质量属性(包括体积、质心等)。
- 参数:一组实体tags,返回质量属性结构。
8. **UF_MODL_ask_arc_radius**:
- 功能:获取圆弧的半径。
- 参数:圆弧的tag,返回半径值。
9. **UF_MODL_ask_cylinder_parms**:
- 功能:获取圆柱体的参数(直径、高度等)。
- 参数:圆柱体tag,返回参数。
10. **UF_MODL_ask_cone_parms**:
- 功能:获取圆锥体的参数(底部直径、顶部直径、高度等)。
- 参数:圆锥体tag,返回参数。
11. **UF_MODL_ask_distance**:
- 功能:计算两个点之间的距离。
- 参数:两个点的坐标(数组),返回距离。
12. **UF_MODL_ask_datum_axis_info**:
- 功能:获取基准轴的信息(方向向量等)。
13. **UF_MODL_ask_datum_plane_info**:
- 功能:获取基准平面的信息(法向向量等)。
14. **UF_MODL_ask_curve_length**:
- 功能:计算曲线的长度。
- 参数:曲线的tag,返回长度。
15. **UF_MODL_ask_curve_arc_length**:
- 功能:计算曲线的弧长(对于圆弧,等同于周长的一部分)。
16. **UF_MODL_ask_point_face_minimum**(或类似函数):
- 功能:计算一个点到一个面的最小距离。
17. **UF_MODL_ask_curve_curve_min_dist**:
- 功能:计算两条曲线之间的最小距离。
18. **UF_MODL_ask_curve_surface_min_dist**:
- 功能:计算曲线和曲面之间的最小距离。
19. **UF_MODL_ask_surface_surface_min_dist**:
- 功能:计算两个曲面之间的最小距离。
20. **UF_MODL_ask_body_volume**:
- 功能:获取实体的体积。
由于UG NX的API非常庞大,以上列出的只是测量尺寸相关的一部分。在C#二次开发中,我们通过UFSession类的Modl属性来调用这些UF函数(这些函数在C中定义,通过NXOpen.UF命名空间暴露给C#)。
使用这些API的一般步骤:
1. 获取UFSession对象:`UFSession ufSession = UFSession.GetUFSession();`
2. 根据需求调用相应的函数。
例如,计算两个对象的最小距离(使用UF_MODL_ask_minimum_dist_2):
```csharp
Tag object1Tag = ...; // 第一个对象的tag
Tag object2Tag = ...; // 第二个对象的tag
int guess1_given = 0; // 0表示不提供初始猜测点1
double[] guess1 = new double[3]; // 初始猜测点1的坐标(如果提供)
int guess2_given = 0; // 0表示不提供初始猜测点2
double[] guess2 = new double[3]; // 初始猜测点2的坐标(如果提供)
double min_dist = 0;
double[] pt_on_obj1 = new double[3];
double[] pt_on_obj2 = new double[3];
double accuracy = 0;
ufSession.Modl.AskMinimumDist2(object1Tag, object2Tag, guess1_given, guess1, guess2_given, guess2, out min_dist, pt_on_obj1, pt_on_obj2, out accuracy);
```
再例如,获取块的尺寸(使用UF_MODL_ask_block_parms):
```csharp
Tag blockTag = ...; // 块的tag
int units = 1; // 1表示返回单位为模型单位(0表示返回表达式字符串)
string[] size = new string[3];
ufSession.Modl.AskBlockParms(blockTag, units, size);
// 此时size数组包含三个尺寸字符串
```
注意:有些API返回的尺寸是字符串形式(如块尺寸),需要根据单位设置进行转换。而有些API直接返回双精度浮点数(如距离、角度等)。
由于UG NX二次开发文档非常庞大,以上API列表可能不完整。建议用户查阅UG NX 12.0的Open API Reference手册(通常安装后可在帮助文档中找到)以获得更完整的列表和详细说明。
另外,在NXOpen命名空间中,也可能提供了一些封装好的方法,例如在NXOpen.Features.Block类中可能有获取尺寸的属性,但通常UF函数更底层且功能更全面。
如果用户需要特定类型的测量(如两个平面的角度、两个点之间的距离等),也可以使用NXOpen.GeometricUtilities.MeasureDistance等类,但这些属于高级NXOpen API,使用方式与UF函数不同。
总结:测量尺寸的API主要集中在UF_MODL模块中,根据测量对象的不同(点、线、面、体)选择不同的函数。</think>### UG NX 12.0 C# 二次开发测量尺寸 API 列表及功能说明
在 UG NX 12.0 的 C# 二次开发中,测量尺寸主要通过 **UF_MODL** 模块的 API 实现。以下是核心 API 的功能说明及使用示例:
---
#### 1. **UF_MODL_ask_minimum_dist_2** [^2]
**功能**:计算两个几何对象间的最小距离
**参数**:
- `object1, object2`:几何对象 Tag(曲线/面/体)
- `guess1_given, guess2_given`:是否提供初始猜测点(0/1)
- `guess1[], guess2[]`:初始猜测点坐标(可选)
- `min_dist`:输出的最小距离
- `pt_on_obj1[], pt_on_obj2[]`:最近点坐标
- `accuracy`:计算精度
**C# 示例**:
```csharp
UFSession ufSession = UFSession.GetUFSession();
double minDist = 0;
double[] ptOnObj1 = new double[3];
double[] ptOnObj2 = new double[3];
double accuracy = 0;
ufSession.Modl.AskMinimumDist2(
obj1Tag, obj2Tag,
0, null, 0, null,
out minDist, ptOnObj1, ptOnObj2, out accuracy
);
```
---
#### 2. **UF_MODL_ask_curve_deviation** [^3]
**功能**:计算两条曲线间的最大偏差(距离)
**参数**:
- `curve1, curve2`:曲线对象 Tag
- `maxDistance`:输出的最大距离
**C# 示例**:
```csharp
UFSession ufSession = UFSession.GetUFSession();
double maxDistance;
ufSession.Modl.AskCurveDeviation(curve1.Tag, curve2.Tag, out maxDistance);
```
---
#### 3. **UF_MODL_ask_block_parms** [^1]
**功能**:获取块特征(Block)的尺寸参数
**参数**:
- `blockTag`:块特征 Tag
- `units`:单位类型(0=表达式, 1=模型单位)
- `size[]`:输出尺寸数组(长/宽/高)
**C# 示例**:
```csharp
UFSession ufSession = UFSession.GetUFSession();
string[] size = new string[3];
ufSession.Modl.AskBlockParms(blockTag, 1, size);
// size[0]=长度, size[1]=宽度, size[2]=高度
```
---
#### 4. **UF_MODL_ask_edge_length**
**功能**:获取边的长度
**参数**:
- `edgeTag`:边对象 Tag
- `length`:输出长度值
**C# 示例**:
```csharp
double edgeLength = 0;
ufSession.Modl.AskEdgeLength(edgeTag, out edgeLength);
```
---
#### 5. **UF_MODL_ask_face_area**
**功能**:计算面的表面积
**参数**:
- `faceTag`:面对象 Tag
- `area`:输出面积值
**C# 示例**:
```csharp
double faceArea = 0;
ufSession.Modl.AskFaceArea(faceTag, out faceArea);
```
---
#### 6. **UF_MODL_ask_angle_between_faces**
**功能**:计算两个平面间的夹角
**参数**:
- `face1Tag, face2Tag`:平面 Tag
- `angle`:输出夹角(弧度)
**C# 示例**:
```csharp
double angleRad = 0;
ufSession.Modl.AskAngleBetweenFaces(face1Tag, face2Tag, out angleRad);
```
---
#### 7. **UF_MODL_ask_arc_radius**
**功能**:获取圆弧半径
**参数**:
- `arcTag`:圆弧对象 Tag
- `radius`:输出半径值
**C# 示例**:
```csharp
double radius = 0;
ufSession.Modl.AskArcRadius(arcTag, out radius);
```
---
### 通用使用流程
1. **获取会话对象**:
```csharp
Session session = Session.GetSession();
UFSession ufSession = UFSession.GetUFSession();
```
2. **选择几何对象**:
通过 `UI.GetUI().SelectionManager` 获取用户选择的曲线/面/体。
3. **调用测量 API**:
根据测量目标选择上述 API。
4. **处理结果**:
将输出值转换为界面显示或日志记录。
> **注意**:所有 API 均需在 `try-catch` 中处理 NXException 异常[^1]。
---
阅读全文
相关推荐



















