PLM之家PLMHome-工业软件与AI结合践行者

[已解决] 多次调用后提示 执行引擎异常

  [复制链接]

2013-12-20 09:27:11 11170 14

坚守 发表于 2013-12-18 16:26:08 |阅读模式

坚守 楼主

2013-12-18 16:26:08

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:1 F: d+ A$ \; S% E5 K5 J
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
! [( ?5 W  Z. V9 G3 c5 y9 ~                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;* N% Q9 j3 O- Q; m
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);9 E  [0 J1 y! m; s+ i
; E5 ^+ J4 Z& Y7 h
                Face[] faces = new Face[1];0 G, Z& n6 d  ]( r3 J6 O' L
                faces[0] = face;
6 J* \+ R$ n+ `! o; X6 t$ @4 l                FaceDumbRule faceDumbRule1;
6 R2 P4 d. O' [. Z6 i                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
1 I. Y% A; R1 _; o1 g8 [6 o                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
( ], t3 O" N: H4 C5 a8 \                rules1[0] = faceDumbRule1;" }! I& {5 S% s! X9 [" l, L
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);- Z/ [, M& J. h; `) V# x5 f
' ^: S& ^% w9 c# P& W6 y7 o
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
8 W/ F6 o1 Z& o7 p7 t) L' A9 B6 G# W                theAdmResizeFaceBuilder.Commit();
6 j" ^, S; ~0 h                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
, U& Y: a3 N2 F                faceDumbRule1.Dispose();% K" [; l' {5 k" h
                theAdmResizeFaceBuilder.Destroy();& J. l8 ?# G* D( o6 s( @  C

# _5 m& s" I( V1 x9 e' y1 k- O5 d/ }( C2 g: }
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
9 `& s- n8 s5 ]. g' x
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复14

admin 发表于 2013-12-18 17:28:05

admin 沙发

2013-12-18 17:28:05

你就这一段代码吗?: k7 w3 ]7 A$ \, b
其他的代码会不会有问题
8 g1 Y8 \+ V2 G; Y这是你录制的代码吧,你的face选择都是同一个?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

坚守 发表于 2013-12-18 19:22:24

坚守 板凳

2013-12-18 19:22:24

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
5 t: n; M8 H: v9 ?+ D/ D+ Q( s( lusing System;
  z# H% w* v- a8 {! m: Cusing System.IO;
! Y, _+ D# d+ Z5 {using NXOpen;
) I& }: J; v( f1 o4 w! susing NXOpen.UF;
% r: o, @1 U0 ~0 ]9 V
& N* c  b3 S7 Ynamespace InstanceFeature. a' B" E  D# V9 S
{
# \9 E2 d: m: \8 i3 a    public class InstanceFeatureEdit
; i7 C9 S/ \9 a    {
* j: Q8 i5 O# U8 f' Y4 V( {        private static UFSession theUfSession;( |" _) O3 Z. T8 l8 ^& ]
        private static Session theSession;
) S9 @) h% D( d2 i
7 O0 K4 a* h2 c  i8 t' v( g% C4 B        public static void Main(string[] args), H+ p5 ]) z5 L( ^" ~8 T
        {2 Y- M4 S/ O8 _# G' G
            theSession = Session.GetSession();
$ D* L. t, K: M, I            theUfSession = UFSession.GetUFSession();
6 r0 @+ D( k* _1 a& t' k            theUfSession.Ui.OpenListingWindow();
) E( \9 [; i7 O( @: k) r: e9 V- ^3 Q            Part theWorkPart = theSession.Parts.Work;
0 R7 r* U" ?0 l/ N( j& z; X+ P            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;: g2 o- t  l3 U+ X) [  \! s
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
- j4 ~2 D- s0 j1 H            for (int i = 0; i < theFeatures.Length; i++)4 w( y) F, w# w- ?: t
            {& I4 t  j4 l6 T
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");. ~4 `  K) _$ |0 z
                if (theFeatures[i].FeatureType == "BREP")
