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

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:8 M$ T1 v$ L1 q7 J3 f% W
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;: Q$ }- ^. v3 a2 Z  o
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
1 V: f1 E7 M- \) d                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);; \9 J- t- y8 P  z- B0 F; E, z
! j, U  f2 A6 J' W
                Face[] faces = new Face[1];. ^) [2 e  \. ?  a; y$ w
                faces[0] = face;
$ x# D5 @# M: A. a                FaceDumbRule faceDumbRule1;
+ q) G' r) O, f7 f) J8 {6 g. E! M                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
! H9 `" n. K9 ^: m5 L0 \                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
& {4 P2 x1 q7 @; j$ ?                rules1[0] = faceDumbRule1;
5 n! O6 e  c2 u8 s% N7 o2 C7 ~                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
. h5 z: g7 N# f9 _9 M4 Z
0 E9 p* W5 m8 z) Z, Q                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
; y0 o: u/ L5 Y+ @                theAdmResizeFaceBuilder.Commit();8 x# M) O& v, D& J
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;/ b- {- O' ^5 s
                faceDumbRule1.Dispose();! k- V* ]$ a  x( p
                theAdmResizeFaceBuilder.Destroy();, p  ?6 q* i+ q* a# _$ D; h" y

9 m1 y8 _* `# ?8 |: s; v+ o; h" S( d& W& M6 j# c
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值" f; x/ T' `9 B, r
上海点团信息科技有限公司,承接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

你就这一段代码吗?/ d- i5 @  A8 n( _' [+ X$ z
其他的代码会不会有问题
' p3 Y+ Z. v0 ]( ^- n+ f4 E8 X3 |% T这是你录制的代码吧,你的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

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:' ~/ O  O  B* F+ n
using System;
$ x+ }' q$ V: V! I# v) Rusing System.IO;
$ D: F! Z9 c; D- V. Qusing NXOpen;
  ~% G' t4 u% rusing NXOpen.UF;
, n! r2 n( l# P
- i* F9 i$ |) \8 b. g3 Unamespace InstanceFeature/ U8 t- |4 K7 S1 o, h% g( J$ o
{
) m1 w3 J4 l: J- |    public class InstanceFeatureEdit
( E) j) P3 S: t1 }( Z8 D1 T  O; G    {1 \, I) T) c8 `
        private static UFSession theUfSession;
) v2 @+ p( ~9 ^        private static Session theSession;* w- u# _% I$ L0 a' p
& J2 C  @% _& o- [) B0 l
        public static void Main(string[] args)
  _  j" }. e8 X7 |  p        {. c1 k! K/ W) I$ H5 x, V
            theSession = Session.GetSession();. J( f" j, J' d, `
            theUfSession = UFSession.GetUFSession();( _% P3 R, @) a, l
            theUfSession.Ui.OpenListingWindow();
