查看: 12169|回复: 14

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

 火 [复制链接]

1

主题

6

回帖

23

积分

新手上路

积分
23
发表于 2013-12-18 16:26:08 | 显示全部楼层 |阅读模式

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

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

×
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:& V; o! v0 j' ^
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
7 _6 x5 c1 K3 `7 W; u$ M0 q8 T' @                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;% h8 N" D, K& _! ?3 e: q
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);7 i6 y% K7 H$ G2 A3 c' p
; k# i( T( y) C/ \9 z1 T6 u9 m
                Face[] faces = new Face[1];% @* }! E' ~6 Y" K# L3 _
                faces[0] = face;& l, {3 H/ D! e5 P
                FaceDumbRule faceDumbRule1;2 p, t  d, O; ~8 J
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);0 t& k) I8 E2 C) N2 e, p5 v
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];- h- g# z+ \  h5 ]1 p: a  [( b  U
                rules1[0] = faceDumbRule1;
1 g' v, q( f6 B# j% e* ]                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);* z6 h% X$ b$ b2 y$ E6 r

0 e7 W# Q" t( n' @* u3 x                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();" b, P, \$ t9 }; f. r4 C: `
                theAdmResizeFaceBuilder.Commit();
; \/ Q, I8 O; d: d$ w, g6 F  h                Expression expression1 = theAdmResizeFaceBuilder.Diameter;) q& h$ G! Q8 d
                faceDumbRule1.Dispose();. h% H; M$ k  R% T" `
                theAdmResizeFaceBuilder.Destroy();
7 D$ m. t( T  c5 n3 a' ]3 ?. p0 T. h8 A
8 \( x3 Z' |0 ]9 m9 O: H: U
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值! Z* s& A9 d8 [2 S3 A% _6 e
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2013-12-18 17:28:05 | 显示全部楼层
你就这一段代码吗?
4 \! h; ?* l8 U' K其他的代码会不会有问题
: v4 @8 ]# V8 u+ g: U$ F/ ]7 T这是你录制的代码吧,你的face选择都是同一个?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 19:22:24 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
3 o; u0 ~5 G( T) ^using System;
8 C% H( ^9 K3 x3 ousing System.IO;4 `& r2 q( B: [* L; j/ T
using NXOpen;
9 D/ P3 m3 h* i: u+ o5 }/ B' s3 busing NXOpen.UF;" c, G# H/ N+ O& X8 N+ e+ o) b

! n  J6 f' t6 s! @% Cnamespace InstanceFeature! F0 v5 O* s3 c
{
! Z7 L, n8 k- i  y; e' W" A. T    public class InstanceFeatureEdit' m" s6 H  ^# y- ]
    {
$ f2 B7 I- \0 u, q* E8 L        private static UFSession theUfSession;
' [- A# Q. F0 v7 ]        private static Session theSession;
* w& B/ F* Y9 ^2 L- H
$ P- w9 V) @; _& L7 r" ?# r1 s0 \+ E( A        public static void Main(string[] args)
, F2 @5 ]; M  i# q$ o        {" r+ F# @) n5 K; _. w/ X
            theSession = Session.GetSession();9 W2 `+ L( i, R
            theUfSession = UFSession.GetUFSession();
7 E* x8 l3 ~$ g. K            theUfSession.Ui.OpenListingWindow();/ O. l" b# D% m% u
            Part theWorkPart = theSession.Parts.Work;8 @; K/ ]5 P- S! f$ Q3 z
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;1 C' N* G! s) j- e4 a+ K' A) E
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();$ ?+ S% `/ y- U" K
            for (int i = 0; i < theFeatures.Length; i++)
# h% X9 _% w4 K6 n7 X            {
5 M5 Y& K2 |; i* `+ T                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");! e- m5 c* N5 E9 e
                if (theFeatures[i].FeatureType == "BREP")
5 [9 `; S( O& I2 f- p                {7 c2 r( w0 P; F$ h
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
1 n5 j, }/ u( _+ ^% t3 z' e5 B; ]7 q                    Face[] faces_of_brep = theBrep.GetFaces();
' U( n9 b) v  x                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
. u0 I- c) M7 o! v6 f  A' z                    for (int j = 0; j < faces_of_brep.Length; j++)
8 \& B3 k8 _; q! i& a- g                    {3 b: j* [5 \  i# d
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();, j) n$ G5 H* a
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");- _: d& P! f% S' Y- ~/ }
                        if (facetype == "Cylindrical")+ E# A) p; s6 R2 z  T3 J% c; K7 J
                        {. O2 w) _; A' e% L5 f/ `
                            int type;
- P, e! u" e: {5 Q: Z8 ]                            double[] center=new double[3];
- B8 ^- q, e4 G! f& G; ^                            double[] dir=new double[3];% I, B1 ~8 W, i! v0 u; Y
                            double[] box=new double[3];
# B% k( z6 ~1 u9 I+ e- m                            double radius;
' f0 t# E% R$ N) y                            double rad_data;
# U* R+ S+ m2 T9 l" }                            int norm_dir;( k+ K* P/ X) T0 n5 g6 n0 v
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
  u4 d/ A0 Q- k8 ?2 L2 |& p: }                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
% n4 |9 @' q/ o                          //DeleteFace(theWorkPart,faces_of_brep[j]);
; T' s$ y/ M% c6 A) t* N6 ]                            double NewDiamter = radius * 2-2;* M! r, }( U; o
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);
- t7 V7 T" d# g7 V. V$ V                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);/ a9 D" `: {6 P( e* z" o
                        }
3 F# q  W& J- W2 d" C! }' r                    }
5 \% v, u* O. ]. R: B) L1 E                }) T" N7 Q( N0 q
                if (theFeatures[i].FeatureType == "CYLINDER")$ ]3 G) G* x& B+ W$ W! F. J) R- [
                {2 L6 u+ d7 J$ b' l9 Y  _
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);' x- U. C" \/ Z9 O
                    Vector3d dir = new Vector3d(1, 1, 1);1 D* ]" k8 A0 n% j' F6 a" ~8 `
                    theCyliderBuilder.Direction = dir;
( U9 r: k. S. n0 R                    string str = theCyliderBuilder.GetFeature().FeatureType;
1 ^: K' t# K6 }/ O/ j                    //theUfSession.Ui.WriteListingWindow(str + "\n");
+ k" H  Z* ^8 G                    theCyliderBuilder.Commit();+ D" Y& E: y& v3 L# f
                    Point3d point1 = theFeatures[i].Location;5 W, z! b) y0 n: _/ w. J+ @
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
" B3 d  b8 b2 t. t$ d# R                    theCyliderBuilder.Destroy();
7 Z3 {% z- v4 [/ b* E                }( A. V1 c" c" b5 i/ ?# ]
            }( F, q- y! A  u8 p4 Q
        }
# J4 X2 v+ n# k4 k2 X6 W* C
( a6 d- O! a* M+ c. d        public static void ResizeFace(Part workPart, Face face,double NewDiamter)% A; {) D  z1 v4 |. M" Q5 w
        {, D4 h% [4 }) ?% ~
            try) w: p5 Y0 }: S+ j6 |, Q: v
            {+ a: T- f7 h8 I# r! m3 J3 Z
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;! N& J8 B9 d% I1 H
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
6 l3 X6 w0 Q6 _1 L# a                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);1 k" X2 F& s: I8 Q4 s: G' }) I

: ~' U9 Z+ d- p: z6 s                Face[] faces = new Face[1];
) s2 w8 d3 T. N1 j' F                faces[0] = face;
+ a5 J9 W( S# [- Z                FaceDumbRule faceDumbRule1;, _0 Y4 Y5 Z% z. v
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
- V* k' K1 w0 b' S0 H* S& r  ^                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
, q& \! P4 }, h& u) i, f  ^6 _                rules1[0] = faceDumbRule1;
. t- G( g1 p, Z  w' C" k* g- \                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);' t5 X  X" M, m9 }
7 C; d: j+ j9 v+ a, W, s
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();$ O+ S$ t9 P9 O) G" S0 d  c- ~
                theAdmResizeFaceBuilder.Commit();) N5 Q4 O# F$ k1 v2 U6 ]% K. N" `4 J
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;6 Z' V7 j+ ]7 s5 K) T+ w% ~$ U
                faceDumbRule1.Dispose();7 B9 l* S5 v' I) O7 ^0 A5 F! x) Q
                theAdmResizeFaceBuilder.Destroy();
