查看: 11668|回复: 14

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

  [复制链接]

1

主题

6

回帖

23

积分

新手上路

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

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

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

×
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
* l- ]9 g# H# B7 kNXOpen.Features.AdmResizeFace nullAdmResizeFace = null;+ _) b& t# D* D) @. ~3 l6 o7 r
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;1 K9 ]4 q: A0 i- ]' T$ T
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);& A& R8 I' x: j% c; N; ?+ K
8 E- s, b" Q7 t
                Face[] faces = new Face[1];: u& K( ^7 x/ i
                faces[0] = face;
: e2 U9 T; U( B                FaceDumbRule faceDumbRule1;
% {$ o! C8 j* ]6 h) @                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
6 ]+ P* P6 A* B- j. [                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];' f9 w: I& J( j8 n* \% L5 Y# ]2 [
                rules1[0] = faceDumbRule1;2 }# m0 H& {: t" h/ A0 c
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);8 w# i" f0 I* e2 x
, z! T  U9 E; T, J+ q
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();( d2 t! K8 C, r7 k9 Z1 k4 N
                theAdmResizeFaceBuilder.Commit();
5 n5 J' ^, O5 H& W7 u                Expression expression1 = theAdmResizeFaceBuilder.Diameter;- u. [0 W  J/ O
                faceDumbRule1.Dispose();
. n3 X! n5 P% n                theAdmResizeFaceBuilder.Destroy();
% ^, F4 \. d+ S) a- K- E
8 i6 K! T  b  r5 ^6 M8 s
6 ^7 `! d8 e8 W' t& G' e由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值  H0 R6 J' v* A8 C  q6 \
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

4

主题

3

回帖

48

积分

管理员

积分
48
发表于 2013-12-18 17:28:05 | 显示全部楼层
你就这一段代码吗?
& K! o* ^8 K( d5 H$ M+ ~* R其他的代码会不会有问题
# G1 k0 V8 ]! D. b# r这是你录制的代码吧,你的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 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:. p( W5 M7 z# O2 A, M& M, |
using System;
% n8 B' D3 i6 O8 Yusing System.IO;0 N0 e$ h/ _3 G1 F
using NXOpen;
% c) x2 _( N* B4 ]; Wusing NXOpen.UF;
5 C. e+ z' r5 q- ]8 F1 s
5 Q& F" W/ T, u7 M* onamespace InstanceFeature0 E: z) I' W/ j$ d* D1 a! V
{
( l9 s" \9 N3 B5 R9 }8 L0 j    public class InstanceFeatureEdit  A6 Q# u% x8 h2 K1 n/ m3 u% ^+ I
    {
$ w0 a& P7 u2 a        private static UFSession theUfSession;" n5 b5 K& B/ e9 G- u+ |
        private static Session theSession;$ _5 [  D$ |0 E- g% b5 n. h' N
6 F0 a. v) U& w* o
        public static void Main(string[] args)
. e" @$ Z  B/ ~! {; n) e        {
) d3 f  Z( ~: B8 u            theSession = Session.GetSession();
. G$ t/ K5 R; p' i& d" G            theUfSession = UFSession.GetUFSession();% k* H+ G/ T1 h5 x$ x8 E
            theUfSession.Ui.OpenListingWindow();
- }0 G, F' b9 h9 F            Part theWorkPart = theSession.Parts.Work;: w3 B$ o$ I1 E; W& k
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
$ t& Z" w, q% F6 O$ c) K            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();: k! e, q9 Y1 a0 W% y1 F
            for (int i = 0; i < theFeatures.Length; i++); {* o+ Q% k8 N4 z
            {
; l% W3 z5 c1 N+ g% y7 @8 ]$ P                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");% h8 P* `9 Y; R! ?, E+ P
                if (theFeatures[i].FeatureType == "BREP")
5 W4 f" i1 g1 A/ v! v                {! ]. a; x6 b& |& A" ^0 o3 k  P3 T; _
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
( Q3 c6 h! s2 A, ]) t6 C' F                    Face[] faces_of_brep = theBrep.GetFaces();4 b& f8 Q; ~& `3 {: n4 K; [
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
# o% }# J1 u2 p* K3 a# q; f. J9 m0 z                    for (int j = 0; j < faces_of_brep.Length; j++)- M' A/ N7 h# u) L$ B+ Z
                    {- w6 \- w  C1 W: B  j
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
9 i- E1 P6 k& c4 K$ f6 i& F, Z) v                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");; @3 X" ?& ~7 S2 @, J* L! C
                        if (facetype == "Cylindrical")
