分享

UG二次开发【快速出车间文档】

 战神之家 2014-09-28

        UG附带的出车间文档需要进行运算,这样一来,出车间文档在程序刀路形成很慢的情况下这运算速度让人接受不了;下图是做的一个简易车间文档示例:

UG二次开发【快速出车间文档】 - 逍遥客 -  海阔凭鱼跃  天高任鸟飞

 

程序使用VB.net,下边是源代码:(代码中SnapPic.exe 为VB做的抓图工具)

Option Strict Off

Imports System

Imports System.IO

Imports NXOpen

Imports NXOpen.CAM

Imports NXOpen.UF

Imports NXOpen.Utilities

Imports System.Drawing

Imports System.Windows.Forms

 

Module Module1

    Dim theSession As Session = Session.GetSession()

    Dim myUI As UI = UI.GetUI()

    Dim theUFSession As UFSession = UFSession.GetUFSession()

    Dim theWorkPart As Part = theSession.Parts.Work

 

    Dim mytag() As NXOpen.Tag '选择的加工操作标记数组

    Dim mcount As Integer '选择的加工操作数量

 

    Sub Main()     

 

        Shell(Environment.GetEnvironmentVariable("UGII_USER_DIR") + "\UDO\Post\SnapPic.exe", AppWinStyle.NormalFocus, True)

 

        Try

            '获取选择的操作数

            theUFSession.UiOnt.AskSelectedNodes(mcount, mytag)

            If mcount = 0 Then

                MsgBox("没有选择加工操作!", MsgBoxStyle.OkOnly, "提示信息")

                Exit Sub

            End If

 

            '设置车间文档EXCEL模板路径

            Dim fp As String = Environment.GetEnvironmentVariable("UGII_USER_DIR") + "\UDO\Post\WorkShop.xls"

            '打开与写出车间文档

            If String.IsNullOrEmpty(fp) = False Then

                Dim myExcel As New MY_EXCEL

                myExcel.Create()

                myExcel.Open(fp)

                myExcel.Write("M4", AskDisplatyPartName())

                myExcel.Write("S4", Format(Now, "yyyy/MM/dd"))

                myExcel.InsertPicture("b4", Environment.GetEnvironmentVariable("UGII_USER_DIR") + "\UDO\Post\jietu.jpg")

                For i = 0 To mcount - 1

                    '输出结果

                    myExcel.Write("B" + (i + 17).ToString, (i + 1).ToString)

                    myExcel.Write("D" + (i + 17).ToString, GetGemoGroup_Name(mytag(i)))

                    myExcel.Write("E" + (i + 17).ToString, GetToolPathName(mytag(i)))

                    myExcel.Write("F" + (i + 17).ToString, GetToolName(mytag(i)))

                    myExcel.Write("G" + (i + 17).ToString, GetToolNumber(mytag(i)).ToString)

                    myExcel.Write("H" + (i + 17).ToString, GetToolDiameter(mytag(i)).ToString)

                    myExcel.Write("I" + (i + 17).ToString, GetToolCornerRadius(mytag(i)).ToString)

                    myExcel.Write("J" + (i + 17).ToString, GetToolHeight(mytag(i)).ToString)

                    myExcel.Write("K" + (i + 17).ToString, GetToolFluteLength(mytag(i)).ToString)

                    myExcel.Write("L" + (i + 17).ToString, GetStockPart(mytag(i)).ToString)

                    myExcel.Write("M" + (i + 17).ToString, GetStockFloor(mytag(i)).ToString)

                    myExcel.Write("N" + (i + 17).ToString, GetSpeedValue(mytag(i)).ToString)

                    myExcel.Write("O" + (i + 17).ToString, GetFeedValue(mytag(i)).ToString)

                    myExcel.Write("Q" + (i + 17).ToString, CInt(GetCutTime(mytag(i))).ToString)

 

                Next

                myExcel.SaveAs()

                'myExcel.Quit()

            End If

            '出错处理:

        Catch ex As Exception

            MsgBox(ex)

        End Try

 

    End Sub

    '当前文档文件名

    Function AskDisplatyPartName() As String

        Dim UFS As UFSession = UFSession.GetUFSession()

        Dim part_name As String = ""

        Dim part_tag As NXOpen.Tag = UFS.Part.AskDisplayPart

        UFS.Part.AskPartName(part_tag, part_name)

        Dim aa() As String

        Dim bb() As String

        aa = Split(part_name, ".prt")

        part_name = aa(0)

        bb = Split(part_name, "\")

        part_name = bb(bb.Length - 1)

        Return part_name

    End Function

    '取加工几何试图程序组

    Function GetGemoGroup_Name(ByVal camObjectTag As NXOpen.Tag) As String

        Dim theGemoGroup_Tag As NXOpen.Tag

        Dim GemoGroupName As String = ""

        theUFSession.Oper.AskGeomGroup(camObjectTag, theGemoGroup_Tag)

        theUFSession.Obj.AskName(theGemoGroup_Tag, GemoGroupName)

        Return GemoGroupName

    End Function

 

    '取操作名称

    Function GetToolPathName(ByVal camObjectTag As NXOpen.Tag) As String

        Dim ToolPathName As String = ""

        theUFSession.Oper.AskNameFromTag(camObjectTag, ToolPathName)

        Return ToolPathName

    End Function

    '获取刀具名称

    Function GetToolName(ByVal camObjectTag As NXOpen.Tag) As String

        Dim ToolName As String = ""

        Dim ToolTag As NXOpen.Tag

        theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)

        theUFSession.Obj.AskName(ToolTag, ToolName)

        Return ToolName

    End Function

    '获取刀具号码

    Function GetToolNumber(ByVal camObjectTag As NXOpen.Tag) As Integer

        Dim ToolTag As NXOpen.Tag

        Dim ToolNumber As Integer

        theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)

        theUFSession.Param.AskIntValue(ToolTag, UFConstants.UF_PARAM_TL_NUMBER, ToolNumber)

        Return ToolNumber

    End Function

    '获取刀具长度

    Function GetToolHeight(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim ToolTag As NXOpen.Tag

        Dim ToolHeight As Double

        theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)

        theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_HEIGHT, ToolHeight)

        Return ToolHeight

    End Function

    '获取刀具直径

    Function GetToolDiameter(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim ToolTag As NXOpen.Tag

        Dim ToolDiameter As Double

        theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)

        theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_DIAMETER, ToolDiameter)

        Return ToolDiameter

    End Function

    '获取刀具刃长

    Function GetToolFluteLength(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim ToolTag As NXOpen.Tag

        Dim ToolFluteLength As Double

        theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)

        theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_FLUTE_LN, ToolFluteLength)

        Return ToolFluteLength

    End Function

    '获取刀具R

    Function GetToolCornerRadius(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim ToolTag As NXOpen.Tag

        Dim ToolCornerRadius As Double

        theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)

        theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_COR1_RAD, ToolCornerRadius)

        Return ToolCornerRadius

    End Function

    '取部件侧部余量

    Function GetStockPart(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim StockPart As Double

        theUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_STOCK_PART, StockPart)

        Return StockPart

    End Function

    '取部件底部余量

    Function GetStockFloor(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim Stockfloor As Double

        theUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_STOCK_FLOOR, Stockfloor)

        Return Stockfloor

    End Function

 

    '取主轴转速

    Function GetSpeedValue(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim SpeedVale As Double

        theUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_SPINDLE_RPM, SpeedVale)

        Return SpeedVale

    End Function

    '取进给速度

    Function GetFeedValue(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim FeedValue As Double

        Dim _camObject As NXObject = NXObjectManager.Get(camObjectTag)

        Dim params(0) As CAM.Operation

        params(0) = CType(_camObject, Operation)

        Dim FeedsBuilder1 As ObjectsFeedsBuilder = theSession.Parts.Work.CAMSetup.CreateFeedsBuilder(params)

        FeedValue = FeedsBuilder1.FeedsBuilder.FeedCutBuilder.Value

        FeedsBuilder1.Destroy()

        Return FeedValue

    End Function

    '取切削时间

    Function GetCutTime(ByVal camObjectTag As NXOpen.Tag) As Double

        Dim CutTime As Double

        theUFSession.Param.AskDoubleValue(camObjectTag, 142, CutTime)

        Return CutTime

    End Function

 

    Public Function GetUnloadOption(ByVal dummy As String) As Integer

 

        'Unloads the image immediately after execution within NX

        GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately

 

        '----Other unload options-------

        'Unloads the image when the NX session terminates

        'GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination

 

        'Unloads the image explicitly, via an unload dialog

        'GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Explicitly

        '-------------------------------

 

    End Function

 

 

End Module

 

Public Class MY_EXCEL

    Private app As Object

    Private book As Object

    Private sheet As Object

    '表格名称

    Public Property xlSheetName() As String

        Get

            Return sheet.Name

        End Get

        Set(ByVal value As String)

            sheet.Name = value

        End Set

    End Property

    '新建程序

    Public Function Create() As Boolean

        app = CreateObject("Excel.Application")

        If app Is Nothing Then

            Return False

        Else

            app.Visible = True

            Return True

        End If

    End Function

    '打开文件

    Public Sub Open(ByVal xlFileName As String)

        book = app.Workbooks.Open(xlFileName)

        sheet = book.ActiveSheet

    End Sub

    '写单元格

    Public Sub Write(ByVal _Range As String, ByVal value As Object)

        If _Range <> "" Then

            sheet.Range(_Range).Value = value

        End If

    End Sub

    '插入图片

    Public Sub InsertPicture(ByVal _Range As String, ByVal imageFile As String)

        If _Range <> "" Then

            Dim ExcelRange As Object = sheet.Range(_Range)

            Dim Ins_image As Image

            Ins_image = Image.FromFile(imageFile)

            Dim HeightScale As Double = Math.Round((ExcelRange.Height * 12 - 6) / Ins_image.Height, 2)

            Dim WidthScale As Double = Math.Round((ExcelRange.Width * 15 - 6) / Ins_image.Width, 2)

            Dim ScaleHW As Double = Math.Min(HeightScale, WidthScale)

            sheet.Shapes.AddPicture(imageFile, 0, 1, ExcelRange.Left + 2, ExcelRange.Top + 2, Ins_image.Width * ScaleHW, Ins_image.Height * ScaleHW)

            Ins_image.Dispose()

        End If

    End Sub

    '取指定单元格值

    Public Function GetValue(ByVal _table As Integer, ByVal _Range As String) As String

        Dim sheet As Object = book.Sheets.Item(_table)

        Return sheet.Range(_Range).value

    End Function

    Public Function Save() As Boolean

        book.Save()

    End Function

    Public Function SaveAs() As Boolean

        Dim Sdlg As SaveFileDialog = New SaveFileDialog '定义一个保存对话框

        Sdlg.FileName = AskDisplatyPartName() + "加工工序单.xls" '保存对话框的默认文件名

        Sdlg.Filter = "EXCEL档案(*.xls)|*.xls" '过滤器设置

        If Sdlg.ShowDialog = Windows.Forms.DialogResult.OK Then '如果保存对话框的确认按钮被按下

            book.SaveAs(Sdlg.FileName) '保存文件

        End If

    End Function

    '结束EXCEL对象

    Public Function Quit() As Boolean

        book.close()

        app.Quit()

        app = Nothing

        GC.Collect()

    End Function

 

    '取数组

    Public Function GetArryValue(ByRef _table As Integer, ByVal _Row As String, ByVal _Cell As String, ByRef ArryString() As String) As Integer

        Dim sheet As Object = book.Sheets.Item(_table)

        Dim rowvalue As String = sheet.Range(_Row).value

        Dim cellvalue As String = sheet.Range(_Cell).value

        Dim k As Integer = 0

        If rowvalue <> "" And cellvalue <> "" Then

            Dim rowstr() As String = Split(rowvalue, "/")

            Dim cellstring() As String = Split(cellvalue, "/")

            Dim a, b, c, d As Integer

            If rowstr.Length > 1 And cellstring.Length > 0 Then

                a = Convert.ToInt32(rowstr(0))

                b = Convert.ToInt32(rowstr(1))

                If a > 0 And b > a Then

                    ReDim Preserve ArryString(b - a)

                    For i As Integer = 0 To b - a

                        ArryString(i) = cellstring(0) & Convert.ToString(a + i)

                        k += 1

                    Next

                    If rowstr.Length > 3 And cellstring.Length > 1 Then

                        c = Convert.ToInt32(rowstr(2))

                        d = Convert.ToInt32(rowstr(3))

                        If c > 0 And d > c Then

                            ReDim Preserve ArryString(b - a + d - c + 1)

                            For j As Integer = 0 To d - c

                                ArryString(b - a + j + 1) = cellstring(1) & Convert.ToString(c + j)

                                k += 1

                            Next

                        End If

                    End If

                End If

            End If

        End If

        Return k

    End Function

End Class

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多