iCAx开思网

标题: VB.NET FOR UG 二次开发 教程(附全部源码)--.NET 开发的里程碑 [打印本页]

作者: 苏州人    时间: 2009-9-15 16:13
标题: VB.NET FOR UG 二次开发 教程(附全部源码)--.NET 开发的里程碑
先做一个小广告,希望斑竹不要生气哦。。哈。。下面是我可以提供的服务,如果苏州有公司需求的话请联系我 Q:191269819,手机:13812950814

1 UG标准化定制: 根据公司标准需求,定制UG的默认设置,统一公司标准
2 UG标准件库开发: 根据公司设计和开发的需求,开发和维护标准件库
3 UG CAD 二次开发:根据公司的设计流程,开发能提高设计效率的程序
4 UG CAM 二次开发:根据公司的加工标注和流程,定制和开发适合于CAM的模版和程序
5 QC CMM检测系统:根据公司的设计,加工和检测流程,在UG中开发出测量工具,方便CMM系统自动检测数据
6 工厂使用工具的开发::如给NCEDM使用的一些工具


教程的主要内容为:
1.怎么创建对象(5个例子)
2.怎么选择对象(5个例子)
3.怎么搜索对象(5个例子)
。。以后再补充。。

本帖最后由 苏州人 于 2009-9-22 16:28 编辑
作者: 苏州人    时间: 2009-9-15 16:13
第一个例子:怎样用VB.NET在UG中创建一个点?
Option Strict Off

Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.UI
Imports NXOpen.Utilities

Module CreatePoint

    Dim s As Session = Session.GetSession()
    Dim ufs As UFSession = UFSession.GetUFSession()

    Sub Main()

        Dim sp As New Point3d(0, 0, 0)

        Dim thePoint As Point = s.Parts.Work.Points.CreatePoint(sp)

    End Sub

    Public Function GetUnloadOption(ByVal dummy As String) As Integer

        GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY

    End Function

End Module

有问题欢迎提问。。。。

本帖最后由 苏州人 于 2009-9-16 16:52 编辑
作者: 苏州人    时间: 2009-9-16 16:51
第二个例子:怎样用VB.NET在UG中创建一个条线?

Option Strict Off  

Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.UI
Imports NXOpen.Utilities

Module template_code

  Dim s As Session = Session.GetSession()

Sub Main()

  Dim sp As New Point3d(0, 0, 0)
  Dim ep As New Point3d(10, 10, 0)

  Dim theLine As Line = s.Parts.Work.Curves.CreateLine(sp, ep)

        
End Sub

  Public Function GetUnloadOption(ByVal dummy As String) As Integer

      GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY

  End Function

End Module
作者: LIUCHANGLIN    时间: 2009-9-17 13:08
不错,希望老大出一点,
作者: lgmsddy    时间: 2009-9-18 07:37
老大,你发的太少了,不舍得传授啊
作者: 苏州人    时间: 2009-9-18 10:10
第三个例子:怎样用VB.NET在UG中创建一个圆柱,然后更改它的颜色?

Option Strict Off  
Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.UI
Imports NXOpen.Utilities

Module create_a_cylinder_and_set_color

    Sub Main()

        Dim s As Session = Session.GetSession()
        Dim ufs As UFSession = UFSession.GetUFSession()

        Dim wp As Part = s.Parts.Work()

        Dim cyl_feat_tag As NXOpen.Tag
        Dim orig() As Double = {1, 1, 0}
        Dim dir() As Double = {1, 1, 1}

        ufs.Modl.CreateCylinder(FeatureSigns.Nullsign, Nothing, orig, "50", _
            "25", dir, cyl_feat_tag)

        Dim cyl_body_tag As NXOpen.Tag

        ufs.Modl.AskFeatBody(cyl_feat_tag, cyl_body_tag)
        Dim cyl_body As Body = CType(NXObjectManager.Get(cyl_body_tag), Body)

        MsgBox("Color change", MsgBoxStyle.Information, "Current Operation:")
        cyl_body.Color = 3
        cyl_body.RedisplayObject()

        s.Preferences.ScreenVisualization.FitPercentage = 95
        wp.Views.WorkView.Fit()


  end Sub

    Public Function GetUnloadOption(ByVal dummy As String) As Integer

        GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY

    End Function

End Module

本帖最后由 苏州人 于 2009-9-18 10:11 编辑
作者: zhangcanwei    时间: 2009-9-18 17:50
支持一下,我提个问题。比如一个大圆内,有两个互不相连的小圆,同时选中这三个圆,然后生成一个平的面,结果是一个大圆面上有两个圆孔。

  用NX的命令很容易实现,二次开发如何实现呢?能否给个函数?
作者: 苏州人    时间: 2009-9-19 13:45
你说的我不是特别理解,下面按我理解的解释吧
我感觉你的结果是要做一个圆柱,然后上面有两个孔吧?

