UGNX二次开发源码分享:VB创建自定义加工车间文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

UGNX二次开发源码分享:VB创建自定义加工车间文档 Option Strict Off+ f, {% @6 \ F: u
Imports System0 ]2 k" r& I) H! g2 U0 v% h+ D0 t
Imports System.IO
Imports NX Open
Imports NXOpen.CAM6 V" w. A* b P; E- P" g# w+ V
Imports NXOpen.UF* _ c% w7 K3 H2 W6 I3 M- I
Imports NXOpen.Utilities! _2 n6 I) }& T$ ^7 G# y
Imports System.Drawing
Imports System.Windows.Forms( q8 ~# o: J' g0 \
Module Module19 D; G6 B# K" }) u3 ^
Dim theSession As Session = Session.GetSession()
Dim myUI As UI = UI.GetUI()% V2 ]$ r- y. y! a* p
Dim theUFSession As UFSession = UFSession.GetUFSession()! k9 w2 u8 t8 I) _* {& z, Y
Dim theWorkPart As Part = theSession.Parts.Work3 F/ b; c, z F0 i! C+ D3 P
Dim mytag() As NXOpen.Tag '选择的加工操作标记数组
Dim mcount As Integer '选择的加工操作数量
& S# _5 \% k5 l& o$ ~8 ]; q( @ I/ a
Sub Main() ' h. _1 [. z. o3 N: C
Shell(Environment.GetEnvironmentVariable("UG II_U SER_DIR") + "\UDO\Post\SnapPic.exe", AppWinStyle.NormalFocus, True)+ m4 ^) T, w' {" F8 s. t
5 B- L3 n
6 w# m
Try
'获取选择的操作数
theUFSession.UiOnt.AskSelectedNodes(mcount, mytag)( M9 m) Y1 ] f2 b
If mcount = 0 Then+ f9 p- D; s3 r
MsgBox("没有选择加工操作!", MsgBoxStyle.OkOnly, "提示信息")
Exit Sub7 w/ y) J6 P9 x K* ~& W
End If
|! ?7 y% d% ?0 B9 k) ?- {% r
'设置车间文档EXCEL模板路径1 p$ M+ g0 V+ t( t
Dim fp As String = Environment.GetEnvironmentVariable("UGII_USER_DIR") + "\UDO\Post\WorkShop.xls"
'打开与写出车间文档( V3 w" h) ~7 g1 Z
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)))0 y5 S/ K9 U y n! c3 m1 c
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)).T oString)
myExcel.Write("H" + (i + 17).ToString, GetToolDiameter(mytag(i)).ToString)
myExcel.Write("I" + (i + 17).ToString, GetToolCornerRadius(mytag(i)).ToString)9 x9 I# @0 c8 P
myExcel.Write("J" + (i + 17).T oString, GetToolHeight(mytag(i)).T oString)
myExcel.Write("K" + (i + 17).ToString, GetToolFluteLength(mytag(i)).T oString)8 p" i' T! }' B9 O" B* }
myExcel.Write("L" + (i + 17).ToString, GetStockPart(mytag(i)).T oString)2 T5 [. Z5 b$ j* A) T, u6 c
myExcel.Write("M" + (i + 17).ToString, GetStockFloor(mytag(i)).T oString)8 v8 C8 |! q) v* |6 g4 {# G, p, D
myExcel.Write("N" + (i + 17).ToString, GetSpeedValue(mytag(i)).T oString)
myExcel.Write("O" + (i + 17).ToString, GetFeedValue(mytag(i)).T oString)
myExcel.Write("Q" + (i + 17).ToString, CInt(Ge TC utTime(mytag(i))).T oString)
8 [; G+ q( o6 j5 G
Next% \* Z# |% R7 }- E+ M4 X
myExcel.SaveAs()
'myExcel.Quit()9 [3 q3 T Z5 k! b
End If. f9 L& P }" S# h0 a- _5 _
'出错处理:5 {9 t; d. o& r
Catch ex As Exception
MsgBox(ex)
End Try
# L1 F6 u- H: f8 ?/ t4 o4 ?6 X
End Sub
'当前文档文件名, X I9 v' e0 R1 t9 E1 ] @% K8 T
Function AskDisplatyPartName() As String
Dim UFS As UFSession = UFSession.GetUFSession()4 a* s" q# w0 z7 w7 E( d- j: ~7 w
Dim part_name As String = ""
Dim part_tag As NXOpen.Tag = UFS.Part.AskDisplayPart% h0 W( M% l5 p: }1 O# O
UFS.Part.AskPartName(part_tag, part_name)
Dim aa() As String. w2 q/ ]4 _2 p
Dim bb() As String# a. D: @ Q2 h1 \7 C
aa = Split(part_name, ".prt")
part_name = aa(0)
bb = Split(part_name, "\")
part_name = bb(bb.Length - 1)+ w* v0 ]5 W& t* L2 X8 s+ I2 A
Return part_name$ z J# t9 d8 b3 b
End Function
'取加工几何试图程序组( U7 X' P/ o4 r3 P+ [0 D0 I
Function GetGemoGroup_Name(ByVal camObjectTag As NXOpen.Tag) As String# l9 G: @9 Q, c+ P1 r! ]8 l* r
Dim theGemoGroup_Tag As NXOpen.Tag8 O/ D9 I! W" A2 u: M0 |
Dim GemoGroupName As String = ""9 z5 U6 F* C! A: i
theUFSession.Oper.AskGeomGroup(camObjectTag, theGemoGroup_Tag)6 y/ D* }& M' X8 m8 r; m# g
theUFSession.Obj.AskName(theGemoGroup_Tag, GemoGroupName)
Return GemoGroupName$ w' J7 }" X9 j/ b9 L
End Function
'取操作名称
Function GetToolPathName(ByVal camObjectTag As NXOpen.Tag) As String
Dim ToolPathName As String = ""
theUFSession.Oper.AskNameFromTag(camObjectTag, ToolPathName)* o6 T% T( {& ]% R' _. N6 r+ T
Return T oolPathName( E* s8 n2 @1 \
End Function1 D l ^5 q, H$ P
'获取刀具名称
Function GetToolName(ByVal camObjectTag As NXOpen.Tag) As String
Dim ToolName As String = "") J) F) t! O ?4 \* }9 d
Dim ToolT ag As NXOpen.Tag: j# R9 G' ~" g2 g
theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)+ M3 f# B* [+ ?0 @( t
theUFSession.Obj.AskName(ToolTag, ToolName)& @* c `& k: {9 a+ ]+ z
Return T oolName) o# y [5 r( U" A2 K- R. @3 R$ T2 |
End Function( @, [; d. I/ X+ T$ \1 f; i
'获取刀具号码& K8 N) d, n; X" n7 F
Function GetToolNumber(ByVal camObjectTag As NXOpen.Tag) As Integer
Dim ToolTag As NXOpen.Tag* g# }. c" Q1 Z2 D# ^9 [
Dim ToolNumber As Integer
theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)
theUFSession.Param.AskIntValue(T oolTag, UFConstants.UF_PARAM_TL_NUMBER, ToolNumber)* R7 a8 l! G' n2 l2 B
Return T oolNumber
End Function0 D% ~! q1 ^ ^/ W% o
'获取刀具长度
Function GetToolHeight(ByVal camObjectTag As NXOpen.Tag) As Double
Dim ToolT ag As NXOpen.Tag* R4 y" A: F% l& r) `
Dim ToolHeight As Double
theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag). ]- X0 ^9 B2 J* B8 a: a6 s( }
theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_HEIGHT, ToolHeight)
Return T oolHeight$ {# Z; Q4 j" k8 w/ f8 e
End Function
'获取刀具直径
Function GetToolDiameter(ByVal camObjectTag As NXOpen.Tag) As Double2 r, @; G% }/ n4 n. T
Dim ToolT ag As NXOpen.Tag
Dim ToolDiameter As Double
theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)7 d E, r6 X2 V( g$ |1 z+ O
theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_DIAMETER, ToolDiameter)
Return T oolDiameter; ^9 Y7 m: L3 S& m
End Function
'获取刀具刃长
Function GetToolFluteLength(ByVal camObjectTag As NXOpen.Tag) As Double
Dim ToolT ag As NXOpen.Tag; z. o# F" W' K& s: l
Dim ToolFluteLength As Double$ W/ J3 u" B% O- V
theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)
theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_FLUTE_LN, ToolFluteLength); x) H( N9 P7 Z) q
Return T oolFluteLength1 e( E+ u& e6 h: j) p3 L
End Function, [! b2 F1 Z' v3 |
'获取刀具R角, B: R7 P1 |& a( G6 _9 }
Function GetToolCornerRadius(ByVal camObjectTag As NXOpen.Tag) As Double5 o& T' {* K( @) A# N
Dim ToolT ag As NXOpen.Tag7 }2 F1 x, ^ w2 H( ~
Dim ToolCornerRadius As Double* p0 c# L% I9 u8 f' {! A
theUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag)" C( N. E, u% {% W2 X! O
theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_COR1_RAD, ToolCornerRadius)
Return T oolCornerRadius
End Function
'取部件侧部余量5 d5 t0 P$ Q. d; f2 ~9 H# t
Function GetStockPart(ByVal camObjectTag As NXOpen.Tag) As Double: T" \( [ A! |* U- D, \! r
Dim StockPart As Double! `3 {" m! i" }# O
theUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_STOCK_PART, StockPart)
Return StockPart
End Function& ^; v: l8 q) @+ @
'取部件底部余量$ N( ]0 r9 p) Q8 [
Function GetStockFloor(ByVal camObjectTag As NXOpen.Tag) As Double+ t( Z- {0 E6 N, ~$ w: Y4 f, b+ T
Dim Stockfloor As Double
theUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_STOCK_FLOOR, Stockfloor)* U+ @; p; V! Q! N. f2 P
Return Stockfloor
End Function
2 E! H7 w5 _% W! V8 A8 m! D0 R
'取主轴转速
Function GetSpeedValue(ByVal camObjectTag As NXOpen.Tag) As Double
Dim SpeedVale As Double
theUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_SPINDLE_RPM, SpeedVale)- f- d2 ?5 e5 g/ s7 H6 W: Y& W4 o
End Function5 W3 R) O5 N: H& ^$ T
'取进给速度
Function GetFeedValue(ByVal camObjectTag As NXOpen.Tag) As Double
Dim FeedValue As Double$ A5 k# y2 ^( N% n2 b: K. S
Dim _camObject As NXObject = NXObjectManager.Get(camObjectTag)4 V8 a' J" W/ ^) }; M* ]# J
Dim params(0) As CAM.Operation1 F7 \2 j) [+ w1 m, H
params(0) = CType(_camObject, Operation)5 O7 I' X* B& S) w/ B4 t# Y% m
Dim FeedsBuilder1 As ObjectsFeedsBuilder = theSession.Parts.Work.CAMSetup.CreateFeedsBuilder(params)8 o9 Z" O! f$ j0 P; w
FeedValue = FeedsBuilder1.FeedsBuilder.FeedCutBuilder.Value
FeedsBuilder1.Destroy()
End Function7 L2 G( v/ v0 e0 U: ~( B1 i
'取切削时间$ z4 W7 ^ ^6 r& J
Function GetCutTime(ByVal camObjectTag As NXOpen.Tag) As Double
Dim CutTime As Double
theUFSession.Param.AskDoubleValue(camObjectTag, 142, CutTime)
Return CutTime
End Function& F( R' V8 f4 a/ v2 M
+ Q+ E2 \9 a# g% C1 _/ l3 M
Public Function GetUnloadOption(ByVal dummy As String) As Integer
7 A7 n# T. i- L9 s6 b
'Unloads the image immediately after execution within NX* H) K: S( m- v
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
'-------------------------------2 H' t, I0 v( w; w
' }; m! T% h* [3 q" i2 |+ p( e s
End Function
3 [) @# r7 m9 v+ v( y+ ?2 Z/ D
End Module
Public Class MY_EXCEL5 |+ v9 B; D s+ u0 m
Private app As Object' i+ _+ d$ Q! W
Private book As Object) p2 `' M X1 y5 U4 i
Private sheet As Object
'表格名称
Public Property xlSheetName() As String) a( {* D' l& \. m; i
Get' H x3 t7 [% ^5 w z/ Q
Return
End Get6 f! O7 D# s% t3 d- H( L
Set(ByVal value As String). Z6 A/ C' a, P3 X- y
= value7 f2 ~& O" V2 V, K# ~
End Set5 g6 a4 r! ?5 H5 j7 ^, l+ f! D4 t, s( _
End Property
'新建程序
Public Function Create() As Boolean
app = CreateObject("Excel.Application")
If app Is Nothing Then1 K4 b7 D0 c9 J1 t! T
Return False5 C* w2 q% f- K4 D5 q
Else
app.Visible = True
Return True- Q K" ]6 h% Y" J- Y' c: k
End If
End Function% i9 M5 ~) `* Q: y$ b* @6 Q
'打开文件1 H0 T6 n5 t$ r9 t/ d$ @
Public Sub Open(ByVal xlFileName As String)
book = app.Workbooks.Open(xlFileName)
sheet = book.ActiveSheet2 P$ \3 h. d: g! p# ?4 W End Sub
'写单元格
Public Sub Write(ByVal _Range As String, ByVal value As Object)
If _Range <> "" Then! W/ i2 s$ K/ V' S, g5 h; z4 G
sheet.Range(_Range).Value = value6 c4 U+ ?7 _: a* b- g7 n
End If
End Sub+ d2 w. Q; w- R6 J( @
'插入图片9 ~6 P1 t% L, `0 s! K, s
Public Sub InsertPicture(ByVal _Range As String, ByVal imageFile As String)5 R! W4 x: c6 }) j9 I9 g0 U8 m
If _Range <> "" Then
Dim ExcelRange As Object = sheet.Range(_Range)! J* k7 ]. I; m9 X* ?# ^
Dim Ins_image As Image( _$ a% \+ f: r- P1 J# Z
Ins_image = Image.FromFile(imageFile)) t8 b' X7 Q4 C& X2 ~+ g2 w
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)" W5 u0 K' u; y% U
sheet.Shapes.AddPicture(imageFile, 0, 1, ExcelRange.Left + 2, ExcelRange.T op + 2, Ins_image.Width * ScaleHW, Ins_image.Height * ScaleHW)
Ins_image.Dispose()- C, n3 n( S7 I
End If$ U0 }, f/ ~$ ] g# ?: G' ^
End Sub* A! p0 `# K5 C+ e/ O' x7 F& p
'取指定单元格值8 C) O1 }; H# F: x! s3 G
Public Function GetValue(ByVal _table As Integer, ByVal _Range As String) As String
Dim sheet As Object = book.Sheets.Item(_table)"
d n2 j) a* z1 n) [0 z0 k, U
Return sheet.Range(_Range).value
End Function Y: ?$ l3 y8 T. C3 x
Public Function Save() As Boolean4 y& o& O2 ?: i3 A
book.Save()0 @- D& e7 }3 Q( S0 v
End Function1 c5 E2 a) P8 `. a
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 '如果保存对话框的确认按钮被按下' O/ F/ f5 S( k! B9 l
book.SaveAs(Sdlg.FileName) '保存文件
End If8 m1 b2 a, W; g1 d$ y+ z
End Function' l1 w' A2 E& W0 z5 Z9 h9 g
'结束EXCEL对象
Public Function Quit() As Boolean
book.close()
app.Quit()2 @, { V) X* e( n% {
app = Nothing
GC.Collect()" C" p$ @" u5 B
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)& \/ Q' `- i) c. P, D3 N) R
Dim rowvalue As String = sheet.Range(_Row).value
Dim cellvalue As String = sheet.Range(_Cell).value2 R2 j1 |0 }+ h, L1 x
Dim k As Integer = 0
If rowvalue <> "" And cellvalue <> "" Then% a+ \8 ? e% \ A' k& X/ f1 u1 r
Dim rowstr() As String = Split(rowvalue, "/")" }+ I2
x% \* U8 d7 }1 [0 @; M. S
Dim cellstring() As String = Split(cellvalue, "/")
Dim a, b, c, d As Integer
If rowstr.Length > 1 And cellstring.Length > 0 Then( _& F( n0 ^) K: l; B6 O
a = Convert.ToInt32(rowstr(0))- o& N/ z8 @4 L, q1 a
b = Convert.T oInt32(rowstr(1)); W9 g# \* |+ r/ M
If a > 0 And b > a Then
ReDim Preserve ArryString(b - a)! Y c9 [8 |- |+ S0 Q
For i As Integer = 0 To b - a
ArryString(i) = cellstring(0) & Convert.T oString(a + i)
k += 1
Next& a8 Q, C, J. E4 x% Y- n
If rowstr.Length > 3 And cellstring.Length >
1 Then
c = Convert.T oInt32(rowstr(2))( P4 b/ V/ [! D: A, \
d = Convert.T oInt32(rowstr(3))( J9 Q6 J" l6 F& n/ J/ h) n2 h
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.T oString(c + j)
k += 1
Next
End If
End If
End If
End If0 V- A. `! b+ d' t6 z, k9 h1 G0 Z
End If
Return k+ W2 n2 W8 s: n/ F4 l5 B. @
End Function$ s; t" m; p& i7 e% {& e% l/ E End Class。

相关文档
最新文档