3 o2 f2 s5 I* B2 J                {: w; L3 b7 w  u5 I$ L
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];, Q! B  y0 [" d0 s/ Y8 m$ L
                    Face[] faces_of_brep = theBrep.GetFaces();; h- Y7 k1 m' O& T  d
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");2 l' Z# }4 Q' S& q0 y1 \
                    for (int j = 0; j < faces_of_brep.Length; j++)2 b1 e' u5 T4 ]. v, E6 {
                    {2 ~7 l9 u; C) Z9 B
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
+ Q% [0 Y/ |" f( R2 [. |+ T                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
% P" |* R3 g. O                        if (facetype == "Cylindrical")/ a4 S( F0 j3 p' ]5 |- w$ `3 F
                        {3 F# a. F/ ~6 R
                            int type;3 x1 Q) D- t2 F7 m% m7 n
                            double[] center=new double[3];
' R, z. g( d" V% R0 V' u                            double[] dir=new double[3];2 r! {; ?  b% q2 V6 I- Z+ a% r
                            double[] box=new double[3];
; Y( S; }1 |8 h2 g$ M) ~  H                            double radius;' |% |" B5 P/ m1 d" ]% q9 K
                            double rad_data;
$ j# _* c3 k% f6 h  _2 p                            int norm_dir;' C( K/ m& r# o/ h, X
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);8 ?2 a8 j6 D7 ]; r% d+ g
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");/ n0 ?& i' S( q& v& A2 b
                          //DeleteFace(theWorkPart,faces_of_brep[j]);
2 k' U2 s$ i" r  F2 s5 I# P                            double NewDiamter = radius * 2-2;( z  |: m% ?8 `. g; Z
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);) s. B. }) [( U0 N3 l( b$ I
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);( _: k( I2 U! S- G8 G; a( d) B
                        }
0 Y, T; \- x5 Z                    }
# r$ G5 T1 n3 T0 S                }
* D- l, m1 T' _/ w) e+ D; n7 Z                if (theFeatures[i].FeatureType == "CYLINDER")
# a! {# I) {# }( I7 d                {3 n: Z4 a) c+ y5 S; j1 E+ F0 G& F
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);% x3 q$ h( F: d: j& H: N" s
                    Vector3d dir = new Vector3d(1, 1, 1);" R+ B5 k8 T& D# Y
                    theCyliderBuilder.Direction = dir;7 d7 L$ e6 J+ Q4 {9 I
                    string str = theCyliderBuilder.GetFeature().FeatureType;! `8 O- z" L) E
                    //theUfSession.Ui.WriteListingWindow(str + "\n");
3 g( L/ g  ?2 w+ W                    theCyliderBuilder.Commit();
- q6 T2 y. e  S7 _7 C                    Point3d point1 = theFeatures[i].Location;8 l/ S2 `$ E; u, q  D7 Q
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");; ?5 \3 d* b% C( g/ x/ B
                    theCyliderBuilder.Destroy();6 I# l- u2 j4 ~
                }! q: ?: Q! k) U/ f5 J, j
            }0 ?. j( H. S# c- p: x! t8 ^% J7 o4 \
        }# C1 o% f/ C! S8 C