! `) O; |; f9 c                        {9 s. q, ~, m: s+ K
                            int type;. ~& ^/ q4 m5 S! ~/ g
                            double[] center=new double[3];- g8 f% }, c% c# R* E* m9 P
                            double[] dir=new double[3];
+ K$ K( r- n6 ^% a6 Q6 }5 D# |                            double[] box=new double[3];* {9 H# w6 G! j7 |0 e  Y( J
                            double radius;
/ {1 \+ \; Q' C% \0 T7 z                            double rad_data;
! r$ R! n: m* @- b5 D# ~                            int norm_dir;
' N, y% v6 V, b" a                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
1 R7 f7 p0 j4 H- o: [# _" T4 g                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");6 ?1 o- x2 O& p3 M% k* R
                          //DeleteFace(theWorkPart,faces_of_brep[j]);
9 f7 o3 F4 c' z- P: X! A                            double NewDiamter = radius * 2-2;
) ?5 b2 [2 G9 B2 N                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);" A# X" L, s) a$ C
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);
: R& s7 \) ?2 n, k( t/ q                        }
! P7 V  H0 f7 {0 Q                    }1 l, T! ^" ^( n6 P& Z: r. L5 ]8 ~2 x
                }
; L/ ?+ c  u/ X; x# D7 U/ ?+ d                if (theFeatures[i].FeatureType == "CYLINDER")% V/ J! j$ ^6 u
                {
6 I3 r: O/ E% e' r/ x* W1 z) Z; ]% H                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
; |; q( o9 @9 \5 T5 v6 \0 H                    Vector3d dir = new Vector3d(1, 1, 1);
" q$ j# ~( y6 S3 V$ P8 i1 R                    theCyliderBuilder.Direction = dir;6 x# q# p& B$ X5 F
                    string str = theCyliderBuilder.GetFeature().FeatureType;
- i5 E5 h8 F. h6 R: ?                    //theUfSession.Ui.WriteListingWindow(str + "\n");0 }8 g5 ?2 o" F" Q
                    theCyliderBuilder.Commit();
' }% f& }4 x6 \1 H                    Point3d point1 = theFeatures[i].Location;
' Y" y1 M1 `' K+ h/ Y                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");' x" H! y, W) s8 M* P
                    theCyliderBuilder.Destroy();
/ e) N, C2 v8 M, Q6 [                }0 j, n+ S2 T/ }& W
            }
, r8 _8 [, f% Y  a        }
2 D* d1 q; j& y/ ]' n6 Q) J8 K9 S. P$ j  T+ w  c
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
* ]1 K+ D/ R+ c1 d  a  \        {! Z; T6 \* l" P8 W" ?/ p  {* |
            try
5 k! p2 v! {' ~$ w" }9 H            {
. Y* s! k: t- B  E8 D3 v                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
/ p# I" Y2 l& X  n) {                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
/ g3 w' o8 N5 z% u9 S                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
! v  A3 K' r3 s+ B5 a8 u  m9 k  n3 G# y# H
                Face[] faces = new Face[1];
( X- P0 j2 _" c# a. ?3 J                faces[0] = face;/ E7 m- c( X4 \' o5 L# H' M
                FaceDumbRule faceDumbRule1;% D" S& O1 ~( Z5 L9 M( R! g
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);/ C5 N. X' U% k2 x- P
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];& ]# j8 g3 \0 S+ C3 Q) i$ l
                rules1[0] = faceDumbRule1;& S+ y' ^& `  }1 q( m! u) U
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
2 ]/ }% V/ R$ [: h  [2 h
$ a4 x, u+ E, g+ |% V8 o& z                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();2 K, t0 K; h( G8 D! p
                theAdmResizeFaceBuilder.Commit();5 P4 _& g' d* e% a7 s' t. ]6 \4 l
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;  c" \( f7 c+ s( E2 H" i6 F
                faceDumbRule1.Dispose();
7 G# T, t! @9 X6 l) O                theAdmResizeFaceBuilder.Destroy();
/ c/ b0 I, W/ E+ b' M            }
4 C! j' O# |* H" {5 q: f6 _/ q            catch (Exception ex)8 w2 l8 N5 F. ]5 f
            {
& s. i! j- I) y                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");; `; y% ^3 @0 j) ^% W* @
            }( f5 h, v, Q; K: |5 @% ~+ V
        }
1 v, m7 h, d: i0 n8 c% }# r" W
$ J- R; X5 j1 t4 v$ Z" X        public static int GetUnloadOption(string dummy)1 J4 ~  T0 U' c6 G/ d7 J
        {
1 T8 M" l: t3 @9 r. |# Q            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");" g& W5 u. j4 N$ s0 @
            return UFConstants.UF_UNLOAD_IMMEDIATELY;3 Z  _) N( i5 q8 m& [
        }
0 U  t0 O' n. Y0 t; b6 {0 `+ `0 Z    }* j0 [  p! n' t. |# i
}
8 D. l- y2 @7 u! X+ Z! Y& 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
, L. l; u. \7 P4 i如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

( I- j9 R( l7 ?3 E3 T+ h估计那个地方要释放内存
0 p- _; t% ?( u5 O9 N5 K7 _2 [6 f( U* t$ A4 ]6 v% p
这个需要调试的
8 f& }6 t' `+ P4 O( u* I. Q  N2 {* u) k% [
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

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

8 [2 _1 {) f. p  {2 g* n另外你干嘛要用同步建模的功能9 t/ s6 w/ i& E) T

2 }" j( t) `( [) j# m: O# |直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
, G" z* ~2 Y2 L; {另外你干嘛要用同步建模的功能
6 X) V' Q( H1 F/ a' l2 V
6 H$ j" l# a  _8 k% R直接使用 偏置面 不是更好
8 _5 ]& ]8 T  h2 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
6 B" s: P8 F5 C% B6 H偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
- i6 M3 t& z, t' k4 A! E5 }: a
具体这个 我还真没怎么研究过  ' d6 p: C$ W/ d1 m6 i8 l  C
5 x3 @( @. W$ }( P
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
: G8 k( i9 u/ P; b1 ?. B. O) l8 s( ]8 R
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
0 k; Y, Y9 P1 M偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

) J- \/ s* B; p1 g) B5 g/ k( [你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:12
) G7 k* J/ U3 h! [你主要要实现什么功能, 需求告诉我  我写下看看

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

使用道具 举报

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

本版积分规则

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