iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 25448|回复: 3
打印 上一主题 下一主题

用一个命令实现操作的两次变换

[复制链接]
跳转到指定楼层
楼主
发表于 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
沙发
发表于 2010-5-23 21:50:29 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
板凳
 楼主| 发表于 2010-5-24 09:39:08 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
地板
发表于 2012-10-22 23:14:07 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-11-25 12:01 , Processed in 0.014812 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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