PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
& H9 ^% c# t5 ?8 w7 pNXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
6 s2 L0 j' O; P' w) ~0 Y6 m                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
$ u4 w2 }1 Q- E                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
, n$ e% X3 l4 C' U2 J
, p. p% b0 j- I! n                Face[] faces = new Face[1];$ c* z9 h8 L8 E; k
                faces[0] = face;
( m. f' |6 y# W9 p# d" p  A' m/ T) d                FaceDumbRule faceDumbRule1;
& p  g  Z4 a$ n- g- S* w, m                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
( D6 h' L0 \/ C3 H7 Q! C) `                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
) G3 S1 v( \9 B( o( y+ u4 o1 ?                rules1[0] = faceDumbRule1;
7 j: _/ i8 c, s  e                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
0 F4 k/ J: ?9 E' g
* L1 l: {( L# d" I                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
: G6 }0 S* R! e/ k5 ?3 Y7 ]                theAdmResizeFaceBuilder.Commit();
3 Z9 O* s0 o6 \                Expression expression1 = theAdmResizeFaceBuilder.Diameter;9 g& l/ v) G2 a6 y: I
                faceDumbRule1.Dispose();
' {, o6 B7 W# L5 g6 g; Y3 T5 _                theAdmResizeFaceBuilder.Destroy();7 E5 V3 b7 N9 |% ]

& A( V( O9 \/ u% x9 i4 F" q7 Q9 C8 o. e2 {; j! p! W
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
' L- G# |& @- v
上海点团信息科技有限公司,承接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

你就这一段代码吗?
) F  g2 ~7 f# \1 p! _7 P' n: v0 _) m其他的代码会不会有问题1 M) ]$ m& h+ J- \( j
这是你录制的代码吧,你的face选择都是同一个?
上海点团信息科技有限公司,承接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:22:24

坚守 板凳

2013-12-18 19:22:24

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
+ d% n: q: j& z% D! W2 o, zusing System;0 X/ e% R  R. s
using System.IO;
! Y; q0 |- ?4 V& l6 X! I% Dusing NXOpen;
$ Y) q8 a3 z. _/ Tusing NXOpen.UF;
( B! C+ S: T3 u- Q$ P1 e) W7 K/ I# ~* k8 g5 _+ ^$ h, j, U
namespace InstanceFeature
/ F  w6 m3 w9 I2 A{4 a- c/ F+ ^8 j' s& L% m
    public class InstanceFeatureEdit
7 {' d- c3 B+ S2 x! V1 X    {
! t, C( W1 W1 }5 `        private static UFSession theUfSession;
$ j+ |" I5 Q& ~$ q7 E2 {        private static Session theSession;  r, X) M2 k# o

" j* Q( i' K3 B& J' h0 H        public static void Main(string[] args)9 t2 E$ X/ W: d1 S. L" P2 b
        {' N+ X1 U6 i( k* W, v: W6 q; F
            theSession = Session.GetSession();
* d- b. J$ {! Q* ]$ R# Q9 U            theUfSession = UFSession.GetUFSession();
) P% W; F) p+ j! f, y) p: I            theUfSession.Ui.OpenListingWindow();
! {# d! X8 `' I0 d; W            Part theWorkPart = theSession.Parts.Work;
5 z! L0 u' c. |9 X            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
6 C0 y% m( u7 H: Z) o7 A5 N            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();% s* S/ w( [! N* Q, O9 j
            for (int i = 0; i < theFeatures.Length; i++)/ |. \' j$ M0 s4 s5 c
            {
. N! Y8 N. f" l                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
9 [- d( P7 e, o* u7 A# S9 _                if (theFeatures[i].FeatureType == "BREP")
2 [- \0 R2 L. Z# @6 L  _                {. m+ X; d8 c; e5 G  V! w
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];8 f/ a6 }$ l' K/ A0 O! _- C' m
                    Face[] faces_of_brep = theBrep.GetFaces();
0 V% i; T8 c; I# F8 W                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
6 Q- X# t! \+ q* D& _                    for (int j = 0; j < faces_of_brep.Length; j++)* ^& X: |( X. a9 q/ w9 P
                    {: L* o! G6 d# E" M- h
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();% q) h, A9 _; g
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");$ \% M9 c) S1 {& f6 x( J9 K
                        if (facetype == "Cylindrical")" @9 u- {( B7 B2 q1 j
                        {/ @8 _  }6 _6 a  Q* I, p8 ?* Q' f
                            int type;( c' B& b( _1 A
                            double[] center=new double[3];4 q" v+ o) @4 n2 ~  {
                            double[] dir=new double[3];% K( y" F$ Z# r, L
                            double[] box=new double[3];
+ e* m3 S; L& @! S1 k                            double radius;: W+ ~9 q' q8 a" E4 K7 s2 R  h7 P3 l
                            double rad_data;
; Q- |2 G4 |- {4 B% c9 F6 {                            int norm_dir;8 p# v9 U0 _) _& F* N
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
9 U0 W- c8 V+ U! J; X: m                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
  ~/ `4 U+ `5 ]- z                          //DeleteFace(theWorkPart,faces_of_brep[j]);. s- G: \% p9 A, |- l2 a( i; D
                            double NewDiamter = radius * 2-2;: Y$ P/ O6 L' j) `
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);, e3 k  |8 ?6 ^& \5 s$ @! v! Z' m
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);( ?3 }' B4 X9 b: O8 g6 B" i5 ~' M
                        }
* `5 A( D, y5 n4 q: K                    }' T' y7 A2 x3 J3 e& ^5 V8 D
                }! e. D) t6 t& i1 g4 n7 b
                if (theFeatures[i].FeatureType == "CYLINDER")
  g+ D/ J4 K" E3 a# B                {7 R4 R; c1 e$ v; B2 p
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);+ ~1 ~: @% f, p; A, I+ [, h
                    Vector3d dir = new Vector3d(1, 1, 1);
0 L0 B$ C7 G* S  L/ h5 e& o" S                    theCyliderBuilder.Direction = dir;
. |# D2 }+ a0 b: Y. L6 O) \" y1 v& u                    string str = theCyliderBuilder.GetFeature().FeatureType;9 Z8 j( u& J, F% r+ r% W9 L- {
                    //theUfSession.Ui.WriteListingWindow(str + "\n");& ]( B8 `. K- |4 a
                    theCyliderBuilder.Commit();
* n4 t6 a  p* n& k) k                    Point3d point1 = theFeatures[i].Location;$ z! E! s" \% @1 c5 _9 O2 U' w7 x
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");3 ]9 j& [0 g7 q3 C6 W
                    theCyliderBuilder.Destroy();  N/ T% ~: M/ s
                }
% ~4 o2 h% Z% I4 n            }
* D! D' h3 q6 W' K5 {, r6 T  |# _$ n        }
+ B, `9 @0 i1 I  |0 B! {- e4 q7 @! i# B- V3 V! D/ j) o- P4 H
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
  }% D8 M  J1 L2 Z  S6 p; Y3 o; k  S        {
( {) z5 ]2 N, K- m3 m) n+ L            try
# Q0 F) C6 C7 s% i# r) e% N            {" ?/ }$ [5 R( e: k
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
. d% W) c: r: c8 s* e                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;1 k- u, U/ ?( D3 L1 Q+ J0 q5 e
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);0 C" S4 k' x- v
8 c- {( k- r/ j
                Face[] faces = new Face[1];
6 c  t1 T6 Q: `7 M7 H2 `                faces[0] = face;$ _9 b0 i2 |3 c. ]5 U: P. u4 d. ?
                FaceDumbRule faceDumbRule1;
1 K# i7 l! P; G( L$ w# H) a  X                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);# S3 f% m/ g" v0 [* R$ G. r
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];8 ]0 V3 o" |+ s) h. S5 S
                rules1[0] = faceDumbRule1;
. f9 w% _3 X7 k+ r* T; Q                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
  y/ u- N: I- s5 Z$ f7 t$ g  u" U
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
2 m1 J: M9 H" y3 Z                theAdmResizeFaceBuilder.Commit();. l5 \3 d" [  h# V4 A% h  _3 |' w
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
4 w, r8 J# e; X; p) ?8 Z                faceDumbRule1.Dispose();/ b" I& R! z6 M; ~9 i
                theAdmResizeFaceBuilder.Destroy();
- l* l/ i8 U. w* Z$ T% R            }
. e/ D. t/ C2 x+ {: x0 r; s            catch (Exception ex)! J3 W3 V: Z7 J
            {4 ?. p: L# ?% O& a1 {
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
6 q4 f1 d' w2 U$ |  y( v            }' \+ S! V9 w% _
        }( X/ a5 r' }& k  h
: f* H/ C0 Z- N2 a( ^
        public static int GetUnloadOption(string dummy); S, v8 F7 p  D0 r; }) F) b! S
        {
: f, j# L  R9 \9 r' \            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
" ]  ]# R* \7 L9 j+ n            return UFConstants.UF_UNLOAD_IMMEDIATELY;; M8 U* ]2 z& a/ ?
        }" l( l% c" Q/ Z: z5 w; @
    }
* ]& E% g; _5 k8 U% a}
; f* F4 P. H' Y
上海点团信息科技有限公司,承接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
, v% J+ n  f- N! P, |& c7 M如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
0 P( s% E: B3 [) ~. B
估计那个地方要释放内存
9 P8 i( @! |+ Z6 N
4 p' }5 t: @  o/ j* B- J0 O5 F这个需要调试的
4 _5 z) D( ^: b4 @2 f
% E9 z$ Z0 n7 ?5 X6 \5 mJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:25
! T0 D! t! \- \. R; k, F# O. @& f如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
6 W3 v2 X" Z; T, F7 F* \- A7 Q* r, R
另外你干嘛要用同步建模的功能
. r! l' O) e( m% z3 D- \7 j
; v1 P; @, Q% h) ]+ c) ^# E直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28
" \6 ]# ^* H+ t" y2 S另外你干嘛要用同步建模的功能
# j: G5 R8 u* E& l* ^, e, l% S% e4 \7 v9 \! X
直接使用 偏置面 不是更好
5 _6 @( \" i/ d1 y7 u7 }
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
5 _. q- T# y! x& y0 ?6 ~% l偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
3 y7 O4 F& W/ o$ h$ o
具体这个 我还真没怎么研究过  5 Y0 U) ?" K/ w5 B' ~: X, }/ j

3 y+ j% X1 \) A" m7 s不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
+ S  k1 n1 B0 m. L) o+ {  g: P: s/ g8 x; i/ |8 K' x
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07
% E1 X% ^7 D/ ]6 n# y- u偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
# X3 @8 l' \. E( Q# H" x
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12
" V! ]* a( D% ]' H1 T你主要要实现什么功能, 需求告诉我  我写下看看

' h9 k9 L, c6 G6 g9 `2 @% p我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了