查看: 12195|回复: 14

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

 火 [复制链接]

1

主题

6

回帖

23

积分

新手上路

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

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

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

×
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:* m% r' b7 P2 _/ w2 f' I$ _
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
3 `& u% `9 o0 q( F$ G7 ?                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;. g4 L! m2 W) w. g( D- [) ^
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
6 V" {5 C: a8 j" t; Z" W& Z( ~& \8 H+ a. O; G5 \
                Face[] faces = new Face[1];3 [% i) z0 x+ h9 Z) b0 i+ |
                faces[0] = face;+ Q& K0 ?5 B5 X& h* y
                FaceDumbRule faceDumbRule1;
7 s; [9 l+ ]6 T) P                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);9 R5 D9 v2 ~4 N2 ]; p
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
) J% V8 z: I' C! a# G                rules1[0] = faceDumbRule1;9 c* r& R8 ?& r% v& Z# t
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);' ~) d1 D, d7 f! s( Q# I. _4 J
  i3 z5 f6 z2 q* n4 E6 \
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
! o. e& j. q6 z; C' U, n                theAdmResizeFaceBuilder.Commit();( z1 J) X& M& I7 K) E
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
  T5 x! F3 k/ K& m- p                faceDumbRule1.Dispose();
$ ?0 I/ j7 q4 E) o- i% |8 A. v                theAdmResizeFaceBuilder.Destroy();( C4 N! _; H: [) \8 u. y

0 ^5 z4 H( Y9 R. c+ E, y) ^8 ]. G' O: d/ [+ N4 @
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值" B) F! p' m% o% D5 `$ F
上海点团信息科技有限公司,承接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 | 显示全部楼层
你就这一段代码吗?# Q% g) r" a+ `" P) N% j( a4 D% ^; s$ W' o9 |
其他的代码会不会有问题
; x! }: T5 J4 i这是你录制的代码吧,你的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 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
+ y! B3 {# @8 n' rusing System;( S/ y. H; D0 X$ J. B; o' b* x) I1 B
using System.IO;
+ h2 W- ]  r- e& dusing NXOpen;
# i9 A; C& q1 B8 Fusing NXOpen.UF;
/ n2 j$ I2 g- i8 o- s7 I, z+ |/ h2 P7 I+ z# E; |* L  Y
namespace InstanceFeature
3 D$ A  H  ^& d* {) [; }{7 |0 d( b1 \1 W' [
    public class InstanceFeatureEdit# E; Z" `. _  W
    {) ~( {9 |$ `2 {1 \
        private static UFSession theUfSession;% F" [2 y3 S; T! r
        private static Session theSession;
8 u$ z! x9 z# o$ ?% x" n
  j: L5 t' I5 S        public static void Main(string[] args)
" y5 T, G# c" @        {0 ]8 {8 n* O; B2 h
            theSession = Session.GetSession();
6 e- K" V. `; a8 B# M) g            theUfSession = UFSession.GetUFSession();
- L! Q6 b1 g+ G1 ?4 T            theUfSession.Ui.OpenListingWindow();
4 s6 |5 |1 a1 [            Part theWorkPart = theSession.Parts.Work;
7 L: S5 S: I! R- O            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
! T! Q& Z* R5 ?# ~2 a& |* u5 i            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
4 c4 D% `% w& G3 {' J            for (int i = 0; i < theFeatures.Length; i++): B) O/ G) _! M8 d
            {9 s, c  g% }6 K3 U' m. b% S% y
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");3 ]2 p5 k! t  z9 }0 o
                if (theFeatures[i].FeatureType == "BREP")5 p4 Y! X- @) b
                {5 A. S0 B1 n: s
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
. D1 q/ J! R; n* B$ z. ~4 x                    Face[] faces_of_brep = theBrep.GetFaces();( ~! a+ ?+ B0 {/ o& ^
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
4 ?' ?+ f! H, P                    for (int j = 0; j < faces_of_brep.Length; j++), R) Q# M8 L& D$ ]0 t( ~1 o+ Z! e, m
                    {& }# @+ t( v( K& R7 l4 N2 g+ O, ?
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();- ?. }2 t$ o, V; N6 A
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");% X& O6 G1 f0 G1 z( e
                        if (facetype == "Cylindrical")  C4 v/ z9 g+ t( {, [+ T0 [
                        {& g. r5 T- j- X1 S
                            int type;
0 N' p  \1 v1 [& u) |+ n/ [+ D                            double[] center=new double[3];
0 ?( i. |: t- v& r( p                            double[] dir=new double[3];
) r; P; q* E- A. b; g4 t0 n                            double[] box=new double[3];
* @; k/ O2 ]# h- B( F7 U  N( r                            double radius;- K3 |! ]6 k! Y# J9 i+ K+ K& }9 T
                            double rad_data;" [& v! |& y. W! N2 p7 A4 @5 O
                            int norm_dir;. O  a, P8 S, i( R4 b% G: M+ S
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);: ~! j) H- ]) k: ^/ h2 y4 f
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");% c, r& I4 d2 a' w, c* f$ x
                          //DeleteFace(theWorkPart,faces_of_brep[j]);
+ K; B  T  T8 X) w3 J$ I                            double NewDiamter = radius * 2-2;
2 T  @; s5 D7 g( W/ s+ u2 b                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);  G0 J' V6 A$ `% b
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);( ]  E" C  w* }) S
                        }$ ~$ C2 y; g4 ?6 I5 J. F* ~% ~' g
                    }9 O" h8 c! J- E4 K) b& N+ `
                }3 B* m* D3 ~4 P! H5 f- G: Z
                if (theFeatures[i].FeatureType == "CYLINDER")5 {3 f; h4 m0 P  T. e9 M
                {
7 M8 d! }/ E. J: {& l0 Z: @                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
1 m+ P* }. n: l) l                    Vector3d dir = new Vector3d(1, 1, 1);
$ E4 T2 h8 B- S$ T: O! J6 W                    theCyliderBuilder.Direction = dir;
1 |# A3 e  r: ]' u. B5 N$ `* C9 N! g                    string str = theCyliderBuilder.GetFeature().FeatureType;! f2 ?; h* X# h. H9 W% E7 t
                    //theUfSession.Ui.WriteListingWindow(str + "\n");8 A" A" _, }  z) I7 B
                    theCyliderBuilder.Commit();
% Z3 P" ]; ?! {' b% y1 z) e                    Point3d point1 = theFeatures[i].Location;
2 |3 G. V2 s0 I; c+ g                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
4 P+ Y0 K, {  S$ A- L* s                    theCyliderBuilder.Destroy();6 I1 t8 k/ G1 O1 O
                }5 A$ J  }9 x% b- l' ]; h, l* l. h2 T* t
            }' |1 h( x1 M0 {" k8 J! G
        }2 E, c9 @- k4 H+ y+ f( @& I

4 d; r& h9 C5 d1 q9 j4 R        public static void ResizeFace(Part workPart, Face face,double NewDiamter)9 b. k, S- g$ C" B5 {! u( j
        {
! G, I/ S" a) N% S" C            try1 q5 I  i* A) R* s! y3 U
            {; Q) Y: v* t% J+ o; h$ n
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
( v* r( I* A. X  x/ E& M. F0 C' p                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;6 e% G# {! z$ d4 o' g- h1 u/ z
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);, R6 O, j2 t8 x3 W( Q) [6 l) Z

: G7 l' ^: a* T! b3 U/ F8 M$ o' r                Face[] faces = new Face[1];
" l' B+ `5 W/ b/ T3 `8 \# H5 N2 ]# c                faces[0] = face;* E  {% v; s, r9 ^' n8 v8 L
                FaceDumbRule faceDumbRule1;: t/ o+ ?8 ?& ?' D
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
. K9 N! K" r) Q$ \6 `6 L5 U+ ~                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];7 \& u3 c. k6 D! Z) J4 L$ _
                rules1[0] = faceDumbRule1;
1 \9 E: W; V" I6 d8 i) ?1 S                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);5 `( a# ?5 l3 o5 Q0 q

1 b% t7 O% s7 Z* G) x# E                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
1 {" V% _- q, h1 D$ ~: A                theAdmResizeFaceBuilder.Commit();+ j: |( S( i3 V- B
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
$ v. p- L) n6 H5 W                faceDumbRule1.Dispose();
' ~$ ^5 s5 K  P- k                theAdmResizeFaceBuilder.Destroy();
2 ^: N- s9 q9 q9 t. V8 q            }3 m3 g: c3 s) l! _) v0 I/ T  F* R
            catch (Exception ex)
