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

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

  [复制链接]

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

1

主题

6

回帖

23

积分

新手上路

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

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:: E3 W9 d! Q6 p1 H! t
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
5 o! y% |( f. E! u9 r* a8 V                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;' d5 K2 u& M  F) y* t
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);: Y" s, E, a2 ^  L4 X
4 H- x. [, v( y. u# |1 A1 I" i6 H
                Face[] faces = new Face[1];
6 r7 n- _. C$ D/ L                faces[0] = face;. R  v+ H4 ^) f) Z, l
                FaceDumbRule faceDumbRule1;+ L( e" H5 ~4 m" w6 q; A
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);7 i: b  S" x0 C0 z! w! c
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];* f! A' J* {/ z/ [2 S, [
                rules1[0] = faceDumbRule1;
$ |3 b# ^/ z  y$ f                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
3 s+ Q- B& f  f4 b$ O& F- U: M; X# [4 h& a7 ^7 Z* ^, F$ {! P
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
& ?; E1 C  H5 a1 B                theAdmResizeFaceBuilder.Commit();2 ~0 w8 s; a' }+ g' L, {5 b( n
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;4 Y$ C9 Z) L9 M) h& k2 h, S1 Q7 [% s' i
                faceDumbRule1.Dispose();% Y% ]" l8 [) r( ]- h# L
                theAdmResizeFaceBuilder.Destroy();$ D3 x1 f8 |: }' L. ]

4 \4 t8 E3 `) r2 V& f( k( S  |2 j9 {1 [' i& w
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值' N" \. _* S+ d6 Y4 j+ o
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复14

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2013-12-18 17:28:05 | 显示全部楼层
你就这一段代码吗?% ~6 o/ e6 h1 W+ J) \. n
其他的代码会不会有问题- @; x- }* O$ K$ ]) z& I1 [! T* T
这是你录制的代码吧,你的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 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
8 v: ~! ~7 d7 z/ Qusing System;9 t. ]# k7 i: y- u7 [; {
using System.IO;
! ]1 |9 [& ^3 W/ dusing NXOpen;
( A, g0 ?6 r. J5 |7 @using NXOpen.UF;4 w: K$ N2 x" t: C
* W: c4 [6 Q2 x+ _
namespace InstanceFeature
: M, A7 J+ o! Y0 C. ]{
6 a6 L$ X# }$ r! G    public class InstanceFeatureEdit8 s4 r- W) h0 p) y4 }  C
    {
! M2 K- d! B" p' f  V$ Z2 J        private static UFSession theUfSession;; C, F  _/ r) {3 ~1 w4 `: J
        private static Session theSession;4 Y9 v; h) r& \) W$ u$ r8 u

( C! V5 }% G( x" O, t' @  A        public static void Main(string[] args)( b( n: F2 ~6 }
        {
2 g5 M4 e6 q7 @4 e& F! N            theSession = Session.GetSession();
6 x, U) x1 q: t( ^) c. u2 M            theUfSession = UFSession.GetUFSession();% H' s$ A5 W8 T: x
            theUfSession.Ui.OpenListingWindow();( S6 y; h1 ^7 x) N
            Part theWorkPart = theSession.Parts.Work;
# L4 L% k% I; b! i            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
6 g6 x# N% W/ ~+ k( N3 T5 k            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
3 e+ z* c* v# v4 }            for (int i = 0; i < theFeatures.Length; i++)
+ d# R2 Q) @6 A& N: X  u' Q            {
9 X- W& N1 F# D+ ?                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
. q% a9 c+ Y3 e4 r/ a                if (theFeatures[i].FeatureType == "BREP")  I* _" v9 `3 x
                {8 q+ ]: Y- f9 X8 |% r+ I/ I8 E
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];" U4 f. ]/ g5 v' m# k( T+ m
                    Face[] faces_of_brep = theBrep.GetFaces();2 ]( I' k$ p! P6 q; _: r9 X
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");4 ~& L% l5 [3 j1 w$ S) ?9 \
                    for (int j = 0; j < faces_of_brep.Length; j++)
* d! E# L' f# L( D/ Y8 n' n  I                    {9 \( ^: O7 O, ]. I- ~
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
) r& G& l$ Z' Q+ [" u8 P                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
- D1 \% I: C8 P+ w6 a                        if (facetype == "Cylindrical")
0 {( V% v1 `0 O5 y, L# G                        {/ p- T' a8 a1 r: t8 o
                            int type;, c9 V  A& D! q* g* Z6 J
                            double[] center=new double[3];; m5 I" C6 @  ~) O2 h
                            double[] dir=new double[3];# b0 i$ n& d, b3 A) l3 S
                            double[] box=new double[3];/ r  b# m& s2 L' L" \3 Y) g+ x
                            double radius;; G7 ~6 k" Z5 u6 h) x
                            double rad_data;8 |! }! Q0 r7 E7 m) T$ K
                            int norm_dir;# M7 K% o: z: X# H; t- f3 o9 }4 z
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);5 v0 p; ~" `8 J6 Z, R- N. R
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");, ~8 c, B) d. h% P, m# S
                          //DeleteFace(theWorkPart,faces_of_brep[j]);
; a! I- w$ T" f( Y- ^) W) Q                            double NewDiamter = radius * 2-2;/ q& {! H# T/ V& Q% N. x
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);
3 P0 y  L6 R/ Q& [                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);
4 U5 Z8 b1 Z/ E, I                        }; j" }' ]. e3 b7 Y8 [
                    }