其实二次开发是按照手动建模的步骤去设计的,针对你这个问题
(1)选择三个圆,记下这三个圆的TAG
(2)用ufs.Modl.createextruded() 函数分别去实现这三个圆的拉伸,结果为三个圆柱Cy1,Cy2,Cy3
(3)用ufs.Modl.subtractBodies()在Cy1去减去Cy2,Cy3就可以了。

不过需要注意的是用ufs.Modl.subtractBodies()中的两个参数是body tag,而不是feat tag,需要把feat tag 转化成body tag 用这个函数 ufs.Modl.AskFeatBody( ,  )

用ufs.modl.create...()函数做出来的tag都是feat tag.....
作者: 苏州人    时间: 2009-9-19 13:48
第四个例子:怎样用VB.NET在UG中创建注释?

Option Strict Off  

Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.UI
Imports NXOpen.Utilities

Module create_note

  Dim s As Session = Session.GetSession()
  Dim ufs As UFSession = UFSession.GetUFSession()

Sub Main()

    Dim theNote As NXOpen.Tag
Try
    Dim workPart As Part = s.Parts.Work
    Dim workPartTag As NXOpen.Tag = workPart.Tag

Catch ex As Exception
    ufs.Ui.OpenListingWindow()
    ufs.Ui.WriteListingWindow(ex.GetBaseException.ToString())
    ufs.Ui.WriteListingWindow(vbCrLf & "+++ Work Part Required" & vbCrLf)
    Return
End Try


    Dim num_lines As Integer = 2
    Dim textString As String() = {"This is the first line.", _
                                  "This is the second line."}
    Dim origin_3d() As Double = {6, 6, 0}
    Dim orientation As Integer = 0 ' zero is Horizontal, 1 is Vertical

Try

    ufs.Drf.CreateNote(num_lines, textString, origin_3d, _
                    orientation, theNote)

Catch ex As Exception
    ufs.Ui.OpenListingWindow()
    ufs.Ui.WriteListingWindow(ex.GetBaseException.ToString())
    ufs.Ui.WriteListingWindow(vbCrLf & "+++ Note not created" & vbCrLf)
End Try

End Sub

  Public Function GetUnloadOption(ByVal dummy As String) As Integer

      GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY

  End Function

End Module
作者: 苏州人    时间: 2009-9-21 15:06
第五个例子:怎样用VB.NET在UG中创建两个体然后做布尔加操作?

Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.UI
Imports NXOpen.Utilities

Module template_code

Sub Main()

  Dim s As Session = Session.GetSession()
  Dim ufs As UFSession = UFSession.GetUFSession()

  '
  ' ------------------------------------------------- make sure we have a part
  Dim this_part As NXOpen.Tag
Try
  this_part = s.Parts.Work.Tag
Catch ex As Exception

  If this_part = NXOpen.Tag.Null Then
    MsgBox("You need an open part to run this program.", MsgBoxStyle.OKOnly)
    ' no part, so exit program gracefully
    Exit Sub
  End If

End Try

  '
  ' ------------------------------------------------- first solid: a block

  Dim corner_pt(2) As Double
  Dim block_feat_tag As NXOpen.Tag
  Dim edge_lengths(2) As String

  ' This is an alternate way to set the string value:
  '
  'Dim lengths(2) As Double
  'lengths(0) = 150.1234
  'edge_lengths(0) = lengths(0).ToString
  '
  ' but setting it this way, we get the expression to boot:

  edge_lengths(0) = "xlen=150.1234"
  edge_lengths(1) = "ylen=65.4321"
  edge_lengths(2) = "thickness=25."

  Dim sign As FeatureSigns

  sign = FeatureSigns.Nullsign

  corner_pt(0) = 20
  corner_pt(1) = 30
  corner_pt(2) = -10

  ufs.Modl.CreateBlock1(sign, corner_pt, edge_lengths, block_feat_tag)

  If block_feat_tag <> NXOpen.Tag.Null Then
    ufs.View.FitView(NXOpen.Tag.Null, 1.0)
    MsgBox("First Solid Body tag is: " & block_feat_tag.ToString)
  End If

  '
  ' ------------------------------------------------- second solid: a cylinder

  Dim height As String
  Dim diameter As String
  Dim direction(2) As Double
  Dim cyl_feat_tag As NXOpen.Tag

  height = "cyl_height=90"
  diameter = "cyl_dia=40"

  direction(0) = 0.707
  direction(1) = 0.707
  direction(2) = 0.707

  ufs.Modl.CreateCyl1(sign, corner_pt, height, diameter, direction, cyl_feat_tag)

  If cyl_feat_tag <> NXOpen.Tag.Null Then
    ufs.View.FitView(NXOpen.Tag.Null, 1.0)
    MsgBox("Second Solid Body tag is: " & cyl_feat_tag.ToString)
  End If

  '
  ' ------------------------------------------------- unite the two solids

  Dim block_body_tag As NXOpen.Tag
  Dim cyl_body_tag As NXOpen.Tag

  ufs.Modl.AskFeatBody(block_feat_tag, block_body_tag)
  ufs.Modl.AskFeatBody(cyl_feat_tag, cyl_body_tag)

  ufs.Modl.UniteBodies(block_body_tag, cyl_body_tag)

  '
  ' ------------------------------------------------- report count of solids

  Dim all_bodies() As Body = s.Parts.Work.Bodies.ToArray()
  Dim body_count As Integer

  body_count = all_bodies.Length

  MsgBox("Count of Bodies now in Work Part: " & body_count)

