查看: 12159|回复: 14

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

 火 [复制链接]

1

主题

6

回帖

23

积分

新手上路

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

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

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

×
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
4 \2 m2 t; I& B% a+ JNXOpen.Features.AdmResizeFace nullAdmResizeFace = null;* c& ^4 T. @1 F8 D) k9 d! M
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
9 w- R# e$ {; b                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);9 {. w, _7 B* C+ q+ p
. c6 o( C) C( A, F( U+ Z; b$ p
                Face[] faces = new Face[1];, K8 ~6 W' ~2 @/ l9 [
                faces[0] = face;& }2 L# B2 [* H# Q2 J: M( \
                FaceDumbRule faceDumbRule1;
" N7 A( v2 z% m& @                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);) c3 A# e( P8 U) P& H: U
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];5 H% t& R/ B( m. O
                rules1[0] = faceDumbRule1;
! n. D" i# l& F                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);& k* N% A7 n7 V" |4 z# _. t7 z
  q- c8 ]- u+ k! b( Z
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
3 P8 [" k4 M  x6 z$ m! w- ~7 }                theAdmResizeFaceBuilder.Commit();3 T: C7 y. V+ J, @& w- {1 k* A. ~  W
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
; y! I2 L5 N2 f2 K6 ~$ i0 Y$ ^                faceDumbRule1.Dispose();
: K# p) o1 _5 k& H, f                theAdmResizeFaceBuilder.Destroy();
5 `. M8 F# E' I+ Z( e3 n5 a# P  \9 Y, a' f$ s) t

$ G" H, f: K5 P$ A由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值5 X- v! a* d+ ^1 w( n5 J! a
上海点团信息科技有限公司,承接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 | 显示全部楼层
你就这一段代码吗?% u8 @7 T' W" `6 o: }: n
其他的代码会不会有问题# R: s! p$ m0 o& ^: g
这是你录制的代码吧,你的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 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:0 E& |' }: c8 O/ W
using System;: X% f5 P; _* M, A4 b
using System.IO;4 _+ R( V+ g4 u3 r2 ~
using NXOpen;
* l# V$ |: \2 a; o9 E1 X* Y/ @using NXOpen.UF;
; l% K, w* p4 e6 a9 A* h! j( c
8 d, {4 ^5 x: n7 ~4 w8 Q& N7 Z: Onamespace InstanceFeature
  U% B0 a0 r- m. h- C{
' {$ Z$ X2 x2 b/ J& r    public class InstanceFeatureEdit8 W5 O, v, v7 f3 Z" Z: R0 }
    {2 V) X+ V7 x8 {! R6 b4 j% n
        private static UFSession theUfSession;
2 |" ~; L/ V8 s' x# h        private static Session theSession;" S! v4 G6 o; F! `
5 H5 _% E; w9 `, S
        public static void Main(string[] args). N( e0 G$ t: y$ Z, U
        {6 J$ t" |0 Q8 _( ]) {) \7 G
            theSession = Session.GetSession();" t  C, e( }  o/ `5 a
            theUfSession = UFSession.GetUFSession();
2 L& r0 i3 |2 P            theUfSession.Ui.OpenListingWindow();
9 o0 p" Z( N( E% g$ z0 q            Part theWorkPart = theSession.Parts.Work;
& J; ^4 [3 Y! F  h* J" P            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;; `$ j; d9 u! {' ?. I1 O
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();4 r& p+ }9 H8 c$ W  o
            for (int i = 0; i < theFeatures.Length; i++); _, \! Y- B) L0 J" L: q% ]
            {
( _/ w, Y3 o) h! Y, x/ }( e# h                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
8 A1 d" H/ u2 ?5 c- Z                if (theFeatures[i].FeatureType == "BREP")) q% V3 Y+ H1 t. F1 E5 ~1 K
                {
  N  o8 y7 I; g3 P4 Z& B                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];+ g% N6 f! ^6 |- [
                    Face[] faces_of_brep = theBrep.GetFaces();' |! i8 |4 O/ p% k
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
0 ?4 L. W2 l. E. S/ v: t  F3 P                    for (int j = 0; j < faces_of_brep.Length; j++)
% r- g1 j4 G" h1 |+ T( B2 B4 E                    {8 F2 u& ?, t3 i0 G
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
* {! ?! n. X4 S( y                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");( Y$ K5 _' g/ x; a- x/ L& L
                        if (facetype == "Cylindrical")
1 D$ N% H) y9 V" P                        {
, W/ B6 h! p& O7 p* C  m/ _                            int type;1 z9 `; {6 p% W
                            double[] center=new double[3];) x" \) q( e; ?
                            double[] dir=new double[3];
. @4 M3 R$ q8 q, b. }                            double[] box=new double[3];
/ `2 y1 ^+ x& k/ Y7 i* s                            double radius;
* B4 ?3 X& j$ w& m" @' }                            double rad_data;2 ~4 z4 i' h# ~
                            int norm_dir;
6 u+ T7 k) c  w2 B$ q! T                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);, ^: ~, l+ @) L% O; V' W$ T
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");, F5 k- m. }& j0 B$ @) Y
                          //DeleteFace(theWorkPart,faces_of_brep[j]);4 D$ r* j9 Z# l9 E, F4 R
                            double NewDiamter = radius * 2-2;' g% D6 K' M& c
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);
% A# J9 B% M. L8 ]- ~2 J8 g                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);' A2 ]- |3 p" K, m
                        }
( ^9 d' G+ G" ?4 d                    }
) H9 _! m1 j- o                }
  g6 \! D' M& t" J" b/ |* d                if (theFeatures[i].FeatureType == "CYLINDER")
0 ^/ y5 g6 f5 i: l2 R% n9 H7 a0 h) z0 T                {
, F, X. }2 g# v9 s( p# T                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
" {. V: I! D  M. c- e( U; S                    Vector3d dir = new Vector3d(1, 1, 1);& }7 ?, E6 G5 k2 D
                    theCyliderBuilder.Direction = dir;8 F  Y0 P9 y& o+ O& }8 E% c0 @9 ?
                    string str = theCyliderBuilder.GetFeature().FeatureType;
" A8 W! ^. U' v* d$ p3 X                    //theUfSession.Ui.WriteListingWindow(str + "\n");
7 T% o3 c2 E8 o, S5 k' r5 X7 o                    theCyliderBuilder.Commit();$ c4 N; [8 t  ]8 d
                    Point3d point1 = theFeatures[i].Location;( n% h! s: N/ j; x% W. o
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");% T4 T( {( @7 G6 ^. z' W
                    theCyliderBuilder.Destroy();
0 X5 P1 K* ~% G- j" x$ i                }
( G6 W1 Y  ]" E% J            }
- ^  X  G4 w" R        }
% e) D8 ?, @5 ?* O# R- I( E) [( W7 N, p  s* R+ O, B- K
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)  l3 `; [* f; B8 [+ A
        {* e) }6 j2 q( K! U( p7 Q9 D; C
            try
0 R; x3 T: s5 Z            {
+ c/ H" \9 J* T& j                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;% Z7 Z& _3 m) o. G* X
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;  Z  [) z4 L5 {( v; E5 m: r
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
' C  D5 H4 B' T7 g9 ]5 J, ]6 k4 {5 |
                Face[] faces = new Face[1];' |  m4 D  N8 j* _9 b
                faces[0] = face;
# t, y  O6 p# t% Q- \' }                FaceDumbRule faceDumbRule1;3 `- Y0 u- w) P- f7 F
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);' m# _1 c0 O7 Z
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];' G5 J2 L) o9 d9 z8 _; \7 f  g
                rules1[0] = faceDumbRule1;7 ?7 c$ [. t. `# E
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);. A( S, P8 T. {$ s6 B3 H! C5 N

  {" d. h! c" N7 P1 n6 B+ V6 Z                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
: _! o8 G1 X' y: c7 T; U$ c                theAdmResizeFaceBuilder.Commit();
# [& r) ?- a* {! I# C* k# _$ d  `* o                Expression expression1 = theAdmResizeFaceBuilder.Diameter;4 r) b! z6 B+ I0 N: t
                faceDumbRule1.Dispose();* W4 p% J- D8 B
                theAdmResizeFaceBuilder.Destroy();8 i: x. Z: b' H. k% X1 E
            }
