PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
0 G! S1 f; w% l4 k6 F: G' NNXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
% d1 G" f- [+ s: q( F                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
, ]) `% X: I+ s' ]& r5 m                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
" V  i8 b4 a, Y/ f  M$ |
, B: ]" x, `, V# t1 Z                Face[] faces = new Face[1];
, c7 Q+ x# R1 r4 X& a                faces[0] = face;
# w' R) V2 T: D                FaceDumbRule faceDumbRule1;) j/ C, S$ o; a
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);3 {1 `$ V; Z3 F  v
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
) ~8 q0 Y0 S6 g                rules1[0] = faceDumbRule1;2 J. |4 X7 T; ^+ W- H; n
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);7 B8 _2 r6 I! O; g' h& q

( Q5 [' w" V- d9 R4 t' V                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();2 e- [7 s& b) C$ `' |
                theAdmResizeFaceBuilder.Commit();
" Q1 a) I" c! r                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
7 X" F( E" h% ]8 Z                faceDumbRule1.Dispose();3 p& D1 h8 P5 G6 a
                theAdmResizeFaceBuilder.Destroy();
; `: r. V" i1 L4 w6 k9 X- e$ I8 u5 P$ \; Z; F# z3 Q+ K. O
2 N2 n* k+ T7 ^% `' [5 Q
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值4 \& Z( |) Z; [4 I- u+ u. G; u
上海点团信息科技有限公司,承接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

你就这一段代码吗?) r+ v7 l- j, C3 O$ O8 _  L
其他的代码会不会有问题3 J( h* p3 z4 m6 i$ y3 ?! b/ _/ M* ]% N
这是你录制的代码吧,你的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

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:, I2 @) y0 D) m9 O$ ^9 i3 t( l, g
using System;. h: _# |# m5 z# E3 F  y
using System.IO;
( Z5 A  P* z7 e! ?( x) M* iusing NXOpen;
8 h% r5 ?( W* ]9 X' Susing NXOpen.UF;1 u1 h$ o) e) [8 Q0 k

$ t+ v1 Z% c1 f" dnamespace InstanceFeature
/ x) a& |3 T" m" v! p{
- w5 Q, J: r5 g: _. s9 A, w) J    public class InstanceFeatureEdit9 f& Z5 x3 N; ?1 F/ Y- R
    {
$ Y1 p' B0 R: s, ^  t        private static UFSession theUfSession;
& Y3 V, N- p" j3 a* ?; o8 \        private static Session theSession;  F$ K4 {& m7 Z( u+ f3 X; M
& g1 z/ L8 B! N2 b! O
        public static void Main(string[] args)
" r: G4 Y+ e; X; \0 a! Y" }( k* g        {5 H: e6 ^& C8 N. l3 L
            theSession = Session.GetSession();$ n) ?% D* l5 l. x- h% A( X+ W/ c0 {. x' X
            theUfSession = UFSession.GetUFSession();
5 f  O1 D$ x5 [, f; L% k. t* x            theUfSession.Ui.OpenListingWindow();! U: H3 ^9 N! y! e
            Part theWorkPart = theSession.Parts.Work;  M; @* d8 `* }7 O# e" j
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
: C1 O: D: G5 q5 N8 {7 r            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();1 h5 V6 G3 _- R5 _" k- e; U0 _
            for (int i = 0; i < theFeatures.Length; i++)
2 x( b) L: G) u: w! F            {
5 S+ G' M" K' L1 Q                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");+ J# Y/ m$ Y+ @8 c. _3 n; N
                if (theFeatures[i].FeatureType == "BREP")
2 @$ [( I) B4 m& m- L( o                {0 B; z) ~: }# G7 E, K
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
, E3 V, J% t$ n( J                    Face[] faces_of_brep = theBrep.GetFaces();
3 T6 _5 R$ ^4 ]! G" q* `                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");7 C# k: G/ `0 [6 O
                    for (int j = 0; j < faces_of_brep.Length; j++)
8 ^5 _! B9 ~0 p: ?                    {
7 _) M, j% S+ i! K                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
) k' W) K- a( C& F4 T; j                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");: b( k' A4 w9 j/ p& {
                        if (facetype == "Cylindrical")
' O# p4 b! q! e9 g% b                        {. t5 R! P/ v! T# L
                            int type;/ y6 o4 w; f4 X6 u1 C
                            double[] center=new double[3];7 C. w# b/ g4 z# Q
                            double[] dir=new double[3];
; ^0 o; s9 X% S# m! R. b. B; ]2 }                            double[] box=new double[3];. N+ s; y6 L0 ?9 B6 R
                            double radius;! X% }, g) q0 S, n4 Q8 v& M) k6 x
                            double rad_data;
. t2 B$ n8 k, F0 \' w                            int norm_dir;" l; a9 e$ t5 w
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
  u# T! S1 }* ?                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");/ e: w" o4 q* g7 R9 z6 t
                          //DeleteFace(theWorkPart,faces_of_brep[j]);
4 y9 u/ ?5 i6 b                            double NewDiamter = radius * 2-2;8 Y# {5 O7 v$ Y6 t( c& P* v
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);
$ ]* J9 h. Y  `8 l& Q6 i, f                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);
/ V8 a& ^4 q7 `: ^5 ]! h" \7 o  L0 I                        }4 F  u$ A! M5 V
                    }  R' `3 E1 c2 S! L2 [% I; [; S6 \, S$ M
                }