End Sub

  Public Function GetUnloadOption(ByVal dummy As String) As Integer

      GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY

  End Function

End Module

>>>关于创建方面的开发到此为止

本帖最后由 苏州人 于 2009-9-21 15:07 编辑
作者: 苏州人    时间: 2009-9-22 16:26
第六个例子:怎样用VB.NET在UG中选择一个体?
Option Strict Off

Imports System

Imports NXOpen
Imports NXOpen.UI
Imports NXOpen.Utilities
Imports NXOpen.UF

Module select_a_body_demo

  Dim s As Session = Session.GetSession()
  Dim ufs As UFSession = UFSession.GetUFSession()

Sub Main()
    Dim body As NXOpen.Tag

    While select_a_body(body) = Selection.Response.Ok

        MsgBox("Body Tag:" & body.ToString())

        ufs.Disp.SetHighlight(body, 0)

    End While

    End Sub

Function select_a_body(ByRef body As NXOpen.Tag) As Selection.Response

    Dim message As String
    Dim title As String = "Select a body"
    Dim scope As Integer = UFConstants.UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY
    Dim response As Integer
    Dim obj As NXOpen.Tag
    Dim view As NXOpen.Tag
    Dim cursor(2) As Double
    Dim ip As UFUi.SelInitFnT = AddressOf init_proc

    ufs.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)

    Try
        ufs.Ui.SelectWithSingleDialog(message, title, scope, ip, _
                     Nothing, response, body, cursor, view)
    Finally
         ufs.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)
    End Try

    If response <> UFConstants.UF_UI_OBJECT_SELECTED And _
       response <> UFConstants.UF_UI_OBJECT_SELECTED_BY_NAME Then
        Return Selection.Response.Cancel
    Else
        Return Selection.Response.Ok
    End If

    End Function

Function init_proc(ByVal select_ As IntPtr, _
                       ByVal userdata As IntPtr) As Integer

    Dim num_triples As Integer = 1
    Dim mask_triples(0) As UFUi.Mask
    mask_triples(0).object_type = UFConstants.UF_solid_type
    mask_triples(0).object_subtype = UFConstants.UF_solid_body_subtype
    mask_triples(0).solid_type = UFConstants.UF_UI_SEL_FEATURE_BODY

    ufs.Ui.SetSelMask(select_, _
                       UFUi.SelMaskAction.SelMaskClearAndEnableSpecific, _
                       num_triples, mask_triples)
    Return UFConstants.UF_UI_SEL_SUCCESS

End Function

Public Function GetUnloadOption(ByVal dummy As String) As Integer

    GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY

End Function

End Module
作者: procamcae    时间: 2009-9-22 18:58
老大不愧是老大啊,高手~~
作者: lgmsddy    时间: 2009-9-22 20:07
再顶一下…………
作者: zhangcanwei    时间: 2009-9-23 07:09
苏州人 发表于 2009-9-19 13:45
你说的我不是特别理解,下面按我理解的解释吧
我感觉你的结果是要做一个圆柱,然后上面有两个孔吧?

其实二次开发是按照手动建模的步骤去设计的,针对你这个问题
(1)选择三个圆,记下这三个圆的TAG
(2)用u ...


就是附图中所示的图标的对应函数,很久也没有找到
作者: zjh_133    时间: 2009-9-23 14:38
顶你,额楼主可以上传些关于VB.NET开发的资料吗?
作者: zjh_133    时间: 2009-9-23 14:40
继续支持楼主!!!
作者: zhangcanwei    时间: 2009-9-23 17:42
楼主发的已经是VB.NET开发的资料了,最基本的程序框架已经出来了。再往下就是API函数的具体应用了。强烈支持!可惜我不是版主,否则,我将给你加N个积分
    楼主是哪里的高人?都知道真人不露面
作者: 苏州人    时间: 2009-9-23 20:39
17# zhangcanwei