# H2 S& f: j* a/ E+ h            catch (Exception ex)
  e+ O' f  Q7 o- e. ^& `            {: ^( Y9 U; F' d! q$ F( ^% }& o* w
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");1 J' `" H% m' U; b8 i. A( ]
            }
# H# i7 v' j% f' ]0 L  d2 i        }
: v. a, `* w  p- P( W3 F' T% W8 [! E- U7 A/ G2 A
        public static int GetUnloadOption(string dummy)* b+ B0 F0 V6 N( w: \3 `( |
        {: ?4 d+ E: n/ E* ]* O0 m7 N
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");) }6 p0 ~. B; r: W% z% ^! n: b8 x
            return UFConstants.UF_UNLOAD_IMMEDIATELY;
1 M; i0 s9 I+ W1 ]2 x2 U        }
3 u- x; ^3 @  @7 `" K2 ]    }
+ k4 ]9 m7 N1 N2 i  |) s, S: A3 ^# o}* A5 S, Y4 n2 L- k) W, U
上海点团信息科技有限公司,承接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/ u8 f- V1 t1 T3 G  `3 Z
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
. g) t3 E( R' Z# f* n& Y& p4 w- m
估计那个地方要释放内存 % g, N4 _7 _1 R5 d& o5 u7 a* K3 L4 J

6 ?% V( x1 J' b. C( Y3 j) n& y这个需要调试的 ) x8 w; q/ R- k0 o2 C

& i3 T. N+ y; x) ?- M+ IJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 19:28:38 | 显示全部楼层
坚守 发表于 2013-12-18 19:25
1 e! u# q! V* j- g/ Y如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
. @# D, ?7 S% h4 m
另外你干嘛要用同步建模的功能
, m3 z; F% o3 d, V; ~/ R
+ g0 W# r" X+ v: a' _, |直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
8 v* ?- q8 X3 n3 a0 e另外你干嘛要用同步建模的功能; V4 x4 T0 u6 y% a. h

6 F3 C6 G$ f' @: C5 ^直接使用 偏置面 不是更好
+ d; P) h) C. }! b8 N9 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:079 C9 g+ T& D* k8 Q1 b/ ]
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
) Q8 c+ N$ \: Q0 W
具体这个 我还真没怎么研究过  # K0 _( A# J0 j' M0 d! r
! a4 p" R: D' p. c
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题- [8 x/ {+ l4 ]- t
. \+ w6 @/ ~+ Y  z1 t$ ?
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
/ ?+ z7 ~% `% O" n; Z) ~3 b; F偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
0 u) [% j8 P( O; z
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:12
6 n+ D4 y% ]6 a; j8 N0 U你主要要实现什么功能, 需求告诉我  我写下看看
* `( |# l2 z! X4 V, g6 h
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

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

本版积分规则

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