查看: 11632|回复: 14

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

  [复制链接]

1

主题

6

回帖

23

积分

新手上路

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

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

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

×
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
) c4 I- c4 ~  H! v$ F. y7 r" @NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;5 ~1 s0 U' j, O6 E
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;% V+ z  V9 D: j8 ~% V
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
/ g; W) v* B0 S0 z4 a4 @
9 M0 M- N8 _  w7 y6 K7 ^$ y' g# {                Face[] faces = new Face[1];% Z8 i: {8 u1 d+ v
                faces[0] = face;
: j  R$ [7 R" T$ W7 a! t. R                FaceDumbRule faceDumbRule1;
6 k8 v- O+ C: D; }$ I8 n& e8 I                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);' g; P/ a9 {; U/ Z! L# l" G
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];9 h0 }% }& K# [- V( _: ~
                rules1[0] = faceDumbRule1;
3 d2 x" E5 a" t0 v1 n                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);7 D2 M; ^" d; U! w1 @. E+ K
; [2 V) ?* J0 O* U5 I
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
+ O  U1 A4 I3 t                theAdmResizeFaceBuilder.Commit();
7 ]/ P' m% x$ {, p" s                Expression expression1 = theAdmResizeFaceBuilder.Diameter;- H3 c. Y' C! ]( ]. B, F! K
                faceDumbRule1.Dispose();
; h: e, t# `# ]: s* U" Y/ t                theAdmResizeFaceBuilder.Destroy();  i" l: O# {+ b9 ^  M