是的.net开发的框架已经出来了,下面发的都是一些比较实际的运用了。。
看我的ID就知道啦。。哈。。
作者: liujingcheng    时间: 2009-9-24 15:14
我来向楼主请教一个问题,吧,这个问题困扰了我很长时间,希望楼主能帮我解答一下。

如何用 VB.net 语言,做UG里面的 阵列?比如,我们在UG里面的 A点(100,100,0)做出一个直径为10,高度为20的圆柱体,现在我想将该圆柱体绕 Z轴 阵列 10个,请问楼主,这该怎么做啊?

如果楼主或者是 论坛里面的朋友能有任何的想法,可以加一下我的QQ:935507450,我们共同探讨UG的二次开发工作,谢谢大家!!
作者: liujingcheng    时间: 2009-9-24 15:18
补充一下,我知道 UG里面有阵列的命令按钮,可以实现阵列的命令。
但是现在我不想用UG自带的这个命令,我想通过UG的二次开发工作,做到破解 UG自带的阵列,也就是说,做出一个按钮,这个按钮可以实现需要的某一项功能,包括阵列。
这样,我们就不需要每一次都去点击UG下的按钮来实现需要的功能了
作者: 苏州人    时间: 2009-9-24 18:10
20# liujingcheng

很简单,首先你用的是阵列的功能,那就到API里去找到阵列的函数:
有两个:
(1)UF_MODL_create_circular_iset()做圆周阵列
(2)UF_MODL_create_linear_iset()做线性阵列

然后就去调试这两个函数就可以了。。不要说不会调试。。这个是做开发最基本的事情
按照你的问题,应该是用第一个函数的,你试试看去。。。不管怎么样,先把这两个函数调试成功再说,如果有不明白的话再问我
作者: caiyu0    时间: 2009-9-25 11:20
强烈期待你的创建对象和搜索对象
作者: 苏州人    时间: 2009-9-25 13:52
创建对象已经做完了。。。 22# caiyu0
作者: 苏州人    时间: 2009-9-25 14:01
第七个例子:怎样用VB.NET在UG中选择一个面?

Option Strict Off

Imports System

Imports NXOpen
Imports NXOpen.UI
Imports NXOpen.Utilities
Imports NXOpen.UF

Module select_a_face_demo

  Dim s As Session = Session.GetSession()
  Dim ufs As UFSession = UFSession.GetUFSession()

Sub Main()
    Dim face As NXOpen.Tag

    While select_a_face(face) = Selection.Response.Ok

        MsgBox("Face Tag:" & face.ToString())

        ufs.Disp.SetHighlight(face, 0)

    End While

    End Sub

Function select_a_face(ByRef face As NXOpen.Tag) As Selection.Response

    Dim message As String
    Dim title As String = "Select a FACE"
    Dim scope As Integer = UFConstants.UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY
    Dim response As Integer
    Dim obj As NXOpen.Tag
    Dim view As NXOpen.Tag
    Dim cursor(2) As Double
    Dim mask_face As UFUi.SelInitFnT = AddressOf mask_for_faces

    ufs.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)

    Try
        ufs.Ui.SelectWithSingleDialog(message, title, scope, mask_face, _
                     Nothing, response, face, cursor, view)
    Finally
         ufs.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)
    End Try

    If response <> UFConstants.UF_UI_OBJECT_SELECTED And _
       response <> UFConstants.UF_UI_OBJECT_SELECTED_BY_NAME Then
        Return Selection.Response.Cancel
    Else
        Return Selection.Response.Ok
    End If

    End Function

Function mask_for_faces(ByVal select_ As IntPtr, _
                       ByVal userdata As IntPtr) As Integer

    Dim num_triples As Integer = 1
    Dim mask_triples(0) As UFUi.Mask
    mask_triples(0).object_type = UFConstants.UF_solid_type
    mask_triples(0).object_subtype = UFConstants.UF_solid_face_subtype
    mask_triples(0).solid_type = UFConstants.UF_UI_SEL_FEATURE_ANY_FACE

    ufs.Ui.SetSelMask(select_, _
                       UFUi.SelMaskAction.SelMaskClearAndEnableSpecific, _
                       num_triples, mask_triples)
    Return UFConstants.UF_UI_SEL_SUCCESS

End Function

Public Function GetUnloadOption(ByVal dummy As String) As Integer

    GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY

End Function

End Module
作者: lgmsddy    时间: 2009-9-26 07:37
老大:我是菜鸟,你可以帮我解答一个问题么?
库缺少需要的入口函数,是怎么回事?如何解决?万分感谢
作者: 苏州人    时间: 2009-9-26 10:15
如果是.net的话,在解决方案浏览器中的引用中添加UGII\managed 目录下面的五个dll,然后在程序的开头部分,如我上面的,添加imports...就可以了
作者: UG008    时间: 2009-9-28 09:44
file:///f:/未命名.bmp
作者: UG008    时间: 2009-9-28 09:49
f:\未命名.bmp
请看图片,按照图片步骤做就可以了
作者: UG008    时间: 2009-9-28 09:56
请看附件中的图片,按照图片步骤做就可以了
作者: caiyu0    时间: 2009-9-28 10:03
26# 苏州人

