PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

坚守 发表于 2013-12-18 16:26:08 |阅读模式

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:) U8 }# i4 j* a
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
6 `8 l/ o- J6 k/ S                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
7 z) ]: ]1 a4 o/ [/ H                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);$ C" |. A7 C1 z- q1 }

9 k2 \6 \9 x0 W' [" F1 j/ z7 N                Face[] faces = new Face[1];4 l9 j/ a& o* U* }9 I$ u# w1 x
                faces[0] = face;9 _: z+ n: O5 j0 \, p
                FaceDumbRule faceDumbRule1;
3 \9 R% G. e+ U9 H7 s) s/ A: W$ n                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);( I4 n0 C  Z- H) p  c0 Q+ g, c
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];. J& Q# u# D/ D2 g# W% c: B& @# O, }
                rules1[0] = faceDumbRule1;: ]8 c+ R9 t! B0 A* {8 s/ n/ g
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);/ R2 h2 X0 |' c

% X$ X7 ]0 Y4 F* o9 v/ ~                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
1 o. x! H2 {  r7 b; V. ]) t; M                theAdmResizeFaceBuilder.Commit();1 e; E' |" h/ y* Y* {% A- v1 W: _
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
- n  E% n; m( Y+ U% |& y% x/ ~                faceDumbRule1.Dispose();
  I: y9 z% w. S* W) g6 E4 |                theAdmResizeFaceBuilder.Destroy();* b# p$ f& _3 L1 ]' `: N; ~6 C8 r
7 z9 U$ b9 [- s: S! j
% B6 ]( u) J- h
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值3 [/ ^9 C9 |2 ~  b4 E; D6 W
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复14

admin 发表于 2013-12-18 17:28:05

admin 沙发

2013-12-18 17:28:05

你就这一段代码吗?2 }7 J+ _% D- W. a& H
其他的代码会不会有问题0 D" I) J) t8 h
这是你录制的代码吧,你的face选择都是同一个?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

坚守 发表于 2013-12-18 19:22:24

坚守 板凳

2013-12-18 19:22:24

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
  r) d5 g; V4 u) a" g6 M4 gusing System;8 ]% x1 T- N, T* |2 d) t4 o
using System.IO;& W. `, y' t: F/ i" R2 k/ a
using NXOpen;
/ h9 l& f- z. Qusing NXOpen.UF;7 M( P0 v# x1 i, I4 q

! ^% z% U3 W) a8 Lnamespace InstanceFeature, p6 p; ~" g7 ~/ {8 C6 ~
{
9 T+ ?: N) F- _8 J- k/ d    public class InstanceFeatureEdit! ]1 p1 m5 n/ @5 r3 Z/ T
    {
' e! E  O- R/ y) f        private static UFSession theUfSession;2 [. ]9 F8 U& ^' O
        private static Session theSession;. g9 e" u1 B% h' I9 E  T1 H7 [* o
2 h- q8 g1 ~4 D+ ]8 C: D
        public static void Main(string[] args)5 c0 u3 ^9 D( O2 x, X) s/ ~
        {2 B- Z; L% v6 U; Z, k
            theSession = Session.GetSession();
5 f$ R. X( N* B* v9 H/ Q            theUfSession = UFSession.GetUFSession();0 Z, m: O1 a) J* D9 D
            theUfSession.Ui.OpenListingWindow();
  K  A5 J8 N+ O9 ^            Part theWorkPart = theSession.Parts.Work;
* O# U# M9 M( U, h% v            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
8 c2 x0 E" F. q            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
. M  E# L& K& @$ P( S; E3 U            for (int i = 0; i < theFeatures.Length; i++)
+ y  ?; W0 S0 l, x9 h1 f/ Z            {2 b6 v) k/ E& _* v  A
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");! V3 q5 X# }1 |+ \) a
                if (theFeatures[i].FeatureType == "BREP")# o4 l& T' e' S! {% T+ E0 J
                {
! Z% F5 s" y% t                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
3 g* i! T& Z* L* L                    Face[] faces_of_brep = theBrep.GetFaces();
# Y+ @0 E' X4 y9 b4 \; r& }                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
  V) r- z  g. ^2 E0 I$ s; D                    for (int j = 0; j < faces_of_brep.Length; j++)8 f& x0 v; b2 i) M
                    {
. Y# s  [7 u! S/ k' @/ B                        string facetype = faces_of_brep[j].SolidFaceType.ToString();. r$ Q! Z+ m: x0 a) H: Y, U
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
9 K% {# e! S6 U9 p4 L                        if (facetype == "Cylindrical")3 o+ z" Z% ]/ B( f3 G0 x. L
                        {
) I6 Q" j! `$ h                            int type;# W7 M% Q0 {& B# f' U) a- W( y
                            double[] center=new double[3];
