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

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
3 f+ M/ P7 c5 p4 M! fNXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
8 a" i- b8 w/ f3 {7 T                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;$ F1 F* H' E& O/ F1 k4 H) |: F; O
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
7 x$ ~7 O7 I1 E. T+ f, W7 W' ~$ `6 |9 |" L" Q* R* ?$ b3 r
                Face[] faces = new Face[1];
1 _- @1 _0 x- v1 _                faces[0] = face;
3 T* y( }+ d' ~  c$ U& _1 Y                FaceDumbRule faceDumbRule1;0 p' V* f2 J2 Z$ L& c5 w
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
1 k: C8 m5 N- ]6 h                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];/ j% t7 E, l) ^6 h
                rules1[0] = faceDumbRule1;
3 q' P0 {/ I5 n% V2 Q6 X% j                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
$ a+ l: ~" V% V" D- U8 R  M% f! U1 b+ {) t+ A' Z$ Z; t) t5 `- A
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();9 a- `% S" a! P9 ~; c3 @6 s
                theAdmResizeFaceBuilder.Commit();4 z9 H7 C+ {1 ^2 E" V0 H$ i: }
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
8 p) `1 j7 }# J                faceDumbRule1.Dispose();
7 T0 @% M0 [% |1 N                theAdmResizeFaceBuilder.Destroy();. ]+ e+ F0 K' W$ }* c

( w! s3 \+ P9 g* \0 r, i/ v* _1 n' o+ b. z5 z
由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
/ |3 D; y! O: f! l
上海点团信息科技有限公司,承接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

你就这一段代码吗?& h% K0 {6 R3 t, g# [, v
其他的代码会不会有问题# b  T! _/ Z; 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

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:% S/ ^8 V' {$ t9 g+ U
using System;0 k3 m0 `' ?- d/ P- s, B: d
using System.IO;# b) Y  d. Q1 g) \9 c
using NXOpen;
. r6 i/ P7 ?5 _7 jusing NXOpen.UF;) H  @9 |  `) ?- T$ _& N9 J
3 C! A  ^+ X0 O& _1 }2 N
namespace InstanceFeature
4 i. D1 T6 N9 @) x# R{
# C) R, l2 k7 F) v) C# T0 |    public class InstanceFeatureEdit
$ P1 x8 B% M" l3 n- W$ R    {
0 ?; L8 j: {, _1 ?        private static UFSession theUfSession;7 s! @) S" ]8 F0 k/ W
        private static Session theSession;