C#.net用的是using
作者: 苏州人    时间: 2009-9-28 13:12
30# caiyu0


正解。。我说的是VB.NET的开发
作者: lgmsddy    时间: 2009-9-30 00:11
谢谢,我鼓捣出来了,非常感谢
作者: lgmsddy    时间: 2009-10-4 08:07
只要努力,我相信会成功
作者: wangxunming    时间: 2009-10-6 18:01
非常感谢分享,我是菜鸟,刚刚学,对C#还行,UG二次开发就....
请问一下用VB.net就使用NX5_VB向导来创建项目
如果是C#呢,怎么找此类似文件和怎么加载到C#中呢?
非常感谢!!!!
作者: wangxunming    时间: 2009-10-6 18:01
非常感谢分享,我是菜鸟,刚刚学,对C#还行,UG二次开发就....
请问一下用VB.net就使用NX5_VB向导来创建项目
如果是C#呢,怎么找此类似文件和怎么加载到C#中呢?
非常感谢!!!!
作者: 苏州人    时间: 2009-10-7 08:52
35# wangxunming

.NET 开发应该都差不多,C#我没有做过,但是估计都一样,你先试试看。。或者看看帮助文档

================
Creating a Project

作者: caiyu0    时间: 2009-10-8 12:56
楼主是否能够告诉我怎样实现UIStyler生成的窗体与C#语言之间的衔接,也就是怎样用C#处理UIStyler的信息,VB代码的实现也可以,只要一个小例子就可以了,谢谢
作者: wangxunming    时间: 2009-10-8 23:57
谢谢回复 不过我问的是C#帮ug做二次开发环境怎么搭建?非常感谢!
作者: wangxunming    时间: 2009-10-9 00:01
我准备找一个用C#帮UG做二次开发的老师,不知道哪位高手可愿意教,我对C#还行,如果可以的话,可以付你报酬,当然时间也不用固定的,通常也就帮我回答一些问题就行!联系方式QQ826209196

本帖最后由 wangxunming 于 2009-10-9 00:03 编辑
作者: 苏州人    时间: 2009-10-9 11:48
38# wangxunming

.NET 应该不需要像C或C++那样就设置环境,至少VB.NET是不需要的,按照我上面的提示应该是完全可以做出来的,不过对C#我不敢肯定,因为我没有做过
作者: 苏州人    时间: 2009-10-12 11:41
第八个例子:怎样用VB.NET在UG中选择曲线和边?

Option Strict Off  

Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.UI
Imports NXOpen.Utilities

Module select_curves_or_edges

  Dim s As Session = Session.GetSession()
  Dim ufs As UFSession = UFSession.GetUFSession()

Sub Main()

Dim curves() As NXOpen.Tag
Dim num_curves As Integer
Dim n As String = vbCrLf

    num_curves = select_curves_or_edges("Select Curves or Edges:", curves)

    If (num_curves) > 0 Then
        ufs.Ui.OpenListingWindow()
        ufs.Ui.WriteListingWindow("Selected count: " & num_curves.ToString & n)
    End If

End Sub

Function select_curves_or_edges(ByVal prompt As String, _
                                ByRef curves() As NXOpen.Tag) As Integer

    Dim cnt As Integer = 0
    Dim response As Integer
    Dim inx As Integer = 0
    Dim mask_crvs As UFUi.SelInitFnT = AddressOf mask_for_curves

    ufs.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)

    Try
        ufs.Ui.SelectWithClassDialog(prompt, "Curves:", _
            UFConstants.UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY, _
            mask_crvs, Nothing, response, cnt, curves)
    Finally
        ufs.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)
    End Try

    For inx = 0 To curves.Length - 1
        ufs.Disp.SetHighlight(curves(inx), 0)
    Next

    Return cnt

End Function

