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

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
9 K8 o2 {) q/ b( SNXOpen.Features.AdmResizeFace nullAdmResizeFace = null;+ c! h0 J7 h# T! e9 ^9 Q
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
* {$ ~6 {( W, |  i8 _                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);+ q) D5 K2 r6 U

$ X5 P2 {* ~  K+ i6 _                Face[] faces = new Face[1];
7 E: }8 u, q1 S" S* Q& s7 }                faces[0] = face;
8 Y: E5 z; I- I8 L3 V3 U' E+ ^                FaceDumbRule faceDumbRule1;
6 `+ j& D1 I8 g                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);0 o! b" R8 j' d1 ~  s  d
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];, Q. P0 y& H0 {* q- O
                rules1[0] = faceDumbRule1;
) g3 a5 \1 {; U+ I, I9 g1 G$ ^                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
. q# @- o) x4 G9 h, J0 {4 C9 n: `1 e$ C2 h! q
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();8 o' U9 l5 m6 V& d+ p2 V
                theAdmResizeFaceBuilder.Commit();0 k4 ^3 t1 ]) d0 N4 p$ d$ m# s3 D- G
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;; c" L9 P5 q, E3 B! Q5 S/ H. A' u
                faceDumbRule1.Dispose();: R" H' L1 L2 C6 a9 \1 @+ n% t
                theAdmResizeFaceBuilder.Destroy();- d  T2 e( J) Z1 U
& j, P/ Y; p# }9 _  V0 }
" x' K$ F& W2 f- S- V
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
! m5 A9 T. W' w9 z5 E
上海点团信息科技有限公司,承接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

你就这一段代码吗?- U' E/ |( t4 N' l% h
其他的代码会不会有问题
( v2 t2 {) {- W2 R& r$ y4 p: {' S这是你录制的代码吧,你的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

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:% @9 R2 l8 H# K" m0 r2 h/ K
using System;4 L' V9 h0 Q, ?9 Z! q
using System.IO;
! x6 U) o" j( i6 g3 _using NXOpen;
. ~  `. L/ ^4 b1 kusing NXOpen.UF;
/ y' }1 J6 P( _2 u+ m' `5 m: O! d5 p0 o
namespace InstanceFeature+ }( g, D  E( p
{% @" A5 N6 u! l
    public class InstanceFeatureEdit
5 [6 f5 ~* `) y) j& }    {
1 e% Y/ [( B( x% L( @! a/ Z        private static UFSession theUfSession;
2 H4 t/ p% r# I& C* j7 Z        private static Session theSession;+ [6 m- z+ @; @* o. i
) y0 U, J# f: a( p" `% S1 P& p' Z
        public static void Main(string[] args)
: k: z& s8 Y0 C' M        {
& ?& C' J; _& G, N! E            theSession = Session.GetSession();/ N" s1 O' Z$ T( s4 _
            theUfSession = UFSession.GetUFSession();5 v5 ?& S& |, d7 t. \$ Y: g
            theUfSession.Ui.OpenListingWindow();0 d) q, U) i7 |- G7 L& Q
            Part theWorkPart = theSession.Parts.Work;
& p9 Q1 `! z) }( b& K            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;2 b/ U0 a- A2 T1 `7 \
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();& b' E, s) d8 ?
            for (int i = 0; i < theFeatures.Length; i++)9 o5 S' {, i0 D) V9 l  g* ]8 `
            {
# I& r9 \: `, J                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
8 f( {. z1 o/ C7 N0 V) J" j- L                if (theFeatures[i].FeatureType == "BREP")4 O! r. u9 g6 ~
                {  f% H/ B: ?' F% l  v0 y7 F* ]. Q
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];7 d: `" v% }' i% {1 \5 Q
                    Face[] faces_of_brep = theBrep.GetFaces();
6 N' H$ T" b5 ]+ _( z1 Y" t                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");4 L3 _2 g: A! ^- X  f5 O
                    for (int j = 0; j < faces_of_brep.Length; j++)2 Q* P* R2 N% I9 J  _8 _& N, o
                    {0 k8 w( F: C, @2 Y) S* U4 ~+ b
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
5 v3 ~+ D, g  i7 P/ T                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
7 R1 S: y1 E: {7 l; w* n2 m                        if (facetype == "Cylindrical"): `) Z' d0 W* g% Z' c
                        {
. o: D% y) N) a4 b                            int type;
, r3 h; G9 V( A: _: U1 D  b                            double[] center=new double[3];6 t5 r- W1 P" T2 E2 x) g
                            double[] dir=new double[3];- w* X: }/ R. u
                            double[] box=new double[3];
& ^* M! {: n: d6 R                            double radius;0 h* B" _3 _- e, f+ B$ y7 @
                            double rad_data;
" I* y6 D1 Y; g% ?6 r                            int norm_dir;
3 q  d1 l5 d  X- v+ _3 `9 b$ y                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);9 H5 T: ~  F2 V( p9 h
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");6 u+ D4 K7 F1 J( i8 X/ A" {! V7 y7 ]
                          //DeleteFace(theWorkPart,faces_of_brep[j]);
# f! H% ^, S# x: n0 O5 B                            double NewDiamter = radius * 2-2;; R( U$ X. |* R4 k# B
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);& Z' R$ w& Y$ i& g% |& D* w
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);
. K4 d/ _  S! U+ l& {                        }- E3 ~" ~" }/ G. I) F' e" \
                    }
1 W/ p+ f3 R: T8 X                }
$ c) o( Z% R2 f1 ~8 W# z  F, j                if (theFeatures[i].FeatureType == "CYLINDER")
+ o; _3 g- h9 {* k  y; M, c                {
, F+ C/ I8 `1 C. z# X! Y0 `0 ]                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
# K! \5 @4 \) |! P                    Vector3d dir = new Vector3d(1, 1, 1);( u1 u# k" S  d5 S6 }
                    theCyliderBuilder.Direction = dir;2 v3 ]& b! q: p3 h
                    string str = theCyliderBuilder.GetFeature().FeatureType;0 Q2 Q6 n3 R1 _9 i
                    //theUfSession.Ui.WriteListingWindow(str + "\n");
4 {' c1 `1 d" E" ^4 F                    theCyliderBuilder.Commit();
' d( C+ m- _; f                    Point3d point1 = theFeatures[i].Location;; H( F1 [9 ~# V6 x
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");! T1 ?" v& m3 W0 C% M/ f
                    theCyliderBuilder.Destroy();
5 m4 X2 I2 m2 L+ y# l                }/ ?" _) T8 I1 _' s  K6 s; b
            }5 _- ?  U+ l, }' q7 C
        }2 q; Y1 B6 y* @+ [

) @9 h" e1 G! `7 l0 C        public static void ResizeFace(Part workPart, Face face,double NewDiamter)8 l1 ^) A5 ~( Q0 _% V8 `" l
        {
  r3 o% f8 L1 n5 E            try
! o( P9 L8 s: f+ ~            {
9 ?& I# L0 b; _( V6 ?: i                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
: Q" e! e1 w) _4 s" V                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
) y! w& k" P8 z4 q1 a# L                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
1 X) c6 l5 t9 G/ C/ {* Q5 d3 {
! W9 {2 P  l5 M1 _                Face[] faces = new Face[1];
& t/ s& \/ S( O4 F1 P! z6 Q                faces[0] = face;
% c. N% J6 j- |                FaceDumbRule faceDumbRule1;; o# i6 I: V" p* B* Y" ]
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);; D$ x2 {4 U7 X
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
. x5 y: B! H+ ~2 P. L9 J7 i! c; g0 M                rules1[0] = faceDumbRule1;
& c$ ]  v! ^% s8 K. H; F                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);: f- U# T8 F' ?# E1 N+ R* ?
5 C5 n/ E& Z* p, j4 }1 S
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();6 o& {* a7 f) t  E3 g& T
                theAdmResizeFaceBuilder.Commit();
. p! g& ]2 Z6 h- i; o6 X8 B+ i                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
2 Z# Q% l* g5 H7 K6 ~+ v- E                faceDumbRule1.Dispose();! |2 X  n8 q! Q4 _6 f" _) R$ T" p$ B
                theAdmResizeFaceBuilder.Destroy();/ p: N. I) n) X5 w7 J) V( R6 k
            }
