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

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

  [复制链接]

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

1

主题

6

回帖

23

积分

新手上路

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

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:, B4 G" ^% s  D& z7 d# s
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;- ^8 H- o, l) f- u) B
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;$ C- G3 F3 [$ H! D) Z
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
1 J' `3 f* T; [* o* j0 \
+ v& _  l* G; K+ ^* }2 ?                Face[] faces = new Face[1];4 e( c# U% \& c
                faces[0] = face;1 {# Q+ A# z& {: e
                FaceDumbRule faceDumbRule1;% u5 ?# g# B8 g6 b4 q
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
8 M8 I1 m1 X) X                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];9 D" L( N2 w, a0 J2 D
                rules1[0] = faceDumbRule1;
, `8 L2 k, ?5 u2 |! V                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);6 W& G7 w8 J! b9 ?
9 q" z' g) _# t
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
$ E  ]6 D! w* o. t! c) A                theAdmResizeFaceBuilder.Commit();) p( m8 D6 w# q* D
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;9 U7 k, g1 t1 E; @# P
                faceDumbRule1.Dispose();- H; A% F) N4 v
                theAdmResizeFaceBuilder.Destroy();1 ]3 S* I9 @+ G! ^( y

) \4 i# }! _+ ]* Y% u  t9 C' W; N7 T" x/ G& ^3 q% R- C
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值3 U( n% Q8 T/ z
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复14

2471

主题

1276

回帖

8万

积分

管理员

PLM之家站长

积分
82197
QQ
发表于 2013-12-18 17:28:05 | 显示全部楼层
你就这一段代码吗?
( n( q" k, {) c9 s5 r  E其他的代码会不会有问题6 K( W, K7 l; A* J6 }3 Y4 I5 ~% e
这是你录制的代码吧,你的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 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
" b. s4 c! Q- z; G6 n- d4 l+ g$ x# f0 musing System;. _7 y; @8 P- X
using System.IO;3 `- A/ d8 P3 E/ O$ P  x, @  P
using NXOpen;" c0 g( c* ]" k
using NXOpen.UF;
( t( y. k: u! E( B+ k! {1 @7 @$ P0 U* N2 {4 Y* }
namespace InstanceFeature* X  v- R! L9 p1 z
{. |2 {8 O' v) ^4 f, F
    public class InstanceFeatureEdit
- \. I# d3 f" k8 ^3 q    {1 o' g' g6 W" g' }
        private static UFSession theUfSession;( t* R8 s. L0 s3 j6 o5 H
        private static Session theSession;1 W" h5 C2 ~% m9 g" Q
6 b, c5 x* y# Z% x
        public static void Main(string[] args)
4 U+ e5 R" ?- F3 `8 |. T        {2 R& B+ g. i+ T- [) u+ o
            theSession = Session.GetSession();
. O# o7 q6 N* J$ ~            theUfSession = UFSession.GetUFSession();& n8 s' W1 ?" {  f* P! M
            theUfSession.Ui.OpenListingWindow();
6 D8 i' H" j; e1 ~5 M            Part theWorkPart = theSession.Parts.Work;4 f4 P( y4 U6 E0 A! y, Y' C
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;4 |( M, Q/ a6 m3 j3 E1 R
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();( j0 u' c* m. t+ r4 P
            for (int i = 0; i < theFeatures.Length; i++)
3 V6 b7 K3 J' b5 p7 y# j            {, p1 O( T. |! C2 v
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
# q: d! y, P- W% z, m8 V                if (theFeatures[i].FeatureType == "BREP")' S2 @2 p  G. e
                {
) U1 n+ `% T' C3 U; h                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
% J( k% w- D/ R. ^( r- R2 [                    Face[] faces_of_brep = theBrep.GetFaces();2 S$ m( E$ S' t! S+ \2 ^
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
5 d9 D- k' K( ^                    for (int j = 0; j < faces_of_brep.Length; j++)* B& v8 G* B# D( \$ D
                    {
3 K0 A! z$ {2 Y. f                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
2 _( ?: k3 A1 h1 q- m( B                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
/ b- Y' x! W- x) X8 i1 ?                        if (facetype == "Cylindrical")
( L. r' H2 q! P+ ~                        {6 |8 Z6 W3 {3 J$ F
                            int type;
8 l' w$ j1 A5 v- X" b' e$ ~) g5 w                            double[] center=new double[3];8 B- U& l7 k* f( C
                            double[] dir=new double[3];/ O& v( \& y$ t
                            double[] box=new double[3];  V7 `; i1 b& b
                            double radius;# k8 J7 n$ K: O
                            double rad_data;% s, U9 l4 L9 N/ Y. r* [
                            int norm_dir;
2 l+ _& F( h! U/ L: S& u& ~                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
, t3 k' [0 G+ u$ f7 h% U$ ?: Y                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
* J' v' R+ L/ O+ ], R                          //DeleteFace(theWorkPart,faces_of_brep[j]);
8 L, y' X1 ^" K# @                            double NewDiamter = radius * 2-2;
4 Z- M+ x  ~$ X9 \$ A. V9 u; x3 X                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);! G+ {" b: k" |0 E; M5 x6 Z1 I" y: Y
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);
; K2 }* i( @) c! ]5 Z3 Z( b/ F                        }
+ G# A% u+ }6 v0 A* p' I, x                    }
3 `! r5 j+ s4 a                }6 Y' F2 i' E% S* q" M
                if (theFeatures[i].FeatureType == "CYLINDER")# }$ _( v8 Q4 L
                {9 y% k+ h2 K, _  E( t8 t- X1 G
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);1 |+ L  k. _6 ?8 m9 V% k
                    Vector3d dir = new Vector3d(1, 1, 1);
; R, L& R6 u4 r' O6 F' ^5 t- d                    theCyliderBuilder.Direction = dir;
" J% s9 _8 h0 x& i' Z0 H                    string str = theCyliderBuilder.GetFeature().FeatureType;9 Z8 M6 c, K! s$ ?9 H
                    //theUfSession.Ui.WriteListingWindow(str + "\n");8 A& r# i% j6 x$ x# {3 S2 ^
                    theCyliderBuilder.Commit();
, ?9 q+ u# k( _                    Point3d point1 = theFeatures[i].Location;) {; {: L5 d! P$ o3 {2 J
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");) a( g$ m! t( g1 F" Q
                    theCyliderBuilder.Destroy();( _4 _* Q& O% I( ^; q
                }! d+ L! F2 o0 d& E! U5 z' c# [
            }/ ?" F/ o% v: A+ g, P1 h
        }# U6 a# e# ~  p6 [) i: v" w9 l
* o; n: v+ Z% H  ^) C$ I
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)6 D( w( T$ `" U/ c
        {0 ]% x% ]& Q% o4 |
            try
1 E3 P! Q* g* J            {2 Q+ w+ Z; e9 ^" D, i1 {
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;; M. M. d. w) P5 n3 o
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;, F/ i8 k7 T3 k: \3 k9 x1 ~7 ], t# h9 q
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);, f/ T7 Y& M1 |. A3 O
6 y- r& l4 G6 @! Z( @' B% M9 |
                Face[] faces = new Face[1];
: T4 Z3 q1 n/ N6 w                faces[0] = face;4 [2 I( C: d" D' r  m
                FaceDumbRule faceDumbRule1;( W6 v' v3 C; |& w
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
: L. q( V- `( ]# A1 o% M- d# e                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
3 F0 q$ q5 M0 D3 N: q& _                rules1[0] = faceDumbRule1;
% m6 W+ P$ D) _+ J                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
# J( Q/ j+ m( t1 U! b& }' W
( x; v1 I7 l7 V: z                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
+ P3 r3 @. Z  q5 ^                theAdmResizeFaceBuilder.Commit();3 S0 b3 Z- O3 ^) l
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;$ W% J: ?2 X, m- `7 P
                faceDumbRule1.Dispose();
6 j" E* J+ w- m' F                theAdmResizeFaceBuilder.Destroy();
+ V5 Q% V  D( \8 `$ i& d# Z$ \            }
" d3 E, ~6 k0 h( a            catch (Exception ex)
# {7 W" w: ?4 ^5 Z* m- r3 Y/ {2 V            {- I1 G0 O: X% b: W
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
# z* I% k4 \) h( o' O            }
3 t6 B, W- u$ ?        }' J# f6 P, j! B  J9 b9 ^3 F
9 m/ c, M$ x2 {( G
        public static int GetUnloadOption(string dummy)8 R8 x' ^3 ?" O; N9 m
        {) q2 V5 p, J: g0 S/ p1 V
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
& C3 {2 N6 W  Q* e% R" _4 Z            return UFConstants.UF_UNLOAD_IMMEDIATELY;
4 j) P: Q- K9 T        }% F" r2 |4 L) [, _- y4 o/ }
    }
% T. N( i% [/ Q2 g, x& x}. _0 [8 [  x/ Q' @$ I8 Q
上海点团信息科技有限公司,承接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:25
9 j  J) r2 b- i" I7 R% ]& [- Z如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

( t! q3 N/ Y% `( L$ B估计那个地方要释放内存
: S2 ?# t- y6 M6 l! f. o4 e
4 e& v$ j& V& A2 h这个需要调试的 8 l! C9 Y8 D5 A

/ B$ i+ P7 t+ i; J% L7 pJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 19:28:38 | 显示全部楼层
坚守 发表于 2013-12-18 19:257 z/ X. W9 ], ~5 d
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
9 v* V* u, y) T3 [; x  }: \! Z5 x
另外你干嘛要用同步建模的功能4 k) c/ U6 X. ~
  r( N& J. S* r
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
" K" u' M$ ?& W/ F* T& P另外你干嘛要用同步建模的功能
9 p8 l/ c7 N; ^+ C, m4 c7 i
0 B: u& o1 v% d( B  t$ h* E直接使用 偏置面 不是更好

) V  R2 ^, G3 f偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
( L3 Q& Z. F( j3 |偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

! p9 y4 h( u' s5 g: q( \具体这个 我还真没怎么研究过  . J5 {% [" y% b& }. X' b$ S/ R
6 H" E) l. l. {  s) M1 t6 X' M
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题6 M: @1 K9 c- K. l1 \8 ]
/ ~4 W* D% U8 O  [* E; B
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:079 t3 E; p9 S  F* C5 o! `# T9 |
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

# x! B% |- I9 s/ e0 ?/ ]/ f9 E8 H- d你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:12. _9 h, _. `2 ?
你主要要实现什么功能, 需求告诉我  我写下看看

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

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了