% M6 Q0 v$ f+ `$ G
$ a; w" g7 g5 d7 M  P6 q" o由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值' I) V  t7 Z. ]  Z& O( T
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

4

主题

3

回帖

46

积分

管理员

积分
46
发表于 2013-12-18 17:28:05 | 显示全部楼层
你就这一段代码吗?5 y* h- s# k& [' C
其他的代码会不会有问题
" G' P2 M5 [7 {' `( W这是你录制的代码吧,你的face选择都是同一个?
上海点团信息科技有限公司,承接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:22:24 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
8 ]! f7 J: R' y- B% cusing System;
' K! T' z) ^4 x* dusing System.IO;9 ^) b# v7 N- ]% a1 F" q
using NXOpen;* u; L. |  n- _" L2 z9 \
using NXOpen.UF;
; k! G/ F3 h9 ?( G6 v& g; a8 Q5 z2 \4 m0 U, j* P
namespace InstanceFeature
  D  s8 F) b2 a5 Y4 C! w( D- [{/ K5 q& v+ I' H9 L; H
    public class InstanceFeatureEdit( d! S( ~( [, `8 z# z7 H# p5 X
    {
$ C) A& g( G* k# g        private static UFSession theUfSession;
/ w+ w& C/ {% D$ G6 d) ?0 `        private static Session theSession;
' x8 P# m' w5 @: ~! o' @# v* d* x  u  o& n) g
        public static void Main(string[] args)
( r0 ]% H' @5 P7 Z# M" V. W        {. N4 l/ a$ D, ]4 x. S( T
            theSession = Session.GetSession();# d4 m5 {: k9 Z2 h: q
            theUfSession = UFSession.GetUFSession();
( D0 S! F$ w5 E) A, ]" |- ^            theUfSession.Ui.OpenListingWindow();
& ~" H+ b% G! i1 H' i, y: Z: q            Part theWorkPart = theSession.Parts.Work;( F  M5 T, c2 Z9 N3 w
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
9 K  }6 n) G1 T% E2 J) u            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();1 f# r4 s6 P- J/ l5 a) R2 I) d
            for (int i = 0; i < theFeatures.Length; i++)
8 C  S+ {7 @2 k4 S+ F* Z( A( Z9 F, |            {
3 @2 m9 v5 x- w: n( [* V' ?                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
! N4 R3 [+ k. x9 S0 |; {" i6 X                if (theFeatures[i].FeatureType == "BREP")8 p. ?2 A& u6 k. P$ Z! W
                {
) \2 t3 A/ e# R* z( Y! w                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
' R" J) f8 h( d: o( z' G                    Face[] faces_of_brep = theBrep.GetFaces();
0 E' \# o: P7 z, v0 l. p$ z8 k" M                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");3 t7 d* r, k" N) s  d/ n/ S8 G
                    for (int j = 0; j < faces_of_brep.Length; j++)1 E2 n2 D0 O. c4 J5 c( ~2 J
                    {2 d1 u, L! q& T- Y
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
* q; O  C8 x8 X3 G                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
5 r5 d$ e% g2 Q" Q9 K                        if (facetype == "Cylindrical")
) z+ q# n3 d+ p                        {0 l2 b& M; z, ?, R1 a* j! }
                            int type;
+ a) O% ^- H- \% L                            double[] center=new double[3];
; r9 N' H9 `9 d                            double[] dir=new double[3];% V9 J; J, o2 c  p5 O
                            double[] box=new double[3];0 e2 _* ?2 F7 S% Z" O. G* H8 Z7 t
                            double radius;+ M7 n! p  Z1 s) z. A5 R
                            double rad_data;
3 v# E" s% \, A, `# S. t                            int norm_dir;
& m; i4 B# v1 s. W* h" m& r                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
& ]7 z7 E$ u  a+ B& y& A% r                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");4 q% T# R. j) \2 X, q
                          //DeleteFace(theWorkPart,faces_of_brep[j]);3 g* e7 n+ e$ [, M# L# W  C
                            double NewDiamter = radius * 2-2;* {  c. J" G+ Q* ^7 Q* M* S
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);" p* a* y$ I( C, a; g
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);- d* p% j& ?" P$ A' M- C
                        }
6 Z5 U. d9 d7 {; v3 G5 W. a9 T9 S                    }: h! W7 c* p! `# T/ S8 Z: S
                }
- V$ n$ Z9 `) t, S- C+ ?4 n                if (theFeatures[i].FeatureType == "CYLINDER")* e* W2 ]7 V; i- J) F1 U
                {
3 z) v6 Z. c: H/ @; y8 e, S0 F6 Q                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);9 Z  p& ^2 w& y, `: T
                    Vector3d dir = new Vector3d(1, 1, 1);9 z2 X2 z# g& S& W' j9 @" ~+ ?: d
                    theCyliderBuilder.Direction = dir;' c+ A' Y& l" b/ D5 X1 ~+ o) [3 ]
                    string str = theCyliderBuilder.GetFeature().FeatureType;! ~+ @* B( T( [3 E
                    //theUfSession.Ui.WriteListingWindow(str + "\n");
# k8 i4 [( |& T; q# ~                    theCyliderBuilder.Commit();% Z" V) ?7 Y. [  ^
                    Point3d point1 = theFeatures[i].Location;
4 Y8 c) g! V0 F                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
) `" O) f9 i% }6 S8 C* o/ |                    theCyliderBuilder.Destroy();7 Q4 M6 g8 Q2 S, S( R2 R
                }
* I( N; b( P6 |. ^+ l5 X            }/ T. R* b# }2 V- @$ U" ~
        }
; e( R; n) s2 V! g$ k+ A0 k! {! e! K- a* {: n5 ?3 \
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
$ k; e  A; m4 I1 o) |& \4 n' c& O        {
% N$ k, h! C9 Z( h' ?: r5 O; H  C* ]            try
0 z& C8 @9 _- J. i" i3 Q% f            {: T& D: o$ C# k6 C, f) a, R
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;$ T4 e2 l+ ?8 T! M' |, @. t8 P3 A
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;3 k1 n8 l: _7 d: R/ {
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);' [2 `* S: o4 w' R

! Q7 _6 ~  }, u4 x                Face[] faces = new Face[1];
/ ?( E4 }$ q3 D9 s7 q; G# w4 ^4 {                faces[0] = face;
5 G7 z8 Y: U' C) R                FaceDumbRule faceDumbRule1;
% \4 Q# c1 {1 }* c- H' L- `                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);: m& o7 Q/ j/ B/ y3 P
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];( M, l$ K' x4 K& ]
                rules1[0] = faceDumbRule1;' K6 X& e  L7 A& b  N+ J/ P
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
* i6 H2 V4 f" C8 s+ n( i4 q! x. F3 r
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
: ?6 D% f: m" {0 N                theAdmResizeFaceBuilder.Commit();6 y; h8 d7 Z* _4 d4 @" c5 f$ _
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
1 Z% B1 k1 m0 r                faceDumbRule1.Dispose();
& V; X- O" S  K  _) D' Y                theAdmResizeFaceBuilder.Destroy();' Z9 v* G! A2 L
            }
0 g! f; {- x# t% H+ m- U            catch (Exception ex)
2 n2 K4 s& n- H# ^8 K; [            {
$ h- p* v; L/ p1 w4 l                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");- z# N" E' p0 P6 j: t4 P0 Y
            }8 H: w' U) g  d- i* ^" c& T/ I4 e
        }7 E( B$ G" e& C

5 a5 R! P2 q4 {; k        public static int GetUnloadOption(string dummy)
) s% J6 e7 ~9 |) }* ~( M7 F4 d- ^        {
' d8 N+ b4 [: ?  R            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");/ U, b* X1 s9 ]5 j4 z( U. t
            return UFConstants.UF_UNLOAD_IMMEDIATELY;
+ }( r. O; m+ P/ D7 n+ P3 r        }
+ a3 o# A; z5 S3 a/ w0 @* V$ E. @    }4 n4 O4 Z3 u. |
}
4 c6 R4 t1 X& \" j  O5 W
上海点团信息科技有限公司,承接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
7 t; H4 r9 b: J/ ^如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
: T" F7 f5 u1 O/ h- K' a6 c
估计那个地方要释放内存
2 ^$ n8 C; H3 j' O
2 Z+ F7 j8 u! ?( l这个需要调试的 % ^: C4 _4 w: _6 G; {# \3 d7 P/ {
# d8 X9 W1 v' \6 }  w
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

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

* X; a3 Z! C6 g/ t另外你干嘛要用同步建模的功能8 T8 X- |1 l! c
, i& R9 |9 q5 |- z
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
3 I8 Z1 F/ O9 N6 f6 L9 M3 f2 o4 O( v另外你干嘛要用同步建模的功能
7 R* f: S' `# J" _2 [+ d5 T% `( W
8 P3 f  D- d7 |1 X& n4 j& T直接使用 偏置面 不是更好

: Q! P( j6 W. }3 h6 a偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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 |: y) J# `0 L1 x4 Y偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

( P- G# H9 T5 h5 a# A9 X具体这个 我还真没怎么研究过  % t0 O3 `+ N" D% s
, g! C+ x4 ]$ j* d
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
2 A/ G! B, i- c3 I6 X$ D) h% R" N. s9 x. |" Q/ Y. ?% t
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
4 j8 U# Q! O9 A8 \6 P' l+ C. G  s偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
6 b, y0 z; H& U( r# J' h2 R
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:12* q& W9 P/ G: g  h& O
你主要要实现什么功能, 需求告诉我  我写下看看

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

使用道具 举报

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

本版积分规则

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