在封装的ufun .NET库里面,对UF_MODL_ask_face_loops这个函数并没有封装,导致我们很多不便,那我们在.NET下怎样才能使用这个函数呢??当然是手动处理一下

 Public Function AskFaceLoops(ByVal faceTag As NXOpen.Tag) As loop_list()
Dim loop_t As IntPtr
NXOpen.Utilities.JAM.StartUFCall()
Dim errorCode As Integer = UF_MODL_ask_face_loops(faceTag, loop_t)
NXOpen.Utilities.JAM.EndUFCall()
If errorCode <> 0 Then
Throw NXOpen.NXException.Create(errorCode)
End If
Dim ptr As IntPtr = loop_t
Dim loopList As New List(Of loop_list)
While ptr <> IntPtr.Zero
Dim loop_list_t As _loop_list = CType(Marshal.PtrToStructure(ptr, GetType(_loop_list)), _loop_list)
Dim count As Integer
errorCode = UF_MODL_ask_list_count(loop_list_t.edge_list, count)
Dim edgeArray(count - 1) As NXOpen.Tag
For i As Integer = 0 To count - 1
UF_MODL_ask_list_item(loop_list_t.edge_list, i, edgeArray(i))
Next
'UF_MODL_delete_list(loop_list_t.edge_list)
loopList.Add(New loop_list With {
.type = loop_list_t.type,
.edge_list = edgeArray})
ptr = loop_list_t.next
End While
UF_MODL_delete_loop_list(loop_t)
Return loopList.ToArray()
End Function <DllImport("libufun.dll", EntryPoint:="UF_MODL_ask_face_loops", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _
Friend Shared Function UF_MODL_ask_face_loops(ByVal face As Tag, <Out> ByRef loop_list As IntPtr) As Integer
End Function <DllImport("libufun.dll", EntryPoint:="UF_MODL_ask_list_count", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _
Friend Shared Function UF_MODL_ask_list_count(ByVal list As IntPtr, <Out> ByRef count As Integer) As Integer
End Function <DllImport("libufun.dll", EntryPoint:="UF_MODL_ask_list_item", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _
Friend Shared Function UF_MODL_ask_list_item(ByVal list As IntPtr, ByVal index As Integer, <Out> ByRef [object] As Tag) As Integer
End Function
<DllImport("libufun.dll", EntryPoint:="UF_MODL_delete_list", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _
Public Shared Function UF_MODL_delete_list(ByRef list As IntPtr) As Integer
End Function <DllImport("libufun.dll", EntryPoint:="UF_MODL_delete_loop_list", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _
Friend Shared Function UF_MODL_delete_loop_list(ByRef list As IntPtr) As Integer
End Function Friend Structure _loop_list
Public type As Integer
Public edge_list As IntPtr
Public [next] As IntPtr
End Structure Public Structure loop_list
Public type As Integer 'Peripheral=1, Hole=2, Other=3
Public edge_list() As NXOpen.Tag
End Structure
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices; public class AskFaceLoop
{
public LoopList[] AskFaceLoops(NXOpen.Tag faceTag)
{
System.IntPtr loopT;
NXOpen.Utilities.JAM.StartUFCall();
int errorCode = UF_MODL_ask_face_loops(faceTag,out loopT);
NXOpen.Utilities.JAM.EndUFCall();
if (errorCode != 0)
{
throw NXOpen.NXException.Create(errorCode);
}
System.IntPtr ptr = loopT;
List<LoopList> loopList = new List<LoopList>();
while (ptr != IntPtr.Zero)
{
_loop_list loopListT = (_loop_list)Marshal.PtrToStructure(ptr, typeof(_loop_list));
int count;
errorCode = UF_MODL_ask_list_count(loopListT.edge_list,out count);
NXOpen.Tag[] edgeArray = new NXOpen.Tag[count];
for (int i = 0; i < count; i++)
{
UF_MODL_ask_list_item(loopListT.edge_list, i,out edgeArray[i]);
}
//UF_MODL_delete_list(out loopListT.edge_list);
loopList.Add(new LoopList{Type = loopListT.type,EdgeList = edgeArray});
ptr = loopListT.next;
}
UF_MODL_delete_loop_list(out loopT);
return loopList.ToArray();
} [DllImport("libufun.dll", EntryPoint = "UF_MODL_ask_face_loops", CallingConvention = CallingConvention.Cdecl,CharSet = CharSet.Ansi)]
internal static extern int UF_MODL_ask_face_loops(NXOpen.Tag face, out IntPtr loopList); [DllImport("libufun.dll", EntryPoint = "UF_MODL_ask_list_count", CallingConvention = CallingConvention.Cdecl,
CharSet = CharSet.Ansi)]
internal static extern int UF_MODL_ask_list_count(IntPtr list, out int count); [DllImport("libufun.dll", EntryPoint = "UF_MODL_ask_list_item", CallingConvention = CallingConvention.Cdecl,CharSet = CharSet.Ansi)]
internal static extern int UF_MODL_ask_list_item(IntPtr list, int index, out NXOpen.Tag @object); [DllImport("libufun.dll", EntryPoint = "UF_MODL_delete_list", CallingConvention = CallingConvention.Cdecl,CharSet = CharSet.Ansi)]
internal static extern int UF_MODL_delete_list(out IntPtr list); [DllImport("libufun.dll", EntryPoint = "UF_MODL_delete_loop_list", CallingConvention = CallingConvention.Cdecl,CharSet = CharSet.Ansi)]
internal static extern int UF_MODL_delete_loop_list(out IntPtr list); internal struct _loop_list
{
public int type;
public IntPtr edge_list;
public IntPtr next;
} public struct LoopList
{
/// <summary>
/// Peripheral=1, Hole=2, Other=3
/// </summary>
public int Type;
public NXOpen.Tag[] EdgeList;
}
}

  

NX Open,怎样取到面的环LOOP的更多相关文章

  1. wineshark分析抓取本地回环包

    wineshark分析抓取本地回环包 摘要 由于windows系统没有提供本地回环网络的接口,用Wireshark监控网络的话看不到localhost的流量.想要获取本地的网络数据包,可以通过一款小巧 ...

  2. wireshark抓取本地回环及其问题

    一:The NPF driver isn't running 这个错误是因为没有开启NPF服务造成的. NPF即网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap ...

  3. List<List<model>>如何更快捷的取里面的model?

    访问接口返回数据类型为List<List<model>>,现在想将其中的model插入数据库,感觉一点点循环有点傻,0.0...,各位有没有其他的方法? List<Lis ...

  4. Wireshark抓取本地回环接口数据包 RawCap.exe

    Wireshark提供了winpcap可以抓取远程网卡数据包...但我尝试了不成功.后来发现RawCap.exe不仅可以抓取回环接口数据包,远程跑了拿到pcap文件再打开用起来比winpcap更方便最 ...

  5. wireshark抓取本地回环及其问题 转摘:http://www.cnblogs.com/luminji/p/3503464.html

    一:The NPF driver isn’t running 这个错误是因为没有开启NPF服务造成的. NPF即网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap ...

  6. windows下使用wineshark分析抓取本地回环包

    ## 摘要 由于windows系统没有提供本地回环网络的接口,用Wireshark监控网络的话看不到localhost的流量. 想要获取本地的网络数据包,可以通过一款小巧的开源软件RawCap来进行抓 ...

  7. RawCap抓取本地回环接口数据包

    RawCap.exe --help ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 D: ...

  8. NX二次开发-获取面的法向向量UF_MODL_ask_face_data

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <u ...

  9. NX二次开发-获取面的外围边和孔槽边

    函数: UF_MODL_ask_face_loops()  获取面的所有封闭边组合(多组edge) UF_MODL_ask_loop_list_count() 获取loop的数量(面上孔.槽的数量+1 ...

随机推荐

  1. NX二次开发-使用NXOPEN C++向导模板做二次开发

    版本 NX9+VS2012 1.怎么往VS软件里添加VC,C#,VB向导模板 先到NX安装目录下UGOPEN文件夹里找到这三个文件夹 拷贝到VS的安装目录下 这里有几个注意事项,VS2017,VS20 ...

  2. Mysql常用基础命令操作

    常见操作命令:1.连接Mysql (客户端工具NaviCat.phpMyAdmin.MySQL-Front)格式: mysql -h 主机地址 -u用户名 -p用户密码(1)连接到本机上的MYSQL. ...

  3. 性能测试工具JMeter 基础(八)—— 测试元件: 逻辑控制器之事物控制器

    事物控制器是将控制器下的所有取样器作为一个事物统计.分析 事物控制器(Transaction Controller) 事务控制器一共有两个选项: Generate parent sample:默认不勾 ...

  4. 安全测试工具(1)- Burp Suite Pro的安装教程

    啥是Burp Suite 用于攻击web 应用程序的集成平台 程序员必备技能,不仅可以拿来做渗透测试.漏洞挖掘还能帮助程序员调试程序 Bug 它包含了许多Burp工具,这些不同的burp工具通过协同工 ...

  5. go build 与go install

    相同点都能生成可执行文件 不同点go build 不能生成包文件, go install 可以生成包文件go build 生成可执行文件在当前目录下, go install 生成可执行文件在bin目录 ...

  6. 理解MySQL回表

    回表就是先通过数据库索引扫描出数据所在的行,再通过行主键id取出索引中未提供的数据,即基于非主键索引的查询需要多扫描一棵索引树. 因此,可以通过索引先查询出id字段,再通过主键id字段,查询行中的字段 ...

  7. axios与vue-resource

    在Vue项目中前后端交互时,早期Vue使用Vue-resource实现异步请求.从Vue2.0之后就不再对vue-resource进行更新,Vue官方推荐使用axios. vue-resource V ...

  8. webgl 图像处理2---图像传输

    webgl 图像处理 webgl 不仅仅可以用来进行图形可视化, 它还能进行图像处理 图像处理2---图像传输 之前已经进行了点和 uv 数据的传输 webgl 进行图形处理的第二步: 传输图片到 G ...

  9. MapReduce原理深入理解(一)

    1.MapReduce概念 1)MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. 2)MapReduce是分布式运行的,由两个阶段组成:Map和R ...

  10. Shell系列(20)- 字符截取命令cut

    前言 grep是按行提取:cut默认是通过制表符,按列提取,不能识别用空格作为分隔符 语法 cut [选项] [文件] 选项 -f :列号,截取哪几列数据,多个列号用逗号隔开:列与列之间默认用TAB制 ...