' n1 `7 @/ S  j# \
        public static void ResizeFace(Part workPart, Face face,double NewDiamter); o1 f! B" O2 b. u' ^' m$ c
        {
- V7 c6 ]4 [* {, k            try7 `8 X$ ^. ^' _1 t' N4 H/ D
            {: F5 P3 F% a" I% P  j5 o/ ]/ h
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;4 F  I2 v0 z! E. @" [$ A1 u
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;+ e, t# C0 z$ b- u4 q  i
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
5 o/ s* O& s2 W- t& P
* G9 G* o1 A, v, G& l8 x                Face[] faces = new Face[1];' p7 Z  n& B$ W& H# R: r& F( a+ I3 a
                faces[0] = face;% U" n& o8 @/ B( j* C9 I2 i
                FaceDumbRule faceDumbRule1;
1 e5 p1 G: a: R8 [                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
0 V2 I' ]) u, J. h) E# j# c                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];: e0 p6 i5 ~8 Q) I
                rules1[0] = faceDumbRule1;
) r# h) {" n" Q' @8 R                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
# T" P; z* |/ P* m% k- h: t+ m& N
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();, H" c5 m' u0 x, M  u
                theAdmResizeFaceBuilder.Commit();3 Y3 H0 m7 N1 l: K, \6 t
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;& Y  E* @# p; P
                faceDumbRule1.Dispose();
& ~9 Z" s9 L) d                theAdmResizeFaceBuilder.Destroy();
7 o1 B. f1 X0 d7 x6 Q. |            }: u6 d: C) ]; {" s2 C, Q
            catch (Exception ex)5 o, Z* W/ p  Y) t& K1 ]
            {" F8 z4 A; m0 c) J
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
7 Q' Y  U8 v0 h3 d, `6 P8 y. E            }% O  P$ y# I2 R3 \
        }
: m" N+ ^4 k: K) U* l6 s9 S: ]: }% `- M) O/ `
        public static int GetUnloadOption(string dummy)
) H# i% _  s& g9 z  l" y7 M        {
+ X$ e8 [8 I7 J  z; f            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
+ e5 e' S0 X" G4 t4 `            return UFConstants.UF_UNLOAD_IMMEDIATELY;# X! \- i% ]  t; D7 t: j
        }4 b1 N( E5 f; q2 Y7 p
    }8 p$ p" I) Y5 w3 t
}! I/ U' A  z) E  c; r( n4 ^
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

坚守 发表于 2013-12-18 19:25:28

坚守 地板

2013-12-18 19:25:28

如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处理,到了一定数量以后UG就死掉了。
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

mildcat 发表于 2013-12-18 19:27:47

mildcat 5#

2013-12-18 19:27:47

坚守 发表于 2013-12-18 19:25( l9 T9 g- ~: w5 f( F0 Z
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

$ z+ g7 m5 L7 x" u2 @估计那个地方要释放内存 4 H1 R$ r3 }! j. }2 a* P1 b, v

! e. N+ [1 b( a0 H" w这个需要调试的 4 W1 ?# G  N; y1 Q

0 I- U( `7 e5 zJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

mildcat 发表于 2013-12-18 19:28:38

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:25
2 y3 |/ S) f% p5 V- A如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
3 x, Z) f  E2 t  M8 D; t& h9 t6 {
另外你干嘛要用同步建模的功能
5 W# N" @, o2 v  R- G& e' R9 h# I+ V+ s. z: H, r0 a
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

坚守 发表于 2013-12-18 20:07:44

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28! u& P4 C6 M% [; A6 b
另外你干嘛要用同步建模的功能' e7 }: _9 m! Q+ [6 ^4 B

3 l$ [+ x' D2 v& s5 O) q% [直接使用 偏置面 不是更好
- I( R6 |0 h: l
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

mildcat 发表于 2013-12-18 20:11:32

mildcat 8#

2013-12-18 20:11:32

坚守 发表于 2013-12-18 20:07
* V1 D) f( w# K偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
2 F: ]; I) t7 D$ {# t7 h$ T, W' f7 e
具体这个 我还真没怎么研究过  
5 L& {, P& Q7 J1 N$ W1 N% P. @' y$ u+ G' [
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题3 K5 A6 w. u8 |* W9 |7 ]0 R. G6 E' D

  ^* E: O8 N2 H* C5 T8 \$ r$ T偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

mildcat 发表于 2013-12-18 20:12:11

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07
/ ?, o# U' H2 c. ~偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
+ F- \+ w. t& O+ {) v& C: W
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

坚守 发表于 2013-12-20 09:27:11

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12
; p3 K  D9 o# L" @5 U8 `( Z  \你主要要实现什么功能, 需求告诉我  我写下看看

" R) g) w1 V1 m我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了