查看: 11471|回复: 14

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

  [复制链接]

1

主题

6

回帖

23

积分

新手上路

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

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

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

×
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:' n; u' _  S9 O) F
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;; C' o+ i) ^  @, N2 H  v9 [$ a& N9 C
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
& `$ ^7 j, s# }/ q( V- B                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);* b: D4 v9 H# A0 I
6 ?! N0 ~- ]: U( s) p7 I
                Face[] faces = new Face[1];
: L+ \$ B  z$ K                faces[0] = face;
$ o) X) e+ w  O                FaceDumbRule faceDumbRule1;* G& l; ?% v  @( }" L& H
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
8 g" |8 v( m' V" G                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];! ?# F) W' v5 Y- g8 Q4 x
                rules1[0] = faceDumbRule1;
9 K7 @4 a5 A3 j& Q" e                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
6 P" ^  r3 W! I) g
' q4 j8 J+ ~, s% a6 f" @                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();* `/ t" s% g# T: _
                theAdmResizeFaceBuilder.Commit();6 i. X5 D: _' V, `; m  h- |4 E
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
/ B& t' U8 D$ w$ M- a# T* u" X' F0 k                faceDumbRule1.Dispose();
# n1 H. [1 A& f# K  `  ^5 s                theAdmResizeFaceBuilder.Destroy();- m' [0 n2 I3 j

+ g/ L1 d( r, l/ e' K7 k: Z+ Q! ^! P! f- Q
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
5 R- w' G" [# M- f- D- Y8 S  ^
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

4

主题

3

回帖

44

积分

管理员

积分
44
发表于 2013-12-18 17:28:05 | 显示全部楼层
你就这一段代码吗?3 a' x# J4 g9 }. F4 \* e# h
其他的代码会不会有问题
9 ~3 {6 n1 H7 g2 N% B9 c, z% J这是你录制的代码吧,你的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 | 显示全部楼层
这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
% t+ J& [! i# i( iusing System;9 c) i5 h+ r( q( n
using System.IO;
9 w3 {7 Y" ~" n  O4 v! y6 h3 Rusing NXOpen;) V7 [' o' b5 ^* W& S: ]  @
using NXOpen.UF;
" R* o7 t: m$ W0 X
. _! j# b3 u2 q1 V6 E% Nnamespace InstanceFeature
/ N  f/ y7 _$ d! ?% ^2 D) y{
5 r+ C" e' r2 r0 u3 N    public class InstanceFeatureEdit* \, U1 }. Q5 I- z, F4 N
    {
! ?+ Q9 B. I% }3 z  Y. e        private static UFSession theUfSession;" w# K8 u" y: u7 k, j0 D0 ~
        private static Session theSession;; g: W( E+ R1 b. y5 \. p) v$ ~- y0 A
( V5 ]7 Y% J. P/ B  }6 l/ s
        public static void Main(string[] args)
6 H5 m2 H& F; [: y        {* Q! r/ R7 a( Z$ d1 V, @
            theSession = Session.GetSession();; J( ~1 V4 z) Q9 O. D
            theUfSession = UFSession.GetUFSession();$ N5 l; M, j# N4 x9 l
            theUfSession.Ui.OpenListingWindow();7 P2 {% L3 R" Z6 |6 i0 J* L) W& c
            Part theWorkPart = theSession.Parts.Work;
; P; s5 x7 D9 g5 y            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
+ ^/ r% }  U& u; B! d* l            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
% I4 r! n! o: |% c$ y            for (int i = 0; i < theFeatures.Length; i++)
) y  ]2 M+ k; E4 F' H+ }* g6 b            {
% [' D2 I5 E/ ?* @. U                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
# j% x, z! _' w: ?; P1 y/ y                if (theFeatures[i].FeatureType == "BREP")
; P# _/ ~" B% Y0 Z% J                {$ Z! Y! ]8 M' o$ E( B
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
( q+ ^( N+ h" h# o1 e$ J. \                    Face[] faces_of_brep = theBrep.GetFaces();
7 t# w4 i1 m" V# h                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");4 x5 W2 k3 K1 ]; Q  S0 }6 ~
                    for (int j = 0; j < faces_of_brep.Length; j++)
; y- S% _$ t$ M3 _: S7 j                    {( j7 ]2 _+ g/ _! o: b  y
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
. `" p" I6 P! W# S# L2 p, A                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");2 V' z# |( {. o
                        if (facetype == "Cylindrical")
9 i/ x7 U+ J& e* v                        {
2 c, t7 B6 }4 a  w) y- w  o                            int type;
/ [1 A' Q! \9 `                            double[] center=new double[3];
% |3 [  ?& S! [; ~                            double[] dir=new double[3];
" g& X4 b! h& `/ G2 h5 Y+ O                            double[] box=new double[3];9 U( `1 P+ D% Y/ Q
                            double radius;% _, E# r8 \3 M' e1 T
                            double rad_data;3 u/ V: }/ ]4 F' p; K7 j& b
                            int norm_dir;
2 c% H4 @1 F* l( F                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
$ G, U8 u3 A% Z8 u                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
! ]9 U* H2 [5 o0 D9 r; r& s                          //DeleteFace(theWorkPart,faces_of_brep[j]);  k6 u1 A( D5 z, J8 K6 x# f
                            double NewDiamter = radius * 2-2;
8 @0 h4 N' N* e6 z, p" }2 T                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);7 B. h2 ^& D6 W) z
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);, A" K1 w! _1 X: m! A7 p
                        }- p  q+ a* c, P% a6 x4 M: v
                    }5 t6 q* P# W' s1 F! I4 G+ h
                }
" L: w8 h5 b# @7 L( |7 A. D# [2 u                if (theFeatures[i].FeatureType == "CYLINDER")' C7 H. h( B2 D  B: x3 B
                {
+ N; u. [, _4 I+ }                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);- |1 G) O0 Y5 d' p) U
                    Vector3d dir = new Vector3d(1, 1, 1);
8 h$ R1 i" N- L" z) q. k. N% C                    theCyliderBuilder.Direction = dir;( }% o6 _! Y0 I2 l  a
                    string str = theCyliderBuilder.GetFeature().FeatureType;) Y, w& I0 V, B4 J/ X- z
                    //theUfSession.Ui.WriteListingWindow(str + "\n");8 ^! S' p/ o& p" ?' f$ S+ {
                    theCyliderBuilder.Commit();: r; D2 e  \, |4 l+ [) p5 K( }7 h
                    Point3d point1 = theFeatures[i].Location;
. P4 t3 |/ `5 F2 F3 k" [                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");# S( e' t$ w) n; ~6 ~
                    theCyliderBuilder.Destroy();* S" T4 ]. N+ z" u6 B6 m
                }% @' `) S' C" N5 z' z, [. w
            }' @. Y/ }7 J3 O
        }( f: c: C; L# a5 P

5 i( q# x2 I7 k* q8 a4 i        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
+ d, n9 F+ ?" ?# a& y        {5 i. N) ?: J2 M. q9 E" v
            try  V' {: d) r2 ]9 W4 T
            {' m8 |8 k4 {" k- G# ~
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;6 y% I5 w2 s; Z& H$ v! M. e4 \
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;" T& I* q1 S$ u6 M. N
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
. _) C' C! E4 r# U/ K; W$ {
( N) J, C' n, u8 k7 s                Face[] faces = new Face[1];
- ~) L. M5 c2 a) e, B4 z                faces[0] = face;; M. T+ n% v; u; ]- \0 T  [$ B
                FaceDumbRule faceDumbRule1;
! T2 P( F: }* w+ Q; K* P                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
; m2 z9 {. N1 n1 C5 q+ s! k, ^                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];) V0 }3 O/ A2 v) j% R1 b8 T
                rules1[0] = faceDumbRule1;