, q! @! g, H. t/ u% y5 M% [                            double[] dir=new double[3];
/ q$ z& I' y. R0 y                            double[] box=new double[3];( |  \' ]5 a3 _+ W. h
                            double radius;% S# G( K+ h% t- p4 ~$ c" W9 q
                            double rad_data;6 H2 w$ i  V) h; a+ Y
                            int norm_dir;& l: c7 {- y5 q- @" h
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);  l. W2 U; J) s5 p, j) M8 ]' f
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
! e1 [6 P5 O  O                          //DeleteFace(theWorkPart,faces_of_brep[j]);3 m" k) j, g7 R, e; I& @3 R7 ^8 D
                            double NewDiamter = radius * 2-2;2 J% A* b% `/ X& ?( @& V
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);. b) L) b# u9 U( {0 R5 w
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);; [* U- Q. ~/ `- L
                        }
" z3 \$ y  F3 l( M                    }
5 d+ b5 S) ^7 @* h" U6 Z                }* X3 }1 M* J0 Y$ J
                if (theFeatures[i].FeatureType == "CYLINDER")
1 M- Q# c' z% N5 B% h& B# y                {' ~: o1 A- J+ m3 a# _7 m9 W
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
# I2 B, @+ S6 a$ [                    Vector3d dir = new Vector3d(1, 1, 1);
: [8 I' c" B) P; ~0 o  o* X. v                    theCyliderBuilder.Direction = dir;
8 y& T. `/ x% w) M                    string str = theCyliderBuilder.GetFeature().FeatureType;5 a: G3 {0 @1 n' l9 Z8 `9 {  i3 P
                    //theUfSession.Ui.WriteListingWindow(str + "\n");! X3 n% D% W" N+ |/ i/ J% D
                    theCyliderBuilder.Commit();! d% X0 a/ I/ i% N7 m6 e) \4 m: Q
                    Point3d point1 = theFeatures[i].Location;
8 x1 d! [. r  N' d                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");8 [, p* o# O6 T* x
                    theCyliderBuilder.Destroy();4 |$ M$ ~, A( `$ d1 y& J) f4 a" s
                }. I% e: H+ R, l
            }
+ ?3 ~8 m6 [# G8 E% H8 @        }) ]; n) y- Y9 _. Q' [

: Z9 [+ D1 |$ B) e  N        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
4 t& I: E3 i. o, `1 v# a; E        {: R( P" P/ d& v7 h- `( ]: _
            try4 F9 q- i! I4 _, S
            {5 S" x% x) J: @$ |1 M
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;% }& t+ k; H8 t( s- ]! P. c" V
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
- c( K( _6 |2 E* l: I- O& c8 V; t( K                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);) W9 k! x7 X/ H7 q9 u

5 D% B, P/ i7 B  E# p6 x+ h8 ~9 @                Face[] faces = new Face[1];+ W9 {1 \( J+ X; m8 O) |7 F
                faces[0] = face;
4 T* h9 B$ u* _# |# [% ~9 h& K                FaceDumbRule faceDumbRule1;. G% \& D; M2 \& z5 d, s4 X
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
/ x; p. @/ J# J* \                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
9 W7 f- j$ a7 H                rules1[0] = faceDumbRule1;/ Z& Q+ q! f& a* H' W( {% j4 F5 q
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
7 M* _5 R4 l" Z% \3 D
9 u; S( T3 K5 g5 D                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();- n( q- i4 M4 L5 I! v# ^
                theAdmResizeFaceBuilder.Commit();
7 s( }3 I# n5 R. R& l( S7 _1 D% G9 ~2 ]                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
: F& o& C/ Z/ a" R( w                faceDumbRule1.Dispose();
' z% t3 P+ ]: A: y8 P                theAdmResizeFaceBuilder.Destroy();
' D+ W6 P+ k+ O- D            }
: g; v- C8 Z3 t8 n7 }            catch (Exception ex)% z' U9 l% z% a. o: M
            {
8 |! Y' J6 B9 k1 p5 q                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
; N2 e# r$ ?* D8 R$ F7 j% `' n1 U            }1 p, i; T8 u* D" i  f
        }
  M1 z9 w2 B7 J+ V/ N4 y$ H& E9 z$ b6 H2 l
        public static int GetUnloadOption(string dummy)
" G* e( U1 m. y5 i; m: w        {$ E9 T3 F1 {8 R1 k: T; Z6 N
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
/ \; k( @3 ^2 |3 x/ F) j1 X; E            return UFConstants.UF_UNLOAD_IMMEDIATELY;- F" ]+ O7 g9 H3 J% a, E% C
        }) R1 {. B3 N% j
    }
7 y! Q6 E$ z! ]+ t/ S2 r- l; r}8 O! u' B4 r- j! h. \! v$ h
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

坚守 发表于 2013-12-18 19:25:28

坚守 地板

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.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

mildcat 发表于 2013-12-18 19:27:47

mildcat 5#

2013-12-18 19:27:47

坚守 发表于 2013-12-18 19:25* N( {" i3 Z: o, }3 g! W- {% d
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
9 `! @; `1 Y! n+ P
估计那个地方要释放内存 ; \! V, c& ~* b6 l: A" p
" C- p/ k! `: g' d& V( h+ r
这个需要调试的 ' K0 c0 f! |8 r) Z
3 T7 c: }6 S% ]: m" m  K
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

mildcat 发表于 2013-12-18 19:28:38

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:259 i+ r( ]. x, H
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
. H4 H+ R7 Q1 n/ n$ `. i2 C
另外你干嘛要用同步建模的功能* R7 p: Q' x3 k
6 Y! H1 z7 H# n# o8 N
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

坚守 发表于 2013-12-18 20:07:44

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28! H5 `! _: W' z' m( b8 B
另外你干嘛要用同步建模的功能
9 w5 {, @! g0 z# e$ s# @/ G
1 R& Y. g- M! E- K& K直接使用 偏置面 不是更好

6 t4 s: T9 ?' ~' g偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

mildcat 发表于 2013-12-18 20:11:32

mildcat 8#

2013-12-18 20:11:32

坚守 发表于 2013-12-18 20:07
7 o% k  ]. `+ [- X& ?偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
- O) Z# j* z# m5 W/ N& V8 b+ |
具体这个 我还真没怎么研究过  8 r; R, y8 S* L

5 S5 B7 Q6 `8 c, z% h不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
# U8 c7 y3 D$ V- z' R. e) \9 _) C  k$ B9 ]: c/ J9 K3 }
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

mildcat 发表于 2013-12-18 20:12:11

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07' v1 q6 b4 P1 c3 Q
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
6 E; W3 c4 R% _1 O5 ]. d
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

坚守 发表于 2013-12-20 09:27:11

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12# j/ e5 x5 }' N
你主要要实现什么功能, 需求告诉我  我写下看看
# l2 ?" I9 h; Y$ K4 Z  }/ F
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了