Function mask_for_curves(ByVal select_ As IntPtr, _
                       ByVal userdata As IntPtr) As Integer

    Dim num_triples As Integer = 6
    Dim mask_triples(5) As UFUi.Mask

    mask_triples(0).object_type = UFConstants.UF_line_type
    mask_triples(0).object_subtype = 0
    mask_triples(0).solid_type = 0

    mask_triples(1).object_type = UFConstants.UF_circle_type
    mask_triples(1).object_subtype = 0
    mask_triples(1).solid_type = 0

    mask_triples(2).object_type = UFConstants.UF_conic_type
    mask_triples(2).object_subtype = 0
    mask_triples(2).solid_type = 0

    mask_triples(3).object_type = UFConstants.UF_spline_type
    mask_triples(3).object_subtype = 0
    mask_triples(3).solid_type = 0

    mask_triples(4).object_type = UFConstants.UF_point_type
    mask_triples(4).object_subtype = 0
    mask_triples(4).solid_type = 0

    mask_triples(5).object_type = UFConstants.UF_solid_type
    mask_triples(5).object_subtype = 0
    mask_triples(5).solid_type = UFConstants.UF_UI_SEL_FEATURE_ANY_EDGE

    ufs.Ui.SetSelMask(select_, _
                       UFUi.SelMaskAction.SelMaskClearAndEnableSpecific, _
                       num_triples, mask_triples)

    Return UFConstants.UF_UI_SEL_SUCCESS

End Function

  Public Function GetUnloadOption(ByVal dummy As String) As Integer

      GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY

  End Function

End Module
作者: liujingcheng    时间: 2009-10-12 15:01
楼主,你好,我再向你请教一个问题:
如何确定 与两条空间曲线同时相切的圆 的 圆心轨迹?也就是说 如果已知两条曲线的直角坐标方程,如何才能得到 与它们都相切的圆呢?希望楼主能给点建议
希望能得到楼主的 答复
谢谢
作者: liujingcheng    时间: 2009-10-12 15:06
比如上面 我上传的图片,应该如何求解 与两条边界曲线同时相切的圆 的 圆心坐标呢?
作者: UG008    时间: 2009-10-14 09:30
求助使用VB.net修改表达式值的程序书写格式,本人关键不明白怎么样获取实体模型相关的表达式,将值赋给表达式,更新模型
Dim exps as Tag 是1维数组吗?


UF_MOLD_ask_exps_of_part(……..,exps)
Exps 是否表示实体模型全部表达放置到内存里
UF_free(exps)
怎么样释放出来

UF_modl_edit_exp
UF_modl_update
作者: 苏州人    时间: 2009-10-14 12:09
44# UG008

在后面的教程会有表达式方面的实例,请关注!
作者: lank2008    时间: 2009-10-14 15:16
楼主.看了你的文档.对你只能说一个字"好"!
我是用C#来对NX做二次开发.现在我用NX里面用UIstyler做好一个界面以后.用VS2005里面的NX向导打开.
写好代码之后运行时出现"命名空间"NXOpen.UIStyler"中不存在类型或命名空间名称"UnkuownType""
我是用UIStyler导出来的代码.为什么不行呢.而且头文件也都加了.
我的QQ:269737616
作者: lgmsddy    时间: 2009-10-16 07:50
再次感谢楼主
作者: huadong126    时间: 2009-10-16 08:00
高手啊,
我都看不懂,支持一下啊
作者: lb6384    时间: 2009-10-17 13:48
good    good..........
作者: lgmsddy    时间: 2009-10-20 18:35
老大:你好,我遇到个问题,想向您请教。两个体,布尔差运算怎么做,里面有个参数要求be free,我没弄出来,能帮我解答么?不胜感激!!
作者: 苏州人    时间: 2009-10-21 11:48
50# lgmsddy

  Dim block_body_tag As NXOpen.Tag
  Dim cyl_body_tag As NXOpen.Tag

  ufs.Modl.AskFeatBody(block_feat_tag, block_body_tag)
  ufs.Modl.AskFeatBody(cyl_feat_tag, cyl_body_tag)

  ufs.Modl.UniteBodies(block_body_tag, cyl_body_tag)

上面的代码就是做布尔加的,记得block_body_tag, cyl_body_tag 必须是body tag,而不是feat tag,函数ufs.Modl.AskFeatBody()就是把feat tag转化为body tag 的,关于free的问题你看一下哪个参数需要free,如果需要就free掉,有对应的函数的。。自己去找找
作者: lgmsddy    时间: 2009-10-23 07:46
首先对老大标示感谢,布尔加的我会,就是布尔减里面的free,我不会,要不我再试试,都不好意思麻烦大侠了,
作者: UG008    时间: 2009-10-30 13:19
老大你的第六个例子:怎样用VB.NET在UG中选择一个体
存在问题,根本调试不能通过,总是表错
类型设置错误
作者: liujingcheng    时间: 2009-10-30 19:57
楼主,你好,再向你请教一个问题:我现在需要用 VB语言对UG6.0 进行二次开发,在UG里面画出多条线,请问,我该如何实现呢?
当然,我们可以每一条直线分别定义
如:dim line1 as line
dim line1 as line
.......
我现在想通过循环语句实现,我的想法是:
.....
for(i=1;i<N;i++)
dim line(i) as line
....
其他部分省略,我这样做,好象不行,程序调试的时候,出错了,请问,楼主,能否给我点建议呢?
谢谢了.....
作者: zhangcanwei    时间: 2009-10-30 20:39
楼上没有给出具体代码,我估计是没有定义line中的端点坐标数组
作者: liujingcheng    时间: 2009-10-30 20:45
再麻烦一个问题,如何实现同时定义 多个点的x,y坐标值的问题呢?
我的定义是这样的:
.....
for i=1 to M
dim point(i)_x as integer
dim point(i)_y as integer
next  i
.....
可为什么我的定义总是出错呢?我刚开始学习编程序,我不知道那里出错了,希望楼主能指点一下,谢谢
作者: lgmsddy    时间: 2009-10-31 07:31
把代码贴上来
作者: liujingcheng    时间: 2009-10-31 16:33
呵呵,谢谢楼上各位朋友的帮助,上面的问题我已经解决了....

