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

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
+ J) k" M) I' F, c* k5 h8 W) eNXOpen.Features.AdmResizeFace nullAdmResizeFace = null;' o4 H7 A. j# \2 N( I
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;$ \( p6 U" E5 R: c0 L
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
- `! T1 s& s1 t0 P! U7 J& I) d0 n2 a  e
                Face[] faces = new Face[1];
8 |$ k* k& k! s                faces[0] = face;: |. q# C1 {6 N" |2 w9 n
                FaceDumbRule faceDumbRule1;
" K( Z% a+ T$ C& }- [  s                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);; R* A% M7 E/ P, v: E8 @! E2 R
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
2 T% `: D( G! W/ s' W! u                rules1[0] = faceDumbRule1;
% M6 t; |1 o- b                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);% L3 x) I/ D6 c. _1 |1 B  L" ~

3 D4 {9 ?9 ^, V8 m                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
* T' G4 T4 I9 a                theAdmResizeFaceBuilder.Commit();) [+ P0 L! }  k3 ]0 R& f
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;1 K# @) y6 W% A6 o; o" t. M
                faceDumbRule1.Dispose();
4 A3 \. m2 @* t0 U                theAdmResizeFaceBuilder.Destroy();  }0 i/ a; y/ l- I9 D: ~7 Q
2 |" F3 O. |3 t
' I( T2 `) k( N4 V$ J
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
' e4 n2 O5 U1 o% k- H
上海点团信息科技有限公司,承接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

