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

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

  [复制链接]

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

1

主题

6

回帖

23

积分

新手上路

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

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:  U1 I8 Q7 U4 S$ h, V: T
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
2 A1 g- J9 Z8 z                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;) Z& F2 V% {* c3 k* V* E
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
8 c  K4 H9 [" K! a6 N* T
8 D# R! _# @! _5 ~                Face[] faces = new Face[1];' A+ ?/ ]% J& }5 e6 t
                faces[0] = face;- m  j5 f3 ~8 L! R/ m. b; g
                FaceDumbRule faceDumbRule1;
' h1 G8 @, X/ E9 k5 M2 w                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);$ T) m/ C# \, v" z8 I. ?2 V
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
% u3 e9 T6 Q5 y& n7 w  ~# l9 [' r                rules1[0] = faceDumbRule1;. w. R" P# N; z3 @  Q7 U5 H
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
9 v9 D- c  s( T. A* z6 j# t. i/ j9 n/ Q2 H, ]
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
+ h0 ]% H# s2 }9 }" I  @6 A3 M$ X                theAdmResizeFaceBuilder.Commit();- `# e* X6 T' E* |
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
0 e! Q3 c4 m/ K/ K/ x- Q/ ^                faceDumbRule1.Dispose();
- R7 D3 B5 a! _- I9 A9 m                theAdmResizeFaceBuilder.Destroy();
! F) e# ]2 u# J# S9 t
; {& O! d9 \; v, r6 O
1 _; d& Y/ W) }) v3 c% C由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值6 }! P! c; P4 u$ Q; F
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复14

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82170
QQ
发表于 2013-12-18 17:28:05 | 显示全部楼层
你就这一段代码吗?
: x" d  a* f% ^; s( A, m2 L其他的代码会不会有问题( H8 ]% G5 R+ j+ ]6 q; k, O
这是你录制的代码吧,你的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 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
9 N, B  i1 m# J$ `" D4 j% _: \! Dusing System;: H% H7 m- l) Q. l" p: G$ z! m
using System.IO;
1 x6 J  O: I' L8 d3 l4 t) ^) D% {using NXOpen;0 b# E3 `, `$ _! d) U
using NXOpen.UF;
% i$ V2 D0 q; W$ `+ Q7 @; b6 d' U$ s1 j. t, U
namespace InstanceFeature0 n9 Q7 d8 e5 |
{! l+ S* f: f. g5 O: b$ a7 P1 b
    public class InstanceFeatureEdit* M, }& k" j0 X0 R- {3 _
    {! c7 y; y: o. J7 {2 ~
        private static UFSession theUfSession;
: f  |- b$ p* \8 L        private static Session theSession;
) E5 |: ~+ P; n3 {* Y  L- L8 ~& A5 j8 r% u
        public static void Main(string[] args)  Z* Z1 I) h- i' h
        {& p) j; w2 P( H/ p1 |% t
            theSession = Session.GetSession();
# `: i) s/ A. Q5 |( e6 {            theUfSession = UFSession.GetUFSession();6 |0 E; q7 H- k7 y" G
            theUfSession.Ui.OpenListingWindow();
% T. W* N9 N- X, x5 K            Part theWorkPart = theSession.Parts.Work;
( f$ S3 J# F8 I8 f8 B+ e            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;$ H  Z- X8 ?$ ~: n- x
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
' H) j2 _6 X; x  J7 O( f! x( g' q, c- g            for (int i = 0; i < theFeatures.Length; i++)
, @3 d2 e; p1 R3 e0 L( R$ w( F9 _            {
4 H. [) ^- ?, @                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");8 \$ K+ v* K) T9 l( j# i9 k
                if (theFeatures[i].FeatureType == "BREP")
# @2 @1 V; P, C- F/ P                {
, N2 B& H* t( R2 J: S                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
4 O: q+ [3 |' u4 c' V                    Face[] faces_of_brep = theBrep.GetFaces();
# R& Q4 ^8 w( |  u                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");$ M0 z: `, f* c1 ~
                    for (int j = 0; j < faces_of_brep.Length; j++)
0 x0 G2 v* c( F6 K                    {
7 V2 y8 ?/ z' |                        string facetype = faces_of_brep[j].SolidFaceType.ToString();: a/ Z: f) o* I4 b
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
' I: q' B( u+ h8 E                        if (facetype == "Cylindrical")0 s/ y0 P6 j* J' s
                        {
. d5 S. g5 Z+ J( K                            int type;
- Z! o# a* W: M  s, Q: G                            double[] center=new double[3];! _  l3 a3 X+ k6 y1 x* G7 p
                            double[] dir=new double[3];
/ E2 u3 d/ u) u  q) c7 J* Y% f                            double[] box=new double[3];
8 Y& ]4 H1 Z; A4 f: }' t' T                            double radius;
# F$ m, y' V) O# I                            double rad_data;  P/ K1 H7 `$ v9 d. P
                            int norm_dir;
7 a% _+ Q: a4 |( t; Y: k" e+ r                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);) R/ X# O/ K7 @
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");' U- v/ |+ L# @% k7 I
                          //DeleteFace(theWorkPart,faces_of_brep[j]);
2 y! m% l" ?0 r+ E/ p                            double NewDiamter = radius * 2-2;' E: m" V4 Z" M
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);( {+ L# O3 h: R8 b& |9 G' A
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);; Q: b; J' `. w- z# Z; p
                        }
" K! Z, t; V/ F6 I" B; k& m( v* S# C                    }
$ Y& Z) F; }( l5 d0 ?+ S                }
- L% {  q6 X5 d' O+ G5 }) c                if (theFeatures[i].FeatureType == "CYLINDER")
1 w3 {/ B' s, H% T- {: O6 z                {" K9 a8 B+ a* ?# l0 ^& }
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
) W8 j- V4 d; J" P% x                    Vector3d dir = new Vector3d(1, 1, 1);
& ~: P( Y3 u" a* {                    theCyliderBuilder.Direction = dir;# d, I' l) {( }7 N+ s7 w
                    string str = theCyliderBuilder.GetFeature().FeatureType;  l" L- a+ d( M" e' x
                    //theUfSession.Ui.WriteListingWindow(str + "\n");
3 v6 U3 q, D2 ^( o/ K8 _                    theCyliderBuilder.Commit();6 |% A' L( i+ v9 ~# F
                    Point3d point1 = theFeatures[i].Location;
2 L/ q2 f; s( b7 ~! ^                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
+ P$ T8 @, e$ i, J& [- c                    theCyliderBuilder.Destroy();1 q# i3 v7 a$ p7 h
                }
3 B# B1 K( D7 {2 S+ m! ~            }& r+ l, K) ?/ ~8 a' j
        }5 m2 N0 q; }( |- t6 T
3 u7 R: u, s( P: b
        public static void ResizeFace(Part workPart, Face face,double NewDiamter); K1 E/ b& h# |7 f0 r$ g
        {
. @3 e* s: C' i; T+ Q5 Y            try
- k6 t1 `; n' C- S/ }) _            {
1 U# H1 w/ T7 ?: ?& p- F& i                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;) M$ K( o# r5 U. }5 P5 x
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;( n- m9 s, D! Z
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);$ Q' F( i8 m% Y7 T& H( p
  A8 D& |; [5 J& A; r8 }. ]
                Face[] faces = new Face[1];
) c. Y& \1 e& N6 ~! B* m3 m                faces[0] = face;+ x# s+ R8 T$ b  ^" e, \7 ?; c3 ?
                FaceDumbRule faceDumbRule1;) \5 G6 w1 Q. t# Z; [# G
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
7 k2 y1 y" {; F                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];3 I+ z- c9 m, g5 P/ Y
                rules1[0] = faceDumbRule1;% g9 N6 N' r) M5 \$ }
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
6 X' K! }% i  i) @5 b, k6 U! h/ K) r1 ?8 k# O* r; ?' _$ I9 X2 c
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
! i& R. o$ {  D% W                theAdmResizeFaceBuilder.Commit();2 J; _) l- \3 P+ q  B
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;+ A6 E+ V5 P/ f
                faceDumbRule1.Dispose();/ s) w& a% @3 e. n. k) s5 i  |1 N: l
                theAdmResizeFaceBuilder.Destroy();
) e9 |# `  @" D( ^- A* [& f, A            }, r8 q4 K0 S" x% p8 P. R
            catch (Exception ex)
5 r+ c# |" c' ~6 l$ G# k            {( W9 w$ D" K5 S6 Y' z0 A
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
1 @/ q8 }! b, _7 L8 z: y4 |            }
4 ]/ u2 O. _. m- k: ~5 V        }
0 c6 b$ E' m0 e4 u2 {7 I% ^1 q6 V
0 G+ w: W3 S1 _- F& R* i. `9 ]        public static int GetUnloadOption(string dummy)1 ~. Y  }7 V, p
        {
  H* B! _0 Y9 @- g            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");( {' \5 D0 j! E% R
            return UFConstants.UF_UNLOAD_IMMEDIATELY;
7 k# U& r1 x, r2 p. q        }+ m  v6 g1 ~8 Y$ p" I  z
    }6 e# c" ~) K/ H+ R9 A* E8 v& h
}
! J3 `; J4 {/ c% r, L
上海点团信息科技有限公司,承接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:257 N/ q) P) S" F  R
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
3 o0 M7 Q# i3 m: Q
估计那个地方要释放内存
2 o1 e" e' |0 U8 y, u" R; L; Y& i# M- e4 {) M9 r
这个需要调试的 2 M! s* ~5 S1 N, P7 v- M+ ~; b" s

7 a9 m6 c6 D+ f; F$ QJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 19:28:38 | 显示全部楼层
坚守 发表于 2013-12-18 19:25" E, s& _3 L$ |8 R, h2 z
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
# i/ ]1 {5 J6 V$ q7 v
另外你干嘛要用同步建模的功能
  k' h# ?7 d$ b6 K9 R/ m# g) z1 a2 \1 x5 B0 `
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
, x2 d3 ^! C1 Z6 l: |  Q- O: z另外你干嘛要用同步建模的功能: g) @8 O, E4 t1 i

# o( L, B  e* k2 G' N% e直接使用 偏置面 不是更好

; @1 ~# x  G) d- l5 w- j偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
, }- M0 Y/ B4 J/ T9 i. c偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

: v+ I+ g4 Z% N/ g: M具体这个 我还真没怎么研究过  ( M" c& K0 }4 {- I3 h& ]
2 D( J4 R+ D, v, n! s8 i! f! c9 q
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
; G) z0 z" z5 F3 S' Q3 P3 o, ?+ E7 P1 V5 E; O1 V& q( I) r
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
, h7 X2 X" [, F偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
5 V7 b' a+ h- N6 j; v! R" P  N) @
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:12
' n. `; l8 t1 q  s% R+ }你主要要实现什么功能, 需求告诉我  我写下看看

' h( X( m9 k3 N# H. g我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了