- a% X9 E) @  y& ]& g) A            Part theWorkPart = theSession.Parts.Work;
' w8 f( M/ K1 K! v2 Q1 L            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;3 E) v& k) F7 ~* m/ f# \' [
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
6 P+ k$ m9 h. i( J" o            for (int i = 0; i < theFeatures.Length; i++)
" l; P, p: d$ g( a            {+ U/ E9 Z" E# W7 s& u
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
: ]! L) I/ E, ?# i4 W                if (theFeatures[i].FeatureType == "BREP")
9 E. A: L; ]. n' o                {
% r1 ]- H3 {1 ^  }: E3 t                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
# C! ]' N( {( F3 h9 j$ M. K8 s7 O                    Face[] faces_of_brep = theBrep.GetFaces();$ D1 O0 A) P2 k% n6 }9 u0 Y" N
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");* P$ ?& @3 O  ^$ O
                    for (int j = 0; j < faces_of_brep.Length; j++)5 {2 m# T" l& e+ w' z5 }% V8 |
                    {
: G5 f+ ?2 m6 f8 S- i# j* |0 T) f                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
6 D+ x* L" Y5 w3 h& g; E+ C' j( M                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
* |  D  D7 [# b1 i                        if (facetype == "Cylindrical")) t( ^0 A) J9 g& Z
                        {
% C+ D2 v2 \" v  q2 b; x) U                            int type;
. g9 P3 V9 F3 z4 a  `                            double[] center=new double[3];
5 R8 N; U; G3 s" h2 {                            double[] dir=new double[3];" K/ ]# ~+ I  c7 n
                            double[] box=new double[3];
' Z9 q1 W# r2 o- x0 H) v                            double radius;7 _$ \7 ?9 N6 _3 Y7 D; T
                            double rad_data;8 m4 N% w  i' f  H8 G: Y- G4 ]" y
                            int norm_dir;- [9 m+ E) R, t& |/ }
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);+ {1 s( I  y# B
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");( M! [8 L. k4 v: [4 O. k+ _* _! H4 n9 V
                          //DeleteFace(theWorkPart,faces_of_brep[j]);) B2 ]" x! j8 A0 b4 Y
                            double NewDiamter = radius * 2-2;3 r: k! y  o" }9 v( n) [
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);
) [. ~8 v- S8 a0 s                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);  ~1 b; l& B" o6 _
                        }
, r6 [9 K$ G, K6 ]; a1 a                    }0 J9 H. z! P  r, `% u
                }
, |3 }6 M, T$ T: p  A! _                if (theFeatures[i].FeatureType == "CYLINDER")+ X( Z* j( g/ e& l
                {
6 Q& ~( _/ s. P                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);5 X- w  p. w2 y3 k: B
                    Vector3d dir = new Vector3d(1, 1, 1);
# k: W' Y/ P) ?9 d% H6 q7 ^; Y# P                    theCyliderBuilder.Direction = dir;
1 i4 L4 Y% v+ r. b7 ^: b7 s$ k                    string str = theCyliderBuilder.GetFeature().FeatureType;4 \2 B9 f, p  ~3 k% B! K* e% i
                    //theUfSession.Ui.WriteListingWindow(str + "\n");6 w* Y7 P3 C' J$ L- J: ^- U; b
                    theCyliderBuilder.Commit();
% n) o+ P( B' h" X: ^! c5 s                    Point3d point1 = theFeatures[i].Location;5 q# }& M' z+ {/ w6 K& h
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");& t2 H1 {; j1 `+ H! P8 Q
                    theCyliderBuilder.Destroy();
) X) W  w. i" ^1 I( u) N7 |                }
8 V  R0 ^! A' l, {% _            }4 P5 M2 z* o% Z7 s- S' d
        }
4 p$ R' V4 O6 T1 C" U$ W! C  z, \. a  b9 W, q8 M4 H
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)) b" z1 v6 J- R0 K8 P/ C
        {
( L8 y7 p5 h- _8 K; k8 l+ r            try& C( g% _" L- ]
            {7 _  i5 E7 F* p  R
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;% G5 \- m9 D2 W  g6 [
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
1 r3 _/ {, }& X/ J                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);3 g7 l2 g' Q( U+ Z% @+ E3 R8 X

% x0 j  V; I& n& x                Face[] faces = new Face[1];
: v9 _5 y3 C3 x, _$ w- l& j                faces[0] = face;
/ g# j" q  J! d& t                FaceDumbRule faceDumbRule1;( }# p% H/ v& M) H3 @
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
, d: [4 V+ u* t5 n& S                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
" c/ v  f3 F; x) L: e                rules1[0] = faceDumbRule1;5 [: H0 N/ p& X# i, S
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);$ m  d9 I+ _! m4 K& q
$ m/ N% `: B% L( w
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
8 x; p0 @1 `8 d  a3 G- e' T                theAdmResizeFaceBuilder.Commit();
) T$ K8 x. X$ j2 W                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
. `- Z2 J/ A2 ^9 N) y3 ]                faceDumbRule1.Dispose();
  L; m$ V; ?) W1 _4 _, J9 Q$ e) r                theAdmResizeFaceBuilder.Destroy();
8 m( V" f# h: l+ k1 w/ z; \, H% L            }$ g9 a/ \! R6 }& ?1 O2 c
            catch (Exception ex)" Z! D+ D4 p/ k) G$ U+ V
            {* m. t! J' e$ B0 f, Y
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
9 Q( y/ v# l* z7 D& @% b* n            }
4 e; |6 l- U  s" t, L        }' m- c# o3 e0 f3 x0 M

* N, Z0 A0 q% K& @* ~- k: Z/ b        public static int GetUnloadOption(string dummy)
- z  D6 [  }- j- Z2 @( v1 X        {
1 e+ {3 f" j3 W4 f6 f9 e1 Y            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
9 ^! f* F0 ]/ V3 K$ t8 x            return UFConstants.UF_UNLOAD_IMMEDIATELY;4 o2 H" a& K7 k, F) ~$ R
        }3 a% @, `! Q& V5 j
    }
  B8 D) p8 ~$ s# k4 o. c' Z}
! n* T2 l" T' e: Z
上海点团信息科技有限公司,承接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
% o5 i! y( i7 ^. F如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

$ p) D4 \5 \# ~估计那个地方要释放内存
7 c; {/ {" ~6 Y  L3 X8 z% ^6 |- w; p! G" Y+ _' @, x2 w' o
这个需要调试的 8 a: f( o' N9 L( k) i* H

/ _5 g9 ~9 [1 X7 c6 k9 mJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:256 R: g( N1 h+ K  D0 @$ T
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
6 q# \0 |4 {. G% H: u9 [
另外你干嘛要用同步建模的功能7 m4 D4 g2 f* E# C+ \. T( H2 Z; D
2 K$ ^7 f% ~) N) W
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28: R* s6 k+ p: t: V" f
另外你干嘛要用同步建模的功能
, X" P% O" Q5 ?% ?2 p/ [: q' k
7 O5 U6 R& I' e6 O9 R直接使用 偏置面 不是更好

4 ?( e% F4 b: e偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
( o( k, n2 z% b* Y3 @! h偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

2 ?. `" M; f7 G7 J. ]1 y& W具体这个 我还真没怎么研究过  
0 p- G# J7 A; Y( {- @1 d, Q) A6 ]% j. ~  ~8 ]' r8 m+ d
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题: E9 y" x: e# {0 {

) R  d8 v& X. D2 x* H2 E/ w' t5 a偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07
  X2 p: Z4 @; F- L偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

* c, w2 p  p) d9 ]( A7 @你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12! T- t" T) l8 L. B
你主要要实现什么功能, 需求告诉我  我写下看看

3 A1 E, @9 V$ K# R# q3 V我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了