找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

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

[讨论] 用一个命令实现操作的两次变换

[复制链接]
跳转到指定楼层
1
发表于 2010-5-20 13:43:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

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

x
请看如下代码.
代码的功能是:将输入的原始操作,经过两次变化后生成目标操作。(先旋转,后缩放。)
此功能在GRIP内可用一条命令直接完成.

请教在VB.NET内或 VC++内该如何实现?

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

Module M_Trns
    Sub Main1()
        TranformOneOper("CONTOUR_AREA", "NewOper")
    End Sub
    '将输入的原始操作,经过两次变化后生成目标操作。(先旋转,后缩放。)
    Sub TranformOneOper(ByVal stOperName As String, ByVal stName As String)
        Dim theSession As Session = Session.GetSession()
        Dim workPart As Part = theSession.Parts.Work
        Dim displayPart As Part = theSession.Parts.Display
        Dim operationTransformBuilder1 As CAM.OperationTransformBuilder
        Dim operationTransformBuilder2 As CAM.OperationTransformBuilder
        Dim objectsToTransform1(0) As CAM.CAMObject
        Dim sp As Point3d
        Dim ep As Point3d
        Dim line1 As Line
        Dim point1 As Point3d
        Dim nXObject1 As NXObject
        Dim rp As Point
        sp.X = 0 : sp.Y = 0 : sp.Z = 0 : ep.X = 0 : ep.Y = 10 : ep.Z = 0
        line1 = workPart.Curves.CreateLine(sp, ep)
        point1 = New Point3d(0.0, 0.0, 0.0)

        '绕直线旋转
        objectsToTransform1(0) = workPart.CAMSetup.CAMOperationCollection.FindObject(stOperName)
        operationTransformBuilder1 = workPart.CAMSetup.CreateOperationTransformBuilder(objectsToTransform1)
        With operationTransformBuilder1
            '.TransformType = CAM.OperationTransformBuilder.Transform.Translate
            .TransformType = CAM.OperationTransformBuilder.Transform.RotateAboutLine    '绕直线旋转
            .MoveCopyInstance = CAM.OperationTransformBuilder.Result.Copy               '复制
            .LineMethod = CAM.OperationTransformBuilder.Line.Specify
            .LineSelection.SetValue(line1, workPart.ModelingViews.WorkView, point1)     '基准直线,当然,也可用两点方式。
            .AngleValue = 13.0                                                          '旋转角度。
            nXObject1 = .Commit()
            .Destroy()
        End With
        '以WCS原点为基点比例放大。
        rp = workPart.Points.CreatePoint(sp)    'WCS原点
        objectsToTransform1(0) = workPart.CAMSetup.CAMOperationCollection.FindObject(stOperName + "_COPY") '当原始操作名较长时,此句会失败。
        operationTransformBuilder2 = workPart.CAMSetup.CreateOperationTransformBuilder(objectsToTransform1)
        With operationTransformBuilder2
            .TransformType = CAM.OperationTransformBuilder.Transform.Scale  '比例变换
            .ScaleFactor = 1.2  '比例值
            .ReferencePoint = rp    '参考点
            .MoveCopyInstance = CAM.OperationTransformBuilder.Result.Move   '移动
            nXObject1 = .Commit()
            .Destroy()
        End With
        objectsToTransform1(0).SetName(stName)  '因为是移动,所以该变量引用的就是目标操作。
        MsgBox("ok")
    End Sub
    Public Function GetUnloadOption(ByVal dummy As String) As Integer
        GetUnloadOption = Session.LibraryUnloadOption.Immediately
    End Function
End Module


GRIP如下:
MAT1=MATRIX/SCALE,nScaleX,nScaleY,nScaleZ
MAT2=MATRIX/ZXROT,ANG
MAT=MATRIX/MAT1,MAT2
OPTRAN/MAT,ST1,INSTNC,ST2,1,IFERR,END1:

相信在VC++内应该也有此功能,可惜找了N次都没找到..
没有次功能?还是要自己编制子程序实现?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2010-5-23 21:50:29 | 只看该作者
试试函数uf5942-uf5947,祝你成功
3
发表于 2010-5-24 09:39:08 | 只看该作者
谢谢,指点.
但是,事实上我早就用过uf5947,结果是:
好像只有几何对象(如实体,片体,曲线等)才有效.
对于刀路对象就出错.  status返回值时3.
该问题我发过另外一个求助帖.但是无人回应!
4
发表于 2012-10-22 23:14:07 | 只看该作者
好像没有这么一个函数,我以前也找过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-24 21:06 , Processed in 0.024479 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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