* q% ^/ C* L- I, K            catch (Exception ex)
" v1 [5 s2 d5 @            {3 l( L1 Q0 I; K) H3 ]
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
1 `. T7 t. ]- ]; |! B            }
) e' j! f2 U+ N2 {* l( T% D. ^        }
, j9 e( _' ]: }; k% z  Y
1 i- N3 g; S) }1 T1 @        public static int GetUnloadOption(string dummy)/ S2 T3 F+ L8 \- |
        {, l9 S3 }7 o( l6 r
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
) M6 v- f/ o) x6 T2 ^  d            return UFConstants.UF_UNLOAD_IMMEDIATELY;
) K7 ?9 O5 _" z8 T3 F1 T" V        }7 Q# C/ c& K- i" t6 h( d1 C" M
    }
7 B. g, g  }4 g1 @. U/ h}
2 P; n6 f- _! J6 g5 t2 }9 A8 q+ Q! b
上海点团信息科技有限公司,承接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
% v7 M. _1 f' Q如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
( |1 ^* E3 ~/ r  }  z/ Y
估计那个地方要释放内存 2 @3 U- r. G. [/ R( d: |

$ E- O" ^+ D6 X# K+ c: l, A这个需要调试的 1 H% u8 Q) }" p2 a$ I# t3 o6 C
2 l. ~" F7 R& g' _* R; B
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:25! T, Y' E; Q2 @1 G- M- w
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
$ J7 _5 E" [3 c' L
另外你干嘛要用同步建模的功能
3 A) N; B$ n; I  @6 M, I
0 Q; V( T; e  S$ @直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28
* [0 E/ ~- K) _2 q3 e0 o另外你干嘛要用同步建模的功能
% w$ p6 {- F& A# j2 W$ |4 G3 P. b6 P7 X7 N2 Z
直接使用 偏置面 不是更好
5 g8 N1 F0 q1 d
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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. `  F( m  {  P! c# {3 {$ T1 k
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

9 f& f5 ?% d# c1 u: y* S! X  K具体这个 我还真没怎么研究过  " A9 B' i0 }" s! j4 S

  g7 E6 Y6 e9 \" r  k不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题5 j  [- Q/ g! P4 M

( l$ d; o" [# o$ O* X偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07. {7 j1 j# r1 o2 J
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

% }- ~) x$ U2 z& w1 b7 i你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12
0 F1 F: M9 h. m; A你主要要实现什么功能, 需求告诉我  我写下看看
4 \& g  R9 @* }2 ^3 T
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了