现在 我想问一下,如何利用 vb语言对 UG中的 单选框 进行驱动呢? 换句话说,就是 如果更改了选择项,如何驱动 UG软件 进行识别呢

对于各位朋友的 帮助,再次表示感谢
作者: liujingcheng    时间: 2009-11-1 10:01
最近在进行二次开发的过程中,遇到了一点问题,向大家请教一下,希望大家能给我指点一下,我在旋转的过程中,制定坐标原点为旋转点,可是 却出现了 下面的 情况
Dim point2 As Point = CType(datumCsys1.FindObject("HANDLE R-850"), Point)
我想知道,这个HANDLE R-850,是什么意思?

这种情况不仅出现在 选取点的情况下,在其他的过程中,比如,选择面....都会出现这样的问题

希望 楼主或者是 论坛里面的高手,出来为我指点迷津啊,谢谢了

本帖最后由 liujingcheng 于 2009-11-1 10:03 编辑
作者: liujingcheng    时间: 2009-11-1 10:12
另外,请问 论坛里面的朋友们除了这个论坛之外,是否有其他的 交流的平台,比如QQ群之类的,我感觉,在论坛上请教问题,通常回复的都很慢,希望能与大家多多交流,谢谢
作者: begtostudy    时间: 2009-11-2 09:47
liujingcheng 发表于 2009-11-1 10:12
另外,请问 论坛里面的朋友们除了这个论坛之外,是否有其他的 交流的平台,比如QQ群之类的,我感觉,在论坛上请教问题,通常回复的都很慢,希望能与大家多多交流,谢谢


其实群里回复也很慢……
作者: liujingcheng    时间: 2009-11-2 10:51
61# begtostudy


有群么?兄弟?
我加一下,交流交流
作者: begtostudy    时间: 2009-11-2 18:46
liujingcheng 发表于 2009-11-2 10:51
61# begtostudy  


有群么?兄弟?
我加一下,交流交流


so many,so many

google之
作者: hadk_mold    时间: 2009-11-4 16:01
我是初学者,能请各位高手指教一下我该如何入门吗?
有好点的基础教程,或者注意事项可否告之?
非常感谢!!
作者: 苏州人    时间: 2009-11-9 16:59
54# liujingcheng

这个是编程的语法问题,编程可以这样定义么?
作者: 苏州人    时间: 2009-11-9 17:00
56# liujingcheng

你需要多学习一点编程语法方面的问题。。。这方面我也刚刚会用。。呵呵。。你可以问一下其它人
作者: 苏州人    时间: 2009-11-9 17:01
58# liujingcheng

不大明白什么意思
作者: 苏州人    时间: 2009-11-9 17:04
59# liujingcheng

如果我没有猜错的话你一定是用Journal的方法去得到这个表达式的
你列出的这串号码只有当前你打开的UG中有用,到下一次打开的时候应该就没有用了,你应该要吧这个换成一个你能确定的tag或其他什么标识
作者: liujingcheng    时间: 2009-11-17 15:12
68# 苏州人

谢谢你对我的问题的回复,我已经弄好了....

现在 我又有了一个新的问题:那就是 用VB.net语言对UG进行二次开发的时候,应该如何使用 CreateCircularIset()函数?

我以前问过这个问题,这个 阵列的函数 也是你告诉我的,我现在只是知道这个函数,但是 还是不会应用,不知道 你能否给我一个例子看看,我对于其中的各个参数 应该如何使用还是不了解啊!

谢谢了.......
作者: 苏州人    时间: 2009-11-17 15:46
69# liujingcheng

这个函数没有什么特别的难度,只是需要你去尝试着做。。。。或者你可以先做一下直线阵列。。。都差不多。。。
作者: 苏州人    时间: 2009-11-17 15:48
64# hadk_mold

