iCAx开思网

标题: NXOpen-VB.net开发实例 [打印本页]

作者: vodka    时间: 2005-10-11 07:19
标题: NXOpen-VB.net开发实例
这是一个用NX3 Journal做开发的一个小例子。用VB.net语言简单直观易学好用。

一个NX的用户提出他们希望在Sketch里增加一个功能,做一个整圆与三条曲线(或直线)向切。NX3 做这样的功能需要三步。1 做个三处相切的Fillet,2 延长圆弧变成整圆,3 加三个相切约束。大多数用户可以接受这样的Workflow,我的客户每天要做几十个这样的“三切圆” 。他们不希望生活过的那末单调憋抑

小菜一碟,对于本坛子里许多江湖高手来说,C#,C++,.....十八般武艺,条条大路通罗马......用Journal功能来生成VB代码最适合像我这样的懒人了

先做一个草图作为项目的起点
作者: vodka    时间: 2005-10-11 07:31
标题: 看看Journal能做什么
到Tools->Journal下面打开纪录开关,开始记录
在草图里做一个倒圆弧(Fillet), 不要打开自动裁剪开关
回到Tools->Journal下面停止纪录。用Alt+F11看看都是些什么

' NX 3.0.1.1
Option Strict Off
Imports System
Imports NXOpen

Module NXJournal
Sub Main

Dim theSession As Session = Session.GetSession()
' ----------------------------------------------
'   Menu: Insert->Fillet...
' ----------------------------------------------
Dim session_UndoMarkId1 As Session.UndoMarkId
session_UndoMarkId1 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Profile short list")

Dim session_UndoMarkId2 As Session.UndoMarkId
session_UndoMarkId2 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Sketch Fillet")

Dim curve1 As Curve = CType(theSession.ActiveSketch.FindObject("Curve Arc2"), Curve)
Dim curve2 As Curve = CType(theSession.ActiveSketch.FindObject("Curve Line1"), Curve)
Dim curve3 As Curve = CType(theSession.ActiveSketch.FindObject("Curve Arc1"), Curve)

Dim point3d1 As Point3d = New Point3d(-16.3587812762339, 12.1731575031805, 0.0)
Dim point3d2 As Point3d = New Point3d(21.5496698208353, 12.2482013341624, 0.0)
Dim point3d3 As Point3d = New Point3d(-10.1078964615615, -17.8791243960493, 0.0)


Dim arcArray1() As Arc
Dim sketchConstraintArray1() As SketchConstraint
arcArray1 = theSession.ActiveSketch.Fillet(curve1, curve2, curve3, point3d1, point3d2, point3d3, 362.079613989109, Sketch.TrimInputOption.False, Sketch.DeleteThirdCurveOption.False, Sketch.CreateDimensionOption.False, Sketch.AlternateSolutionOption.False, sketchConstraintArray1)

theSession.ActiveSketch.Update()

' ----------------------------------------------
'   Menu: Tools->Journal->Stop
' ----------------------------------------------

End Sub
End ModuleSample Text

[ 本帖最后由 vodka 于 2005-10-12 13:59 编辑 ]
作者: vodka    时间: 2005-10-11 07:36
可以看出来

Dim arcArray1() As Arc
arcArray1 = theSession.ActiveSketch.Fillet(curve1, curve2, curve3, point3d1,...............1)

做了一条圆弧
Life is easy
作者: vodka    时间: 2005-10-11 15:20
标题: 选取管理 Selection manager
调用以上函数就会做出一条圆弧。需要先喂给它三条曲线对象(NXObject)和三个参照点(helpPoint).在捕捉下来的VB代码里它们是死代码(Hardcoded). 为了在别的场合重复这个过程来创建一条三切圆弧,我们需要一段选取用的子程序。这里是一段简单的子程序代码

Sub SelectCurve(ByRef selectedObject As NXObject, ByRef helpPoint As Point3d)

        Dim ui As UI = ui.GetUI

        Dim message As String = "Select curve"
        Dim title As String = "Selection"

        Dim scope As Selection.SelectionScope = Selection.SelectionScope.WorkPart
        Dim keepHighlighted As Boolean = True
        Dim includeFeatures As Boolean = True
        Dim response As Selection.Response
        Dim selectionAction As Selection.SelectionAction = Selection.SelectionAction.ClearAndEnableSpecific

        response = ui.SelectionManager.SelectObject(message, title, scope, false, false, selectedObject, helpPoint)
        If response = Selection.Response.Cancel Or response = Selection.Response.Back Then
            Return
        End If
    End Sub

反正是段子程序,到时候调用就行了
作者: vodka    时间: 2005-10-11 15:44
标题: 初试牛刀
用这段子程序替换掉原来代码中的硬代码就可以回到NX3测试一下下了。
我一直是直接使用UG的,好多年了吧。写Code还是好多年前做学生时候的事情了,心里有点悬
言归正传,回到NX3, 进入Sketch,做三条线用来做相切的对象。然后到Tools->Journal->Play
成了,于是信心大增

[ 本帖最后由 vodka 于 2005-10-12 14:01 编辑 ]
作者: vodka    时间: 2005-10-11 16:04
头上的两个Imports 用来说明对象的名称空间(Name Space, 我也不知道确切地应该叫什么,有点难为情,...本来我就不是学Computer Science的)
然后是Get Session. 这些都是固定的套路了
忘记说了,Windows O/S 要先安装.NET FrameWork

