|
什么是操作录制?这是ug NX系列中增加的可以录制手工操作命令的工具。录制的一系列NXOpen程序命令。通过这些命令可以重现操作。当然,从中我们也可以用来学习NXOpen。
x' ]" e" s0 L+ v: ^6 i9 R7 \$ h2 g
% W8 W5 U# [- G, a3 c然而,录制的程序往往是记录我们手工操作的命令流,其中很多信息是固定的操作,不具有灵活性。可以重现整个手工操作过程。同时,不是所有的命令都能够被录制。正如UG Help系统所说的:有些命令不能被记录,有些命令只能部分记录。正如我以前的帖子说过,UG有个两个开发包Open和NXOpen,Open主要是API和包装API的类。NXOpen是类库。操作录制的结果是NXOpen程序形式。但是Open在某些细节上要强于NXOpen。所以,操作录制不能代替二次开发。% |& Y) d/ j* { u
' t# E+ ^, O, \虽然如此,UG操作录制确实有很多意义:通过文本重现整个操作;改变程序内容可以适度的变动操作过程,不用重做整个操作;通过这个记录可以帮助我们学习NXOpen程序。
% L7 _8 V5 \, B( y$ N
' @+ A5 ~9 }2 M5 i& e+ g现在,我们来录制一个创建block的命令流。
% ^# ^& p9 w v* Q) m/ M我用的是NX6,其他版本差不多。/ b' y2 }. K! w3 V* c* m p$ _ o
7 u9 Y3 F; Q* q7 R% [; F
在菜单【首选项】里选择【用户界面】。; W6 a% E! I9 ?( X
8 r) s+ u" ] j4 [$ ~在对话框“用户界面首选项”中的【操作记录】Tab中选择【选择操作记录语言】。
, Y/ z3 t4 C2 [: U2 a- A [0 U6 ^UG NX6支持java、C#、C++等语言命令录制,其中C#是NX6新加入支持的。
; y1 |3 v8 a3 c3 M$ K3 Z' q$ F* u" L
现在在菜单【工具】中选择【操作记录】,其中有下面三个常用命令:
9 d4 }: _0 r6 p& ^. n, ~- S录制-暂停录制-停止录制8 f9 R! b/ B4 p( e- n8 c
当然也可以选择工具条【操作录制】。+ s+ p) J: i! |2 @/ f3 E! N& ` {& h
1 n3 C/ W( S, |+ h( J! @8 _选择【录制】,选择保存录制命令程序的目录。2 u0 O/ Z k3 t; @
之后UG的菜单和工具条上会出现可录制的标示,如果没有的命令是不能被录制的。% L. _( \* `+ i$ w5 o- B; f
_( M( A- {$ Z1 z
; {2 \8 F1 A! D; v- n& W( C
5 ?% Z9 t% B! l8 P
! h1 O4 o6 f/ S; S) y
选择block命令弹出创建block的对话框。+ h H" _5 S: e1 o
我就是改了长宽高为10、20、30,点击确定生成block。* a9 z0 I8 J/ t
点击保存按钮。- G! {& z* D# J" {5 L( B) {
' T$ j0 l3 h' g4 O0 H3 \5 ?
选择【停止录制】结束本次录制。
1 A2 }% O! a; ~, |7 n& C5 @
1 G: |5 G; L( [6 U! Q9 E下面我们将说说这个录制的程序。: h- b$ O: K6 v( d! u0 G" z
view plaincopy to clipboardprint?
/ f! ` g* `4 _·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······1505 i r7 s4 Z/ e
// NX 6.0.0.24 : n+ A* N9 p5 `" }, E$ \) ^2 ^! V
// Journal created by nicholas on Tue Feb 17 21:18:57 2009 中国标准时间 ) _) J v" l1 S0 M l: h6 r
// 2 S$ n! ~* r4 w% K1 k8 x9 F
using System; 1 Y2 D T4 Q! O- F9 E
using NXOpen; 2 _( Z, K5 h0 ^3 i! U) p
7 ]. k5 r9 b2 ~
public class NXJournal + a8 W- w& M# z# }8 p9 f; H
{ " h/ p" a' F% P# t& n1 ^8 {
public static void Main(string[] args)
8 `! S5 g/ _3 c3 y9 c9 l { 0 i" C: q; i& a- M
Session theSession = Session.GetSession(); ( g; L" a! s3 [" ?. R9 p
Part workPart = theSession.Parts.Work;
# h h$ M# E& J$ f) \2 D6 U. p Part displayPart = theSession.Parts.Display; % D: r' p; z" \" t# n. N
// ----------------------------------------------
2 }) }# z# i& o2 w // 菜单:插入->Design Feature->Block... " s$ o7 x) r# l6 v2 H" {
// ----------------------------------------------
8 b0 y: D% k1 s NXOpen.Session.UndoMarkId markId1; ! ^9 G3 o/ c$ L) G% P
markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start"); & h* {1 }! a$ ~: Q8 a; J4 Z/ r* O
8 m% f5 z3 ]; z1 M NXOpen.Features.Feature nullFeatures_Feature = null;
# h- |) q F+ V9 m) ^ NXOpen.Features.BlockFeatureBuilder blockFeatureBuilder1;
$ ?5 h4 }6 o) X0 Q* A2 } blockFeatureBuilder1 = workPart.Features.CreateBlockFeatureBuilder(nullFeatures_Feature); , R' l+ ]( h- U1 K* l8 L" [. t. Z
8 ]1 d5 n/ l6 E, y9 M
blockFeatureBuilder1.BooleanOption.Type = NXOpen.GeometricUtilities.BooleanOperation.BooleanType.Create;
$ Z7 h8 x1 q# K% H ; V% s, ?. `% S
Body[] targetBodies1 = new Body[1];
# r" z5 ^3 f. U Body nullBody = null;
4 U! i; p! H; H4 Z targetBodies1[0] = nullBody;
" |5 n* P: W Q# a; [ blockFeatureBuilder1.BooleanOption.SetTargetBodies(targetBodies1); 5 I& b2 L* I' q
8 Q( u$ D" e3 t' h1 U! C- I0 v
theSession.SetUndoMarkName(markId1, "Block 对话框");
: |6 _- y8 `' I1 @: H
C( I A; C0 N' l NXOpen.Session.UndoMarkId markId2; ; l$ w) t6 V5 F, G0 \- t v5 G
markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Block");
. `' ^, c( e v( y
. U3 U& o% s4 K* e3 y+ V$ q blockFeatureBuilder1.Type = NXOpen.Features.BlockFeatureBuilder.Types.OriginAndEdgeLengths;
+ Q( R- u t" y% @& x: }* W9 i / O9 Y2 g+ D5 D7 o. m
Point point1; & d" M$ k% i. n$ a h9 d
point1 = blockFeatureBuilder1.OriginPoint; : \6 K" R& G9 S9 ?
3 @. S( G3 s M9 X2 { blockFeatureBuilder1.OriginPoint = point1;
, R, l% O5 c4 R j
6 x0 F# m+ Y! k: | Point3d originPoint1 = new Point3d(0.0, 0.0, 0.0); 1 ]% J* [* o) `% L2 m* X
blockFeatureBuilder1.SetOriginAndLengths(originPoint1, "10", "20", "30");
9 h1 {4 V/ i4 f
# b" ^5 \2 b/ A blockFeatureBuilder1.SetBooleanOperationAndTarget(NXOpen.Features.Feature.BooleanType.Create, nullBody);
( y# B* B; K6 Z; K1 u5 q8 M+ H 9 ]) ^1 L/ C4 W7 u7 p) [
NXOpen.Features.Feature feature1;
. c. _9 V5 S( Q- S. _4 Q7 W feature1 = blockFeatureBuilder1.CommitFeature(); ; @2 t3 y# Y5 }" i. P
; t' w. x* v4 t* y# S2 O" S$ z5 ~& P! ^ theSession.DeleteUndoMark(markId2, null); % h# w+ Z) O1 u, L1 [! {: b
% m6 b* ~2 Z# ]3 ^8 j theSession.SetUndoMarkName(markId1, "Block"); 5 }) R; R4 \% [7 |
R O, J* j; k3 I4 u
blockFeatureBuilder1.Destroy();
( y* K8 p8 H/ ?3 A0 `- a
$ ~2 n' D2 x2 a ^6 T: W1 ^) T workPart.FacetedBodies.DeleteTemporaryFacesAndEdges(); % N+ E1 [, t. B' K0 N; a
2 s4 }- j9 o; r( ~- u // ----------------------------------------------
! f, x m9 O3 T, _( R0 f // 菜单:文件->保存 8 {' S; y! s! h" k' w
// ---------------------------------------------- ; k$ |. R5 B5 s
PartSaveStatus partSaveStatus1; ! P1 m% ]3 n$ c) V8 u2 r$ t. e7 }
partSaveStatus1 = workPart.Save(NXOpen.BasePart.SaveComponents.True, NXOpen.BasePart.CloseAfterSave.False);
; d4 n5 _4 D) X8 a$ E 2 r( @: }: N4 E0 K7 g' }
partSaveStatus1.Dispose(); # f) g; H7 U8 t' i* X
// ----------------------------------------------
) g$ v. L% d! U ` // 菜单:工具->操作记录->Stop Recording
# l& N! s0 _# F, B) | // ----------------------------------------------
9 m1 z; ]" N8 Y9 \2 [1 H
( z7 n5 k+ V( V8 A }
: @$ O# H/ J. P" |# j H public static int GetUnloadOption(string dummy) { return (int)Session.LibraryUnloadOption.Immediately; }
6 t5 Y5 b. V# A) _} 0 h- Z1 J' R3 E
// NX 6.0.0.24
. G% u7 B2 g1 W1 p- C( J7 n// Journal created by nicholas on Tue Feb 17 21:18:57 2009 中国标准时间9 f: k) F7 g) H: o! T
//& N0 ?1 I5 P% J* {8 U s1 e
using System;+ b0 t6 z, a1 q( j- e- A
using NXOpen;
% p' A0 [/ |0 O- A: O# Dpublic class NXJournal
$ P, r7 E( {" ~' q& v1 [{( x% \) m# T/ X8 t
public static void Main(string[] args)* S0 o3 U$ K: L, Q2 j
{
! W! t8 O, h% e$ l Session theSession = Session.GetSession();
9 b4 \' L3 H% S8 Y4 N. o! C Part workPart = theSession.Parts.Work;1 b J6 s- {/ L$ g
Part displayPart = theSession.Parts.Display;$ T: B( D# \$ [) i5 x
// ----------------------------------------------
- r3 n3 j, ?3 d2 X // 菜单:插入->Design Feature->Block...
2 ^7 \$ f& ?) i# @( t& s1 | // ----------------------------------------------
' g6 ?3 v2 T) F3 c- p NXOpen.Session.UndoMarkId markId1;
6 ]1 k# K4 _4 O. ` markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start");2 _3 Q( M9 Y' |4 k
2 j n7 P- D' r$ N0 x NXOpen.Features.Feature nullFeatures_Feature = null;
7 }# Z4 [7 e3 w a NXOpen.Features.BlockFeatureBuilder blockFeatureBuilder1;
1 G* _- I9 G( b6 D blockFeatureBuilder1 = workPart.Features.CreateBlockFeatureBuilder(nullFeatures_Feature);
T& ~! F6 m9 E- Z" Z' R2 a
8 b9 U4 T. l8 y6 I" s, ` blockFeatureBuilder1.BooleanOption.Type = NXOpen.GeometricUtilities.BooleanOperation.BooleanType.Create;
/ z; e0 F1 B, D/ u / p0 S( P" E7 U3 R1 i
Body[] targetBodies1 = new Body[1];5 W' \6 S4 @' \; f2 i7 M k
Body nullBody = null;
6 G' Z3 e3 z0 G/ L; q% f' Q targetBodies1[0] = nullBody;. ]% G2 @5 @8 l6 B. c B( [
blockFeatureBuilder1.BooleanOption.SetTargetBodies(targetBodies1);
6 }3 @# h8 u9 A8 p- A3 W0 O' f# M$ t; m ) y u1 B- Y9 |- c* h4 [
theSession.SetUndoMarkName(markId1, "Block 对话框");
' x$ z3 Z* }1 C. ~! O
4 K& z8 Q( J+ d: k |) Y NXOpen.Session.UndoMarkId markId2;: R# s3 T$ _1 N% C/ K2 \
markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Block");& F! u. g4 S5 D7 |
5 c" Z9 s2 H9 `$ u8 C) Q blockFeatureBuilder1.Type = NXOpen.Features.BlockFeatureBuilder.Types.OriginAndEdgeLengths;( S% Q+ z# `; k, l
% h+ d& N9 A" d5 e Point point1;* {( _! N, H3 ^
point1 = blockFeatureBuilder1.OriginPoint;
% y! U/ x2 m0 p- W' W3 n( K 5 b2 k- }6 X0 g" ^! W
blockFeatureBuilder1.OriginPoint = point1;0 e/ K" l1 `" }+ ^
- U- w. k. [6 m) Z9 S [2 J
Point3d originPoint1 = new Point3d(0.0, 0.0, 0.0);/ h" G' |/ \2 _
blockFeatureBuilder1.SetOriginAndLengths(originPoint1, "10", "20", "30");3 z1 }. [" e5 r9 s% l
% e5 T2 i8 Y* t9 T, i$ ]4 |
blockFeatureBuilder1.SetBooleanOperationAndTarget(NXOpen.Features.Feature.BooleanType.Create, nullBody);
" i% @% j2 o+ {. z; z. G( B, U
8 u" l2 w1 Z9 r NXOpen.Features.Feature feature1;8 f2 [3 y8 O3 k3 ~2 n
feature1 = blockFeatureBuilder1.CommitFeature();
( E5 j, K9 w- W& w: \( m
5 e" Z+ Z! A5 }! { theSession.DeleteUndoMark(markId2, null);& a8 t3 h, z N5 o9 ~
/ v2 \6 r, @7 X theSession.SetUndoMarkName(markId1, "Block");. {; Q$ d! Y. j
' C! W2 X, h) E blockFeatureBuilder1.Destroy();
1 ^; x4 Y+ N' N' w 1 z H, w9 P4 Y
workPart.FacetedBodies.DeleteTemporaryFacesAndEdges();
% I0 L* M" M9 \ % h2 [! r m# F* S3 x! Y4 X
// ----------------------------------------------
5 e" }& E$ J# R$ T$ q2 \$ q // 菜单:文件->保存
" A. b+ d$ D3 M/ R // ----------------------------------------------& @: r4 ?% f4 \6 l
PartSaveStatus partSaveStatus1;
5 G/ l: `/ A+ B! t) B5 K3 B( B partSaveStatus1 = workPart.Save(NXOpen.BasePart.SaveComponents.True, NXOpen.BasePart.CloseAfterSave.False);
) X7 |2 Y8 u4 r: J# B# o* F
) m7 z; i' u" h- ?2 N partSaveStatus1.Dispose();
$ A4 V# s" E; w7 ~+ N5 }3 o // ----------------------------------------------( `& u6 A% v* [0 Z1 T; n
// 菜单:工具->操作记录->Stop Recording* [- `3 S/ t; ?3 D2 n* L' J( U
// ----------------------------------------------
* w) b! r+ m2 v 6 H- O' L/ t2 E* u) ?% o
}
3 o, K6 [0 Q- d public static int GetUnloadOption(string dummy) { return (int)Session.LibraryUnloadOption.Immediately; }
/ S; w" z5 H4 [/ [4 ]4 y3 s}$ y5 e, P; ~' p, [9 _: k) j( i
6 w4 [: n" ?2 w# Z' z3 [; J' [5 b1 \
/ A: l0 {, M$ {Main函数是入口函数。
1 V- u- x5 v* Y, Q9 c8 J11-13行是常用变量的声明。7 P s+ w! z" k8 R2 K! Q+ G/ g8 F
17-57是建立block的命令记录。6 w" P" m) T6 s5 I2 ]
其中,17-18是声明UndoMark。相当于事务,可以用来回滚程序影响。$ c5 L; l' d: r' Z9 K) I# y
UG默认每个命令都设置了UndoMark,所以如果用用UndoMark块的程序效率较低,采用UndoMark声明中间的程序不在做程序你的UndoMark。对效率提高有帮助。4 E* q, n8 E6 E# r2 A1 p
51-53结束UndoMark块。
* i- i2 H2 m4 T; V+ Y2 T& w22NXOpen采用类厂模式,workPart.Features.CreateBlockFeatureBuilder是产生一个对象。
0 c6 s+ l6 a8 c @, N2 u( M( y& I49 feature1 = blockFeatureBuilder1.CommitFeature();生成特征4 a& q5 x8 ?* r8 h) j
) J$ {7 f# g# X# x2 U5 i1 s62-65点击保存按钮的命令录制。 |
|