0 z/ Y4 ?- F! f# `+ k* h. ~$ ~8 S, s! B
        public static void Main(string[] args)# c6 @# H# T; a8 g1 F: c/ @
        {9 L9 m- y$ X  R+ `
            theSession = Session.GetSession();4 }5 R( w) g1 k0 [, [) W8 o/ j
            theUfSession = UFSession.GetUFSession();5 D/ _% k% |7 B  j+ M1 [4 d
            theUfSession.Ui.OpenListingWindow();" E& G' U% [) T% w* M7 i- }, V& t
            Part theWorkPart = theSession.Parts.Work;+ U( K9 T0 `/ u6 [* l8 ?6 [
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;: s: H) d9 m2 j/ V
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();* H$ C# V& A5 X) r( I6 r, V# t
            for (int i = 0; i < theFeatures.Length; i++)
. ~+ I) Z, x, B. ~# E            {, R, g3 G2 L/ h, z
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");0 G2 I- `& A, P+ e3 b  C/ f
                if (theFeatures[i].FeatureType == "BREP"): Q3 l! j- w9 V' O2 G8 f
                {
3 y$ |: b1 E' {; J6 R( ]9 ]                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];; W2 E* j* P/ L, S7 Z% A+ _% s
                    Face[] faces_of_brep = theBrep.GetFaces();: Q* T# U3 K7 b( o2 q  |
                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");5 H2 G' g+ N5 k7 P8 o$ A9 ^& a
                    for (int j = 0; j < faces_of_brep.Length; j++)
. u* R# _' ?1 Z$ s2 w/ d) V                    {
1 Z  l: ?" a, \                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
7 `4 Q; N* b  c; m2 `# s                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
& |: s8 ?' F) |' I                        if (facetype == "Cylindrical")8 x2 t/ A0 l) X* W5 p3 p
                        {$ @! d/ \3 A: @
                            int type;  M2 q( r3 k2 X" x- q; t! \; l: d
                            double[] center=new double[3];
: x: \% I9 J2 _. }; S- r3 M+ K8 m8 `( |                            double[] dir=new double[3];) i( a/ n- R' g4 P! `5 t& E
                            double[] box=new double[3];
) T# X5 p- z# G; O                            double radius;6 S. ~# o0 A2 j6 d2 Y
                            double rad_data;! m. J. f0 Q3 U% @: R4 P1 {
                            int norm_dir;' H. `% b% t! C# q( c$ O
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
7 I( n+ K' J9 D0 G/ e- y+ t- r                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");. m. n0 J9 j" [/ j4 d5 p  w
                          //DeleteFace(theWorkPart,faces_of_brep[j]);3 N* H) H$ J( a9 L
                            double NewDiamter = radius * 2-2;
1 J# Q$ o# C& v4 t6 N                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);* q8 z2 C) ?5 X* j5 t
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);
! J% h" R( _9 I3 G2 _/ E: J& [                        }
& \( {) b  a1 ^% u  U! L7 T8 b                    }
6 P2 f3 P: `. ^5 }0 y                }
6 h% D+ p. A, E1 E- ]& p' I2 u                if (theFeatures[i].FeatureType == "CYLINDER")
. @$ E. G8 a$ y. G3 n                {% D( g0 R2 s3 B8 k9 f* ]! ?, }
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
2 X2 C3 X- {, L3 c& w# X                    Vector3d dir = new Vector3d(1, 1, 1);' G* h$ `( _8 g4 {
                    theCyliderBuilder.Direction = dir;
$ U" l  ~+ F/ i8 n+ \4 _2 [                    string str = theCyliderBuilder.GetFeature().FeatureType;
8 e' W2 e" h5 _& f3 L/ S                    //theUfSession.Ui.WriteListingWindow(str + "\n");
8 a; e8 T2 x" P- i" h* b, s                    theCyliderBuilder.Commit();
! c" ]/ t4 S! E5 {  P, b- c6 v                    Point3d point1 = theFeatures[i].Location;+ u: w6 D8 t: s+ p) o6 @
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
+ e8 U" M7 [' U8 h0 ?* B                    theCyliderBuilder.Destroy();
) H9 Q* I- |  e                }. A7 Y0 C; U+ t9 t
            }# e2 u1 L: x9 y9 C
        }( x- n7 Y. D- B# [) J
0 S; A+ ~1 h4 b! B/ \" ]
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)6 G& k' z! J5 ]4 Z* @+ R
        {
& q9 b0 ]4 x4 e! P$ [6 N; A            try0 O$ o; A$ v% |- G# ~  V
            {& \3 u) q5 U' ]+ s
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;0 x& r1 `" a) l; X2 M+ [9 t7 K; m
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;" E1 z$ e1 _* Q+ j' @# L
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
, ^) f; Y3 W0 e% ~6 S- H) b, B" \2 J4 K0 M% Z5 e
                Face[] faces = new Face[1];
3 G3 ]4 e! H4 o3 I+ _                faces[0] = face;
% Z' V$ m2 b( M  }3 X, o                FaceDumbRule faceDumbRule1;7 b7 b  ^  m4 f0 l& q6 Q3 i! L
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);, L; R2 D* O, H. k
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
7 b+ {6 J& W/ P+ z9 O                rules1[0] = faceDumbRule1;
7 S( ]2 M3 y7 t+ M                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);8 n5 c. Y9 u) a9 B: Y& H$ e5 _8 n- v, E

. x6 ]8 [" e3 `3 _                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
. J$ R7 t7 T2 M/ q                theAdmResizeFaceBuilder.Commit();$ t. m8 T( V/ O5 o
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
! A' j. H4 {( H! e& ]$ w                faceDumbRule1.Dispose();
" W; X( J1 v" g$ B+ u                theAdmResizeFaceBuilder.Destroy();: O' y- t. h! F3 J" O4 ^
            }; L) l* U# X/ W* R
            catch (Exception ex)
9 l& \) O% k. v- [7 s! e2 u6 j            {4 j. }1 i  Z9 Q* T
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");+ x  ~- u  x& q2 F5 F/ x$ }3 U
            }6 `& V9 L* x5 r/ g, M$ @
        }# A! W7 b/ u- X  e( _7 t
& b6 F9 U4 z# o( H6 J
        public static int GetUnloadOption(string dummy)" U; ]2 w2 I& H. _+ Q. H
        {
7 r. S5 |; u, h/ \! A+ e            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
( b# [! p5 m5 F/ ~            return UFConstants.UF_UNLOAD_IMMEDIATELY;
' z. r7 K( i5 Z        }' E3 g! y4 Y: i) u% }9 w) F
    }
5 q$ @# T1 [3 }}
+ N8 E2 X  }1 x0 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; i' T: F0 k- L9 f" ?
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
/ l6 A% G4 T  D1 p
估计那个地方要释放内存
, c$ h* R5 _) n2 V5 W  J5 g, v$ w1 k9 t+ U* N# ~
这个需要调试的 8 P9 D/ L; G. T
) M+ r* t5 p0 X7 L' S
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:25
, Q7 I4 |& L' e+ E如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

. s% U" m3 E1 r' \/ h另外你干嘛要用同步建模的功能
: ?2 h3 p/ Z: \# M8 n- A7 B
+ y% f/ A* y* \& Q+ v* B直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28
2 h4 n. d0 _  n8 H" c6 ?8 `另外你干嘛要用同步建模的功能# ]& T$ o+ m$ ^6 ?
9 y/ @2 _9 V# ^! \; K& I0 l
直接使用 偏置面 不是更好
" ~- ^3 k* {6 Q5 O
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
1 o; H7 I6 @8 I/ e/ f偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

, m% [# Z3 b" Y, @具体这个 我还真没怎么研究过  , {7 ^% E- k% D& D

$ m/ o) q  l% u5 g& U. _不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题3 n+ z7 }) E' ?

6 I( V/ v) S8 ~: [# ]) r* [: S偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07" l4 h5 d) k- v" e0 I
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

/ i* {& T, {4 `. [9 u3 Z你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12
7 G  ?7 y3 E1 i9 G6 z7 f  c; b你主要要实现什么功能, 需求告诉我  我写下看看

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

    我知道了