然后我要查查看怎么找到圆心和半径
作者: vodka    时间: 2005-10-12 03:42
打开NX3 Help library->NX Open->NX Open for .NET->Reference Guide
在NXOpen下面,有个Arc Class,它有一些属性(properties). 顺着往下找,可以找到
中心点 CenterPoint As Point3d
圆弧半径 Radius As Double
Point3d 和 Double 都是NX 德DataType
查圆弧中心和半径的语句就有了

Dim centerpoint1 As Point3d = arcArray1(0).CenterPoint
Dim radius1 As Double = arcArray(0).Radius

看看, VB真是懒人的语言啊
作者: vodka    时间: 2005-10-13 04:32
标题: 怎么做个整圆
再回到Sketch, 用圆心和半径的方式作个圆。用Journal把Code抓出来看看

Dim point3d1 As Point3d = New Point3d(-9.93871664596234, 9.27613553623151, 0.0)
Dim nXMatrix1 As NXMatrix = CType(theSession.Parts.Work.NXMatrices.FindObject("WCS"), NXMatrix)

Dim arc1 As Arc
arc1 = theSession.Parts.Work.Curves.CreateArc(point3d1, nXMatrix1, 18.753796202917, 0.0, ( 360.0 * Math.Pi/180.0))
圆心和半径在这段代码里面是hardcode.用上面的两行代码替换就行叻
作者: vodka    时间: 2005-10-13 04:39
标题: 两段代码合起来就成了
Dim centerpoint1 As Point3d = arcArray1(0).CenterPoint
Dim radius1 As Double = arcArray(0).Radius

Dim nXMatrix1 As NXMatrix = CType(theSession.Parts.Work.NXMatrices.FindObject("WCS"), NXMatrix)

Dim arc1 As Arc
arc1 = theSession.Parts.Work.Curves.CreateArc(centerpoint1, nXMatrix1, radius1, 0.0, ( 360.0 * Math.Pi/180.0))

这样的编程太容易了吧
作者: vodka    时间: 2005-10-13 05:05
然后把先前的Fillet删了

Dim errorList1 As ErrorList
errorList1 = theSession.ActiveSketch.DeleteObjects(arcArray1)
errorList1.Dispose()

当然,这段代码也是Journal出来的
作者: liang64    时间: 2005-10-15 21:54
先顶顶,再学习,不明再请教
作者: vodka    时间: 2005-10-18 06:50
标题: 写入日志
可以用这个语句往SysLog文件里添加纪录
theSession.LogFile.WriteLine(“char strings")

[ 本帖最后由 vodka 于 2005-10-18 06:54 编辑 ]
作者: vodka    时间: 2005-10-18 06:59
标题: 错误捕捉
Try语句块可以用来保护出错。这是一段实例

Dim arcArray1() As Arc
Dim sketchConstraintArray1() As SketchConstraint
Try
arcArray1 = theSession.ActiveSketch.Fillet(obj1, obj2, obj3, helpPoint1, helpPoint2, helpPoint3, _
                                           1.0,                                                  _
                                           Sketch.TrimInputOption.False,                         _
                                           Sketch.DeleteThirdCurveOption.False,                  _
                                           Sketch.CreateDimensionOption.False,                   _
                                           Sketch.AlternateSolutionOption.False,                 _
                                           sketchConstraintArray1)

Catch exc As NXException
MessageBox.Show("Select 3 curves for tangential constaints " & exc.Message)
theSession.LogFile.WriteLine(exc.Message )
End Try

作者: hisenbo    时间: 2005-10-27 12:26
受教了!谢谢,可是我的VB基础都忘了很多了,看来得从头来学过了
作者: zml82    时间: 2005-10-27 12:41
受益非浅
作者: xinghesnak    时间: 2005-10-27 15:47
八错,VBA开发是容易上手的,顶一下!
作者: zhangcanwei    时间: 2006-10-15 11:58
有一段时间没到这里来了,  顶一下。
用vb.net对ug编程,现在才刚刚开始,都是菜鸟。象 vodka这样的高手太少了。以后还要放出来更多的“料”啊,我饥饿难耐呢
作者: zzrxt    时间: 2006-10-15 17:27
谢谢楼主指点,受益非浅!
作者: 昆山人    时间: 2006-10-16 15:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: 昆山人    时间: 2006-10-16 16:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: vodka    时间: 2006-10-17 02:28
在Visual Studio的Solution Explorer里,选Project下面的References, MB3选Add References, 在.NET里选System.Windows.Forms, 再OK就行了
作者: zzrxt    时间: 2006-10-17 08:10
请教 vodka大叔(呵呵,好像只有韩国妹妹才这样叫的。。。),为何我运行日记时弹出如图报警:
是不是像你前面的贴子所说,Windows O/S 要先安装.NET FrameWork,这个东东是什么玩意儿,我的系统一装就是这样啊,不知道怎么搞啊,麻烦你帮我解疑。。谢谢!
作者: 昆山人    时间: 2006-10-17 08:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: 昆山人    时间: 2006-10-17 09:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: haiyanwuya    时间: 2010-3-11 22:09
受益非浅 ,谢谢楼主,期待你的作品
作者: lgmsddy    时间: 2010-3-14 07:36
要顶……………………
作者: hzengchai    时间: 2010-8-20 12:21
受教了!谢谢
作者: hello_icax    时间: 2010-8-20 14:12
顶!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VB高手,能否给本人指点若干?
本人之前提的几个问题都是与vb.NET有关的.
可惜一直没有找到答案.
不知,兄台可否帮助一把.不胜感激!

https://www.icax.org/519972p1p1
作者: hello_icax    时间: 2010-8-20 14:24
晕!
没看清,楼主是05年发的贴。
有人顶,却不知有没有实际意义。
作者: CHTKA    时间: 2010-8-30 21:43
谢谢楼主分享!!!




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