3 Q7 \  ?- E8 A! P1 G6 r            {1 S' |* [, H) k
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");1 T( \# c8 @1 H8 o, M! v7 ^
            }0 U' @+ }4 |5 f2 x
        }
$ H! R1 n2 I6 c- F8 m
$ }0 X( t- w" ^: `# f5 ?        public static int GetUnloadOption(string dummy)4 J* x! {  B9 d8 `# ^
        {
; D+ S, u$ ]7 @- D' n/ G3 l9 b            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");8 j- a8 T! a( z5 X+ R) ?, s
            return UFConstants.UF_UNLOAD_IMMEDIATELY;( e2 m1 X' H# e/ S' n# ?0 N1 |
        }
* K% ^' o7 e  t' o    }$ ?) a1 i8 E; D: Y: C: `: B2 l
}% a2 ^* }" d" M$ |* m3 k3 g+ D
上海点团信息科技有限公司,承接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/ R+ U7 J4 A# K; \# h
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
& F. t! V7 j/ ?8 d  ^# J! g
估计那个地方要释放内存 4 z, t8 n  }1 T- q& X
$ P4 @9 N/ i& c7 |
这个需要调试的
3 W. Z: [, _1 Z* b8 e% F$ ~8 |, n; c
0 m* r. e) M5 o! h' ^Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 19:28:38 | 显示全部楼层
坚守 发表于 2013-12-18 19:25
% G9 j% F' }1 g, T; g如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

! F$ Q/ _1 b: k3 ]8 E0 p" R4 s' ^另外你干嘛要用同步建模的功能
' r' d# K% S" G% A' O2 ?1 B
: B% R! B; t' V5 @0 V8 F直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
0 Y1 l2 M( Y# X: X9 j# J6 v2 W3 H另外你干嘛要用同步建模的功能
9 x1 i0 S) |% c0 l" s* |! j) h8 Y
4 F7 q+ f, E% D! f4 b9 T9 @  j, O1 C直接使用 偏置面 不是更好
  [: l0 x$ K3 z7 C
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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, z4 ?# q1 u* g! C& v& b" Z
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
7 `/ X5 L* J' S" y) J. v
具体这个 我还真没怎么研究过  5 R& K# K! E/ D! s) m) a
& @$ B/ ^: S4 K; \9 }: g" }
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题1 y8 c$ V- o/ Q' i* u+ V  l5 Z5 W
6 K& d0 |+ {+ p2 U' v$ G3 p% q
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
6 A; f, ^3 T* a  L9 d偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
1 t6 r) ^3 p' z7 Y
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:125 Z5 \) F4 I, b% Y  M6 U7 @/ R
你主要要实现什么功能, 需求告诉我  我写下看看
) H4 i! T3 h5 u; W3 b
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

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

本版积分规则

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