你就这一段代码吗?
% X5 S7 @+ r8 G. N% U其他的代码会不会有问题
$ j. X1 f: V* K+ V这是你录制的代码吧,你的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

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
  Y6 H- d! {# Q* c: s* Husing System;
/ n4 ]% X8 D) P8 t! Z+ nusing System.IO;$ i& {$ y# T' s* r8 u. V
using NXOpen;
' a4 v. F6 ^: U& `5 e' h' {5 e3 Kusing NXOpen.UF;
% G4 N2 {4 J3 ^& q2 s. ]* M
3 f% I6 I+ e0 @+ s# @0 [namespace InstanceFeature
2 A4 a: V6 O3 l: d' Z7 f$ v% h{
6 ~2 I. e7 G$ F2 p# o( A; |# }. _    public class InstanceFeatureEdit; U- q% U* n% E: {
    {
5 i$ M4 m" u* n5 Q6 Q% ]5 R7 Y        private static UFSession theUfSession;0 M4 }' X$ s' C6 \' F' p
        private static Session theSession;& a9 Z0 n6 _- P6 L

0 L0 I) |4 @' f  H) y1 |        public static void Main(string[] args)4 P; G! L6 C( t6 K, S; b$ f# y2 S
        {
/ E' k, ^- x/ M& U6 d) n            theSession = Session.GetSession();/ B  M0 l& Q; Y4 Z- Y
            theUfSession = UFSession.GetUFSession();& y! I% d3 u  [) I
            theUfSession.Ui.OpenListingWindow();0 n; D% w* x' w: U. ]& }
            Part theWorkPart = theSession.Parts.Work;$ S4 |7 q" N1 W9 a. ]' }8 l; G
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
% A# i" }2 j: J; ?' y            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();* A7 a3 A! f5 \2 \% _% l
            for (int i = 0; i < theFeatures.Length; i++)6 A5 s' O1 N/ d8 w" K4 R0 }
            {: I" M8 p" `4 L2 f
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
0 J8 [) ]! p0 n, H                if (theFeatures[i].FeatureType == "BREP")
6 i/ ^( E) N: q9 D                {
4 V) I: |8 {6 T' [) a0 \0 |; l                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
& c/ S/ l, \/ u" L                    Face[] faces_of_brep = theBrep.GetFaces();
: V9 A2 j0 R& D" c: a+ a                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
$ p4 E' J" P2 q3 K4 ^% E9 J                    for (int j = 0; j < faces_of_brep.Length; j++)( |% \  m5 I6 P$ u# W8 m4 A# j* W
                    {1 o6 o1 H, p* D
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();  k# g* q) T+ o) w. C
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
8 Z; z  V7 U* \; U# W0 o* f                        if (facetype == "Cylindrical"). |0 p" F$ P9 P$ ~) j3 ~  v$ J
                        {5 |% }+ A4 I- L, K
                            int type;
6 j5 L0 |* Y; L* E2 O1 E& Y  U                            double[] center=new double[3];4 u1 M) Y7 M2 s
                            double[] dir=new double[3];" C! Y- a9 W) r- N1 v2 P0 ~
                            double[] box=new double[3];1 f3 u. ^/ n+ A1 E
                            double radius;
! f4 a! C4 z( A+ a+ n; W                            double rad_data;1 }" l8 g  u' `
                            int norm_dir;& B' P# M- F! l$ M1 v+ V/ l' C
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
# t# T1 _  c! U* A1 t, |! M                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");( _! a" q' s& [3 O$ h
                          //DeleteFace(theWorkPart,faces_of_brep[j]);
, M% h6 [; t* t1 Y) q                            double NewDiamter = radius * 2-2;
; t/ b" G5 V4 ?+ h9 }7 m                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);. L& v) g+ v; M  f& u( [* h6 B$ \* j
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);8 p" T! _4 L( s  I. e+ T5 Z
                        }
9 v5 s/ m9 V; T5 I  z                    }
& P! i7 b6 d4 `- y1 X7 l. k" S! j                }1 r% B% T: g6 _2 u8 c
                if (theFeatures[i].FeatureType == "CYLINDER")9 c) w$ T! ~* ?% w/ P& j  z
                {4 W) d$ y$ i, G  }$ ~8 `# q5 |
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
# u' W  X8 @$ W                    Vector3d dir = new Vector3d(1, 1, 1);1 c! h" Z7 M" @( Q
                    theCyliderBuilder.Direction = dir;( V- |3 i7 x$ t- t1 |& o$ J+ Y6 h
                    string str = theCyliderBuilder.GetFeature().FeatureType;
: w% D0 @, I# b, e5 U4 {                    //theUfSession.Ui.WriteListingWindow(str + "\n");
1 L) N, W" G, }0 z' k, Y                    theCyliderBuilder.Commit();3 @, p# q' J$ }, W8 L# D$ E1 p
                    Point3d point1 = theFeatures[i].Location;! o2 P3 p9 L9 @5 ]$ o; O
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
6 V( d2 Q+ a" N                    theCyliderBuilder.Destroy();
$ `) l" P, X' o) _7 Z1 K: s                }
& X! f1 I& i, _4 t, W6 s9 \            }5 X5 `9 `* ]- c8 u$ @" l( r7 W
        }, D. t5 x6 t% h1 r5 {2 Z1 C: H
. d) q! A& H( ?9 G, ?" K
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
& c, l, Q; z/ Q# T6 Z- b3 n        {
$ Q0 q) {0 z! k8 R6 R7 a2 @- ?  h            try" Z. ~" s% i, E& y8 N
            {
- x1 o; @7 b7 x, c7 ]0 o                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
$ A3 i5 N: i% e4 X8 q0 _  i/ V                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
# N# O; s, u9 @1 J9 x, y& ^                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
) x2 E" K* V1 n# S& x1 O! W! I; M* o) J1 D: n8 k
                Face[] faces = new Face[1];
+ b9 B' N5 C4 h) x                faces[0] = face;. j, @9 f* X# A8 k$ |9 s
                FaceDumbRule faceDumbRule1;
- u2 I; D! W8 Z+ n& E                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);* c3 c: o  S6 Z- j
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
8 e" f3 P1 ^4 g& r" a" l                rules1[0] = faceDumbRule1;4 z0 ~; e4 C6 a3 O2 D$ W
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
# P$ ^4 K( p; }( K/ k" I
+ `7 t9 V* |6 g: `                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();7 p5 @+ G2 k) {6 h! V
                theAdmResizeFaceBuilder.Commit();
7 P/ e8 c: B+ e- |+ k4 B) O4 r, {                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
; C' |* Q  W0 f/ _! n: t                faceDumbRule1.Dispose();1 ?3 u4 b$ f: V9 D$ E  r3 S/ X
                theAdmResizeFaceBuilder.Destroy();6 f# m- i, o& q  ~7 D
            }7 U3 j  p2 y) ]$ d  P' R4 n4 b
            catch (Exception ex)% `  P# n( c- s# s
            {9 Y. l7 j# X# b' o
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");! z' b/ ^9 ]( p( L/ T. L
            }
4 x, F) W4 A1 b9 V( t! q+ i        }
+ K6 c; b, ~) J6 H2 A
# t2 `7 d. f& x& u  [; B) c        public static int GetUnloadOption(string dummy)
+ q$ a0 J! s! c4 f+ n4 B        {! J7 Y  Z5 I# D) T
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");4 n4 u* Z- o0 j( g) Y$ s8 y
            return UFConstants.UF_UNLOAD_IMMEDIATELY;
) z* b2 y9 r( C8 p# X8 P% p        }
7 H+ v+ g# t# F' P$ D    }
9 h+ W. x+ d$ }+ R5 |2 }1 b}: J8 ^1 I$ }3 |; U
上海点团信息科技有限公司,承接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:252 Q6 q" s5 J0 _1 @# e$ v) {
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

) l, F/ ^. {4 W( w6 ^; f" O! t8 c估计那个地方要释放内存 9 @9 ^# \! z' `& ^6 {
2 K* x: H  ?6 ], r. X- P5 X
这个需要调试的 ' p! c; u0 h& ]% ^# q
- D  s, v9 |8 k; n* l
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:253 U( X# p" n5 p+ L" i! V
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

% U" M* d7 a0 g" q* K4 L! [9 @另外你干嘛要用同步建模的功能& j) e$ E3 [! j' y) W7 |% Y

7 B$ y8 A. U* M直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28
% S2 m" T$ H8 E; p! J& y0 U另外你干嘛要用同步建模的功能) i* i/ a. U2 R9 b0 u9 p

: h8 e1 D6 `" m1 @( W  i直接使用 偏置面 不是更好

: y! a+ P6 V/ O* M偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
& d) o: T9 t4 {/ \5 ^- i( q偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

2 ?& n. L" ^2 {4 k* m: f具体这个 我还真没怎么研究过  
' p  J' A% X+ t  {! A
6 G* q6 S8 n2 l/ F$ U不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题% i8 L# m- S6 z. ~
- _, f2 B* b& g: G: M$ w
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07
9 M/ `$ U/ f1 m偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
( p2 i" M  \' a# U6 @; Q
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12
1 O% A$ E2 X/ c$ y  U6 e5 w6 X, E你主要要实现什么功能, 需求告诉我  我写下看看

+ W$ D2 i- I& O% d8 J我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了