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

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

  [复制链接]

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

1

主题

6

回帖

23

积分

新手上路

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

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:$ V- s& L, i) `3 C: j
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
6 P+ d; R1 Z) }( m( D' ]& k                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
  C8 N; a6 s% W0 P$ ]; H                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);3 \+ F( a8 E) W9 t; G" }

* o8 s; A0 \: j3 S                Face[] faces = new Face[1];6 Y3 p  n4 Z; c* E' S& _: [
                faces[0] = face;8 g+ j, d0 y% ]3 a! d* C6 t# a
                FaceDumbRule faceDumbRule1;
  ]$ a$ d" [1 ?                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);" j* m8 W" l0 q% S: G
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
0 W3 b$ i& T) L% }: c" \6 k/ m! Z                rules1[0] = faceDumbRule1;
! q$ V+ h! e0 c$ W                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);! c: G. A3 A6 G' p
3 l( ]3 b  c$ Q; L3 b
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
8 }7 s$ X8 Z4 x! B                theAdmResizeFaceBuilder.Commit();, W# ?1 d4 b2 Y: ~7 q: U4 h
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
" Q" u5 G0 Y) a" \                faceDumbRule1.Dispose();$ o$ U: _, d' ?$ ~
                theAdmResizeFaceBuilder.Destroy();
! }: l! i, |! y% @! u3 {3 D9 d, c8 [' J  J8 E
  P4 W( U' [% P1 j% R
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
" E9 T' A5 _9 K& F) ~" m3 D. n
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复14

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82166
QQ
发表于 2013-12-18 17:28:05 | 显示全部楼层
你就这一段代码吗?
6 |% D2 g& C! P; j& v, y% s9 J其他的代码会不会有问题) a2 z8 v% T# f+ d9 a3 V" R
这是你录制的代码吧,你的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 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:/ {1 M; s8 S2 E! i4 f  T
using System;
0 C% `4 \9 w, C! I0 N9 g2 f- ousing System.IO;! D. o5 n# M$ ^9 f
using NXOpen;- `2 H- @1 v2 v% h2 b! l
using NXOpen.UF;
- r" q1 O! A$ g( A/ V$ r0 ^1 C! V4 |* k/ a" c, J
namespace InstanceFeature1 H( C( ?* Y2 `, K5 E$ e" ~
{
6 D! J8 S. J; M/ S1 E+ C    public class InstanceFeatureEdit
9 Z$ A/ F8 C, ?! l    {8 ?3 ~# W- M/ m1 {4 e; N7 E
        private static UFSession theUfSession;# X% I' c5 T- |2 E$ I. x
        private static Session theSession;# {: G+ c4 i$ v- R/ ~5 f' b
2 m0 I( g6 C( T# L
        public static void Main(string[] args)
8 x! Q" }$ b! F6 L7 M: j4 T5 Y        {
7 K) ~( s- V' w) f3 @* [0 ~            theSession = Session.GetSession();
5 o2 D5 D! D# A8 P            theUfSession = UFSession.GetUFSession();- M& e( o' C/ Y
            theUfSession.Ui.OpenListingWindow();8 m9 H$ k5 y8 d1 e8 D# \$ ^
            Part theWorkPart = theSession.Parts.Work;  y' W7 K5 H5 U: o- x4 l' v8 `
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;" {* ?4 ^. D" R$ e( }
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
5 v: ?# v' y5 G; U$ F" J; @            for (int i = 0; i < theFeatures.Length; i++)& w. M' m" B* T* f- a
            {: T; {& y6 q- F. P: v# a
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
7 |5 }" B' I; L# ]8 Z                if (theFeatures[i].FeatureType == "BREP")
, R% b+ V% a; q                {. O/ I6 N* @8 ~4 w
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];- ]! G- Q! z9 n- |6 s- ~0 Q
                    Face[] faces_of_brep = theBrep.GetFaces();3 h4 W" w$ n* r% W4 ]6 d6 m
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");, i! S" n9 J- @# H
                    for (int j = 0; j < faces_of_brep.Length; j++)
) M: Y- S3 E+ |2 Y7 M% \1 d                    {" D# e, c/ a" @4 @6 w( N" u& n' q$ Q( z
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();; R  R8 e" G9 ^% Z8 I! z
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
" N1 T6 e$ c( Q, X  b. t                        if (facetype == "Cylindrical")# q+ s. z2 a2 ^+ _0 e  O- u
                        {
" d& i. o  j$ L: l% e3 ^1 A                            int type;8 R1 c7 h/ {; X: }
                            double[] center=new double[3];
8 w4 S4 M8 T& c$ \/ x: T" W; B) x                            double[] dir=new double[3];/ g' o! t' q% j5 ^* }
                            double[] box=new double[3];, a' V7 \& e6 {" j. [
                            double radius;0 r5 w# W) }5 K  O. S) Y
                            double rad_data;
- t2 I" _, L$ C; F7 I- z: Z                            int norm_dir;
! d0 d/ P/ u& ~8 s& U* |1 W4 ^; V                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
% k3 r4 |8 _1 h                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
0 \0 L' d- a8 k) |3 n6 }                          //DeleteFace(theWorkPart,faces_of_brep[j]);
1 r, y# w3 v- ^1 j2 a: t2 }( s                            double NewDiamter = radius * 2-2;# a) Y) o6 F5 k2 u! Z  i
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);
! x' d* K( s; x/ H                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);" D. \/ B+ W$ G
                        }! _$ ~" P1 h( O: A. F
                    }2 i2 s2 ]" c( I1 b
                }
" Z% Q# ^/ m3 d3 [8 h) {( T                if (theFeatures[i].FeatureType == "CYLINDER")
) w" u' J+ E2 Q                {
' Y# W) c6 E) a' y! j& d" i                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);8 C# ~" z$ g8 K5 I* B" Z+ q3 N
                    Vector3d dir = new Vector3d(1, 1, 1);
, q, r" m  ~6 M# L% d& F, }                    theCyliderBuilder.Direction = dir;
: k& b6 j- z' b4 c# v5 k" m6 p                    string str = theCyliderBuilder.GetFeature().FeatureType;" P1 Q+ J, p8 W1 A
                    //theUfSession.Ui.WriteListingWindow(str + "\n");2 G1 o; ^# L0 d2 F
                    theCyliderBuilder.Commit();
. r- H  C& `- E& c/ e                    Point3d point1 = theFeatures[i].Location;
4 |8 [8 a) w7 \& X4 J8 T                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");9 |8 L3 G9 V3 t% M5 H7 t# z
                    theCyliderBuilder.Destroy();
) |+ \! h( V6 j                }" p) X* X: p! Q3 g
            }
) }+ b0 ^6 ]4 E5 X% `4 f7 m        }7 C% a+ j9 C, Q! w0 ~) |

2 ]% G0 \  A+ y6 W/ M+ z9 l& v        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
* y5 Q0 `8 r, T0 G0 w# H& g        {
+ |0 ]# x8 j% v( k( [' m3 o            try  M# h! o  j  A) U' Q& N! w- Y, h% x
            {3 A( ]* n& X. j( l& j. W
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;+ K9 Q9 v  `' [7 q
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;8 K2 O4 h6 `: Z( l+ _! w
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);! Y8 W+ [$ F  c% k- s) y! f, J8 R! t

+ X- v- o2 ]! ^) Y                Face[] faces = new Face[1];& c$ I2 s: A3 M" m) @
                faces[0] = face;