% {* t& H& U) l" ~. F  ^                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);$ L" G+ h9 A! Z1 b0 ~' R

9 h: v8 Q( l% |, l% o                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();% ^' J7 o9 f, E3 ?% _- O9 b2 ^
                theAdmResizeFaceBuilder.Commit();
  M; t( {3 O# ]' v# ^# u& J                Expression expression1 = theAdmResizeFaceBuilder.Diameter;* B% b1 n' J0 \5 h
                faceDumbRule1.Dispose();+ z! K3 t  G& ^$ Y$ L& Q
                theAdmResizeFaceBuilder.Destroy();
3 \0 x* s; S, n: h; p; `8 n9 C            }& `4 G. \2 O$ J6 b! }( I
            catch (Exception ex)
( o; R1 o$ A5 k) s5 R            {& J: ^( o4 R( g! ?
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
' K3 v0 P6 B* S6 q# ^- @+ W            }
7 @" V" L+ E% J' t" T        }
4 \0 v7 q! x5 t$ L, x
8 Z& s4 j  w  }" b4 p        public static int GetUnloadOption(string dummy)4 [/ {+ X2 d! p+ m" V
        {9 T4 g' R1 O6 _1 O5 ]0 Z5 R; p
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
/ U/ @" u( `" J" T0 S            return UFConstants.UF_UNLOAD_IMMEDIATELY;
/ ?+ g1 p+ w$ y2 Y        }; `# z  E9 V% `3 O! K
    }
& m+ j" `! m: Q/ J2 L}
5 [- F: e  Z4 w3 b2 P/ h) 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:25
2 M. O6 v. K3 k  X+ i+ l& P. K如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
6 b) z1 E) {* e# |$ B* R& q, C! y, P/ b
估计那个地方要释放内存 & S, j7 }& R5 A& ?# {3 U# G6 I
/ F! l( m9 @3 I
这个需要调试的
! e- h* ?0 Y' U2 x9 F5 ~) e* b+ x# a/ y
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

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

' |5 y( p# [/ O4 R) L  W另外你干嘛要用同步建模的功能
  D/ E; }2 \* [6 m; e  |* V, N! H- ~
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-18 20:07:44 | 显示全部楼层
mildcat 发表于 2013-12-18 19:28
, ]. Q$ A; C- L* Q另外你干嘛要用同步建模的功能
& C( T% n# \) |' L1 h
/ q! P$ q2 q  y" O' R: p直接使用 偏置面 不是更好

: F0 z2 K# L8 ]7 M偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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, v; |, u4 h/ O4 O" M2 D1 C
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

& T* b( J8 w' u3 e具体这个 我还真没怎么研究过  : {5 ]7 a/ Y* ]
. e+ e$ U: \1 s2 {* w2 Y. U0 K  ^8 m9 a
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题: q6 Z2 _" a1 G" p4 N) Q; \1 u
# ?5 D7 H) l7 q3 y1 a% t( n, w
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

320

主题

226

回帖

9784

积分

管理员

PLM之家NX|TC专家

积分
9784
发表于 2013-12-18 20:12:11 | 显示全部楼层
坚守 发表于 2013-12-18 20:07
3 ~* R8 u( T# e( p偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

# [' }# S# |4 n2 R4 A你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

1

主题

6

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2013-12-20 09:27:11 | 显示全部楼层
mildcat 发表于 2013-12-18 20:12' ?0 i; X5 p/ c
你主要要实现什么功能, 需求告诉我  我写下看看
3 t, F$ Q; g2 I1 w  R  V
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

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

本版积分规则

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