' p: `6 _" f5 \1 R" F            }
8 f8 _7 o" d4 o# l) r! ]            catch (Exception ex)- a$ k/ U3 M! @4 z/ I
            {
% d3 ~( }4 k% ~, a                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
2 @1 m% P2 M4 z$ ]8 h/ ^            }
/ T, u! h2 `# I+ a) Z& e        }
) Y* @( ]) H% E
7 E: \. `# \2 W$ j4 ~, C        public static int GetUnloadOption(string dummy)2 K* G- ^8 \2 e) ]; ?3 y9 f1 r
        {1 B$ ?9 U! m! t
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
  ?9 V; o7 G: @6 L* \7 M/ W, F            return UFConstants.UF_UNLOAD_IMMEDIATELY;
' k3 H+ x2 W- q4 I) Q- K        }
; V9 l: e6 ~% r    }
- F- ~  a+ I3 k$ W, b0 }# H7 [}4 C+ C- Y0 x$ [
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 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.doteam.tech
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 19:27:47 | 显示全部楼层
坚守 发表于 2013-12-18 19:256 _5 J) E( `3 _5 J& ?- i) ]- H: S0 z
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
' C  E1 Y: |! e* t" L8 G- m6 _& _
估计那个地方要释放内存
6 i  @* i- _! ^6 k6 i$ n0 U/ o) a" ^7 r$ F% e
这个需要调试的
# J! Q+ G" `$ b6 j: Z8 N" `" \( J  |3 e. J% g
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 19:28:38 | 显示全部楼层
坚守 发表于 2013-12-18 19:25( t( Q& \. B1 ]
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

- E" E8 H* Z- ]1 H2 f: M7 [另外你干嘛要用同步建模的功能8 Y% x: i& s  y- ^4 V
. t4 N, u! M" L3 R$ B( h
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
6 G& }6 o0 m% ^另外你干嘛要用同步建模的功能
7 ?, |) Y' `' g$ R: Z; a# {! o4 O2 o/ d; n( V$ P' K& k
直接使用 偏置面 不是更好
4 q% m4 b- E$ A3 Z5 X; B
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:11:32 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
3 Q5 @* m# O, O: ]& b, Y$ A偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

& z  A5 Z, G. c具体这个 我还真没怎么研究过  & w  W: Y0 ~4 P& L
/ j0 L5 w" T' V- ?" t4 w1 k
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题1 m8 G6 |) C8 ~/ W3 g* a
7 z: C$ S+ d7 x3 V# L2 [& S
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
- t9 ~. l+ z. C. ~2 o2 [( p. h偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
9 n* @/ t# Z" p7 o+ _
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:12# {8 U% g6 b" \
你主要要实现什么功能, 需求告诉我  我写下看看

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

使用道具 举报

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

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部