5 a3 G/ l5 H$ k' G% H% }+ c                if (theFeatures[i].FeatureType == "CYLINDER")0 U& G# R2 z6 Z! V4 O- S
                {
5 p( }( Z6 I1 q6 @4 H. L4 S                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
' n, G( @, b4 O0 B& o% O                    Vector3d dir = new Vector3d(1, 1, 1);" N, J0 h3 e5 t4 a* j9 |5 `
                    theCyliderBuilder.Direction = dir;/ Q6 C) \. e( R$ X
                    string str = theCyliderBuilder.GetFeature().FeatureType;
- i( U  h0 x% [1 i9 n( T8 i                    //theUfSession.Ui.WriteListingWindow(str + "\n");
1 E$ G  Y, q9 S. ^6 W: k                    theCyliderBuilder.Commit();
8 b  {0 M: G. X! |! o' H: e                    Point3d point1 = theFeatures[i].Location;
, v1 C: R/ A7 o& K/ \                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
$ c" b- J5 U" d                    theCyliderBuilder.Destroy();
# O, F9 r1 V1 ^7 X; \6 b) G                }
2 u! o$ w4 s$ }! a& Q# t8 A0 ?            }
* i( ~% Y) t2 m) V0 Y: @4 S        }9 x- c( f( c/ d' I' n" |1 U
: ~' X7 _. P. N9 I
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
$ f, r) W/ i# w, |4 J        {
* Q9 R8 s7 ~/ l            try: r4 n5 e, j/ M
            {
8 Y4 m, Q6 m( Q                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
; L0 n1 @. k2 A5 [. g9 l                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
" g( D* B- x' k5 I+ Z2 \, O$ T6 ]                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
  d+ q( }$ N: Y8 w4 |# ?( {/ U" c9 d! k$ R5 e" L* m
                Face[] faces = new Face[1];
; m0 ?2 f2 [' x$ I: k                faces[0] = face;
/ m: [1 d% p5 z' b/ e! Y                FaceDumbRule faceDumbRule1;( f% h5 {# }4 Q$ O* s  c( b
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);1 E8 b1 _& W6 e& }5 l+ _
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];$ o9 w+ U- [* w7 {) \
                rules1[0] = faceDumbRule1;
2 F  y2 z; a. g0 ]+ v" J9 [                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);+ L4 Z+ g) p" a8 H' o

( S# f: B. O7 v) F0 C8 Z0 H                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
2 C# n2 A. ~" Y% y$ h  Q$ _                theAdmResizeFaceBuilder.Commit();2 ^# }% @& E1 L8 d
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;- t; `9 W. V8 u$ G* S
                faceDumbRule1.Dispose();
7 }5 U; |+ @# K- e4 A6 U4 W                theAdmResizeFaceBuilder.Destroy();  q: G7 \* V4 J' m
            }* Y" v% D- t5 V* g4 J. i2 t9 q
            catch (Exception ex)$ W2 F- x9 V( B7 \- ^4 n
            {! F& `2 A" N6 O+ k; ]
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
, r" l4 e$ r6 _2 m            }: L, }4 z/ s, d; N& m5 a
        }
$ }' d/ a# z( L9 z% F" B$ }: M" M' u+ j0 A6 ~! _
        public static int GetUnloadOption(string dummy)
0 y, f- r; a" _! n7 o5 n3 L+ n        {" {4 C, R: S; S) _
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
- P% g' f4 N" x3 l, k% V+ W  I# ]            return UFConstants.UF_UNLOAD_IMMEDIATELY;( k2 F% D1 e& Z
        }
/ |3 S2 [( c9 [, [/ ?. l    }
6 f' |( c7 w; b! V$ |& h; R}
( u) V' |# _, a' n  r+ t: I
上海点团信息科技有限公司,承接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
* Z+ ?  D: b  i/ m& E/ V如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

) p' ^) y: Q  G  Q5 ^估计那个地方要释放内存
  {1 R$ E; h$ \- u* K2 f6 N4 K( m3 j# ~" h& S9 T1 C+ t2 A# Z
这个需要调试的 3 _6 |1 G8 A3 L1 E; b

& w' p) t; _: jJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:25& @* l5 L- H& }% J4 K. Z
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
5 x9 a% N& H& B, x% U
另外你干嘛要用同步建模的功能* W9 e8 G4 ]* [2 e. {- {2 r
: S& f* H+ \, F, S8 l, ]
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28
) r% @2 ~1 B* P5 f5 v4 q2 d& `另外你干嘛要用同步建模的功能
# L! \: S' P1 G" l8 I
; ^4 h! N; W9 u. @- o9 ~* p! q: B. t3 z直接使用 偏置面 不是更好
  B& ?1 G  `4 I! g
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
" w' k, }* d  U- [: V6 q偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
' T" Z! b/ E7 i+ O8 k" `+ ]/ P$ I
具体这个 我还真没怎么研究过  5 ]* {# u9 f+ K' H% X5 }3 D: B& _2 r
, W( [$ j9 [) `& B0 f5 @/ i
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题' W" L0 U' b/ M7 d
* v, g; N& l) w0 E. q
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07( s) O2 \8 Q, Z) K( }
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
# c& D6 E% C* t/ @6 i
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:121 m. J8 v- r* v$ c2 Q2 x, d$ g
你主要要实现什么功能, 需求告诉我  我写下看看
7 {! \! L3 [3 I, ~' _1 Z
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了