; c0 x4 K* g: z0 J* ]( C                }
1 F2 N# ^3 I, y; B/ E                if (theFeatures[i].FeatureType == "CYLINDER")4 _* g) J% M& v4 G8 U5 \
                {
0 j  J7 C. D3 A: U                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
& y# u/ C) }( A! \8 h                    Vector3d dir = new Vector3d(1, 1, 1);
6 R9 B' z" p* |                    theCyliderBuilder.Direction = dir;8 z, ~5 Z/ G3 u2 n$ @5 |; F
                    string str = theCyliderBuilder.GetFeature().FeatureType;
$ [, L0 j, h* I                    //theUfSession.Ui.WriteListingWindow(str + "\n");
0 n2 q. R7 }+ B9 @$ k4 I' k4 G4 }                    theCyliderBuilder.Commit();
" |! [, K4 R1 d+ L                    Point3d point1 = theFeatures[i].Location;8 [6 V/ o9 p7 J7 w
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
3 p9 l! \4 }* z4 P                    theCyliderBuilder.Destroy();
6 }% |$ r3 y3 U  t& V2 o8 z; r                }
' s7 }: a1 m/ h$ I# S            }+ U9 l! K+ Z: S$ M3 o
        }- S2 @. x/ D9 i% K5 o

) A! J* H0 ~8 x# y/ d+ v) h7 Y        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
% U" ?* K% b& Y1 {3 _* P        {) X5 Y7 B9 N/ m
            try3 ]+ X$ p& u! Y" S
            {
: F/ u& r; {6 }) o                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
* x% F8 F' m: K6 S$ P                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;' _4 |5 `0 d3 U
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
* s6 @; z, f1 X1 j7 `0 `/ }4 @5 k  S
                Face[] faces = new Face[1];
! \5 o4 a: I' F9 m& O  l                faces[0] = face;
: F) E8 v: H7 C# k; t. E( x2 O$ u5 d                FaceDumbRule faceDumbRule1;
4 b+ Z6 U6 W1 I                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);% Z9 A  z5 J  p) m: g
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];- B- Z" L" n7 b* Y  l! T& {
                rules1[0] = faceDumbRule1;
% ]4 W( K: r0 n/ s% K7 i                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
6 G3 e0 H( {' n. m% w; t' I1 g
, b# `$ T8 s/ `( r3 q                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();  k% N. V, n% W9 s& t
                theAdmResizeFaceBuilder.Commit();( w( s; w2 x/ j9 ~! K
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;9 O8 Z7 r" ?/ g/ D9 c; `
                faceDumbRule1.Dispose();
3 V+ O# J; T" J                theAdmResizeFaceBuilder.Destroy();
3 o3 w- }( s0 \; j: C8 F            }7 b, Z; |" s' t0 Q
            catch (Exception ex)
8 h4 R) ]5 o; @" V+ m8 a            {7 Y  B4 w1 ], u) O, x7 P
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");% m; K' n7 w8 G& B3 f0 L
            }& |# G  m& n, y
        }
- w5 @, U, x( a
1 G( i. B  k) p3 ]7 j! U        public static int GetUnloadOption(string dummy)
" k! V" L2 A! |# T        {$ ~6 E1 b8 y( t6 I
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");7 I) m6 Z8 |7 E- y2 B% T# P
            return UFConstants.UF_UNLOAD_IMMEDIATELY;2 @$ S& X6 x; X! o
        }
1 F9 u$ `$ W: }' v# W, R    }+ n0 R$ h; T; F
}
# J$ d" l2 P: c# b7 U4 x
上海点团信息科技有限公司,承接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
5 ^  a3 K; q$ @$ g) I如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

1 k0 g- @& N' y估计那个地方要释放内存 8 H# C0 D  v" l7 T" S9 S
  t5 U" A* o5 C: H1 J1 e2 c( V
这个需要调试的
& s, c1 {* X, i& o3 r( K! ~- |
" |2 K4 l' z& y2 _7 o$ J' ZJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 19:28:38 | 显示全部楼层
坚守 发表于 2013-12-18 19:255 c; s& D) k& K4 w* `1 P  K  W
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

. c; c2 T7 b+ f" f9 }. p另外你干嘛要用同步建模的功能
, D' E# D% g* Y+ D& C: G0 c5 n+ e3 J0 [( ~. x; V' ?) @
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:285 G- @( a4 i3 S( D: T% w
另外你干嘛要用同步建模的功能% r8 N1 |) Q* `+ G1 y
; D% ~" u$ ~. l- J* s
直接使用 偏置面 不是更好

+ ?+ X) U" h' x: }$ `9 F8 L, 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:073 w9 G  Y3 q. \& w+ ]
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

  o/ A8 d" B( W9 E" J, a具体这个 我还真没怎么研究过  
% z1 m7 M' p: p' Y" O( |
( Z# x9 D  ]7 J. L- c0 G/ o不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
8 [/ A& `2 u; k  {
5 P8 d1 `) F7 z6 w7 x& e/ ]偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
) _" m/ c% K. ^! V) ^偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
% T5 R+ n+ l* R
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:128 {5 U- k) Y3 A4 u8 Y5 j& P& ~
你主要要实现什么功能, 需求告诉我  我写下看看
6 `8 p7 i) p9 H) E4 t" A5 z
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了