找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 26999|回复: 29
打印 上一主题 下一主题

NXOpen-VB.net开发实例

[复制链接]
跳转到指定楼层
1
发表于 2005-10-11 07:19:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个用NX3 Journal做开发的一个小例子。用VB.net语言简单直观易学好用。

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

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

先做一个草图作为项目的起点

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1技术 +2 收起 理由
pzytony + 2 原创内容

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-10-11 07:31:07 | 只看该作者

看看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 编辑 ]
3
发表于 2005-10-11 07:36:18 | 只看该作者
可以看出来

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

做了一条圆弧
Life is easy
4
发表于 2005-10-11 15:20:54 | 只看该作者

选取管理 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

反正是段子程序,到时候调用就行了
5
发表于 2005-10-11 15:44:51 | 只看该作者

初试牛刀

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

[ 本帖最后由 vodka 于 2005-10-12 14:01 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

然后我要查查看怎么找到圆心和半径
7
发表于 2005-10-12 03:42:32 | 只看该作者
打开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真是懒人的语言啊
8
发表于 2005-10-13 04:32:56 | 只看该作者

怎么做个整圆

再回到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.用上面的两行代码替换就行叻
9
发表于 2005-10-13 04:39:05 | 只看该作者

两段代码合起来就成了

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))

这样的编程太容易了吧
10
发表于 2005-10-13 05:05:10 | 只看该作者
然后把先前的Fillet删了

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

当然,这段代码也是Journal出来的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-31 14:59 , Processed in 0.026440 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表