如果想系统一点学的话,我可以提供有偿帮助,如果只想看看的话,这个帖子你可以参考一下。。
作者: liujingcheng    时间: 2009-11-17 15:53
我没做过,楼主能否给我一点 实例 看看呢?
作者: liujingcheng    时间: 2009-11-17 15:54
楼主啊,你发的什么内容?怎么只有你自己能看到?我们看不到啊....
作者: Bambus    时间: 2009-11-19 15:52
楼主辛苦了!
作者: liushaolong    时间: 2009-11-22 17:34
我是新手,对编程与开发是还没入门,在此来捧个人场
作者: 屠倚龙天    时间: 2009-11-22 21:35
路过的,太麻烦了,看不懂
作者: liujingcheng    时间: 2009-11-24 09:26
楼主,对于 阵列程序的编写 能否给出一个 编写的实例呢?
作者: 苏州人    时间: 2009-11-24 14:04
Dim numX, numY As Integer
Dim disX, disY As Integer

Dim featsTag(0) As Tag
Dim instTag As Tag = Nothing

numX = 2
numY = 3

disX = 30
disY = 20

UFS.Modl.CreateLinearIset(0, numX, disX, numY, disY, featsTag, instTag)

假设只有一个特征所以这样定义   Dim featsTag(0) As Tag  需要赋值
另外, disX,disY 的取值需要小心
featsTag 需要是feat tag....

这个是阵列特征的,与阵列体有点区别的,阵列体最好用translator做。。。。

本帖最后由 苏州人 于 2009-11-24 14:05 编辑
作者: hd726    时间: 2009-11-24 16:54
看不见啊 ?
作者: liujingcheng    时间: 2009-11-25 11:17
恩,很好,谢谢楼主.....
我再研究研究,呵呵
作者: liujingcheng    时间: 2009-11-26 09:01
78# 苏州人

请问一下:“Dim featsTag(0) As Tag  需要赋值”,如何赋值呢?

我是这样做的:

feature_list(0) = CType(workPart.FindObject("subtract(7)"), NXObject)

这里,我想将我做的一个布尔减运算阵列一下,可是,程序显示错误如下 :“NXOpen.NXObject”的值无法转换为“NXOpen.Tag”。
作者: liujingcheng    时间: 2009-11-26 09:01
我想了一下,可是不知道该如何改,希望楼主能 帮个忙,为我指点一下啊,谢谢了.....
作者: 苏州人    时间: 2009-11-26 17:07
NXObject 是对象,而feature_list(0) 是tag ,当然是不能等于的了。。
你可以这样试试:
先把这个特征转化成nxobject对象,然后feature_list(0) =NXObject.tag

或者直接找到这个特征的featTag , 然后feature_list(0) =featTag
作者: 苏州人    时间: 2009-12-1 20:23
自己顶一个。。。
作者: hd726    时间: 2009-12-3 11:24
楼主,有没有一些用open做的对话框的例子啊?
作者: ydfu88    时间: 2009-12-9 13:06
dddddddddddddddd
作者: liujingcheng    时间: 2009-12-17 16:35
帖子是不是被删掉一些了啊?
似乎 少了一些内容呢....
作者: liujingcheng    时间: 2009-12-17 16:37
83# 苏州人

请楼主详细说一下好么?
我对于 这方面的编程 一直不是很懂,谢谢了!!
作者: UG008    时间: 2009-12-27 11:25
有谁知道vb.net为什么没有这个函数UF_ATTR_assign,
有没有其它函数代替他
作者: UG008    时间: 2009-12-27 11:30
请问你怎样把面指针转换成face类型
   Dim face_list(n) As NXOpen.Tag
Dim face As Face
作者: 苏州人    时间: 2009-12-29 20:55
89# UG008

没有的。。有其他方法可以做到的
作者: 苏州人    时间: 2009-12-29 20:55
90# UG008

用CTYPE去转换的
作者: 杜斌    时间: 2010-1-8 13:28
我用C#,创建一个Arc类。
Arc a = new Arc();
结果Arc的构造函数不是public.
如何是好?
我想换成VB语句的话应该是
Dim a As new Arc()
吧。
作者: Wilsonluo    时间: 2010-1-9 02:31
不错,希望老大出一点,
作者: 苏州人    时间: 2010-1-10 16:36
93# 杜斌 是的。。
作者: 苏州人    时间: 2010-1-10 16:36
94# Wilsonluo

最近比较忙。。
作者: zss3208    时间: 2010-1-11 13:32
96# 苏州人
请问用VB开发可以实现对工程图里的矩形添加剖面线吗?具体如何操作啊,我用相关API函数总遇到问题,想看能不换个方法实现。。。多谢了~
作者: 苏州人    时间: 2010-2-20 11:42
97# zss3208   我没有做过,不大清楚,不过建议你换一种方法。。。
作者: lihezhou7998    时间: 2010-3-11 20:33
VB。NET怎么样返回一个用户选中的物体的长宽厚
作者: haiyanwuya    时间: 2010-3-11 21:36
楼主太高了,受益匪浅!!




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3