6 _) U2 F; j( t7 t. O( A                FaceDumbRule faceDumbRule1;
& }  L0 C4 q+ c9 A; G7 R( m: _( k, i                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
4 w5 B( o) L4 I. }$ M1 {7 Q, @0 Y                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];- q6 a9 \! b6 H. e6 s
                rules1[0] = faceDumbRule1;
1 j8 ?! ?- A8 t% _& j3 c- Q% [                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);, W* N& P* M% q6 o. X
3 y* D/ x0 i6 {; v) a  S+ G% E" ~/ X
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();* n1 X" J0 n% u9 P+ W1 L
                theAdmResizeFaceBuilder.Commit();7 |2 c8 T' k! _# R2 g& J
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;& \- I9 y) U3 q8 R4 l
                faceDumbRule1.Dispose();2 G; I+ d# o+ k8 n" H
                theAdmResizeFaceBuilder.Destroy();/ {  d/ _: E4 E: h
            }
, L9 p& r: G) Q$ K( G$ E            catch (Exception ex)  V$ A7 l- J7 l- N
            {
' _' i0 T: c& D6 f                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");, K( R* ^9 [" x$ d6 I! T
            }; R! b! R0 g7 e
        }' y( g' t# j* d3 {
/ ^+ D* j" G% c3 @) I4 h- ~: j
        public static int GetUnloadOption(string dummy)
" e% \: q8 o$ _' q# N, V3 l2 I        {
, r: a$ O% K( ]) W. ?/ w9 Z            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");# f7 A7 O6 H0 |1 V. ?7 f6 w3 i
            return UFConstants.UF_UNLOAD_IMMEDIATELY;
! ~! p9 L' `  B- M6 u        }
2 I* S) ?7 J# i+ ?1 L    }
$ F3 y2 U3 K% D2 l1 }}5 @# V! t# M2 R1 U7 \# P
上海点团信息科技有限公司,承接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:258 i8 Z' p9 @6 ~- ]2 m2 W' m* b
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

6 H1 O/ k! i1 r, f估计那个地方要释放内存 , D* c( z8 a5 K: S. o8 ~+ b
. \: i! ~3 [: [0 O. d9 B/ s# b$ i
这个需要调试的 2 a' D2 W8 F7 x& b! L$ H- Z

2 B) ]4 x$ a# S- DJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 19:28:38 | 显示全部楼层
坚守 发表于 2013-12-18 19:25! }) K6 Q5 {7 @" V2 @' |
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

" @' R9 V) _0 ~5 O另外你干嘛要用同步建模的功能
/ n" z: i$ l# I( g
: z+ K) O9 b1 I. v3 I5 Z直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
4 R" d1 q6 Z  t  w, `1 ]( L  I另外你干嘛要用同步建模的功能
1 Y# O/ g2 l7 K, _8 A0 F  x2 I
# C  u9 Z. m9 v& A( f9 {直接使用 偏置面 不是更好

) p2 e, q: J( O6 C+ i偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
1 \$ B5 F4 O' Z' i6 L1 o偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

6 q5 c* W. t+ a, S* y具体这个 我还真没怎么研究过  
. {2 U7 x; z. N( n  G! o& i% D2 o  d% S% g( O; B, c& i
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题3 Z1 N" x! L$ P. Y# l5 h: j

2 e8 Q% v4 M4 V0 C9 B偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
8 P6 i! J4 r8 y偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

  @0 J* H$ d2 g6 G( C你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:12
9 G& R* g2 G  [# k2 Q你主要要实现什么功能, 需求告诉我  我写下看看
! Z) @6 e3 G! s# e) W* T3 D3 m+ v( E
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了