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

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
" V7 ]2 Y0 c( ~9 ?6 INXOpen.Features.AdmResizeFace nullAdmResizeFace = null;0 V0 X$ c: E5 g4 N
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;
  |- i  N+ \7 d5 ]8 J% D6 D* F' W$ C                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);" a5 @+ O5 f4 D$ b. Y1 |- D" p

* g3 ^5 O! K" c, N2 p! }: a1 e8 E                Face[] faces = new Face[1];/ U6 F$ g2 m8 R0 U+ q/ d- ]
                faces[0] = face;
4 }* i3 m) e/ J& |% f2 q                FaceDumbRule faceDumbRule1;8 Z$ }; ?: q' u9 `
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
( h( c- a( }# A$ c$ u9 f                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
& k+ B+ r( H3 Z/ ^6 X! _4 y                rules1[0] = faceDumbRule1;
& k% }4 y- `$ n1 I                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);: W" G0 j$ s( C. v- b. X) U
/ c# J( B2 r" r( E5 A/ C
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();, {7 E2 q* h" `9 @& P  F
                theAdmResizeFaceBuilder.Commit();( [: Z( x8 ?& B5 _& Y
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
; Q0 S/ H( o  t1 X- C# f                faceDumbRule1.Dispose();, m6 H4 }: K4 z/ U( u
                theAdmResizeFaceBuilder.Destroy();1 w6 F0 V+ k/ \* b" `  |% @
/ v, H6 O& u& S2 l

5 ^! m: I' `' |9 c: D1 W" ^由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值* N6 d  Y/ I2 O1 a! ]3 i
上海点团信息科技有限公司,承接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

你就这一段代码吗?
/ Z4 B) q& U; P" {6 t& s' _其他的代码会不会有问题
+ V9 }6 S0 @+ L6 D6 d$ T6 i" 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

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
& W" O! v: i& Q! q/ Kusing System;& q1 |& [3 F0 l$ S  V
using System.IO;
# {0 o; G- a& B* Susing NXOpen;
2 m! I9 K) z. j3 \2 Husing NXOpen.UF;
5 Q; A* Q7 }6 a, i, k5 @
  u: [8 ~7 X0 f. w5 s8 V% k; ?namespace InstanceFeature: x+ |) T0 P  H$ y
{
" _  U+ L% @$ o9 _" r& ?6 g    public class InstanceFeatureEdit
) e) n* C, i$ H" q8 k6 F8 l9 E) ^    {& S6 u1 D5 @# {  F  Y0 P
        private static UFSession theUfSession;9 F" ?% F9 O  r: T
        private static Session theSession;
/ q- P& T+ S5 ~
# a9 u6 _, D: W% h5 Y/ |& \        public static void Main(string[] args). ]+ s# ~- M0 A; ]6 _4 f4 Q
        {9 F0 {- ?* x8 Q) o6 D
            theSession = Session.GetSession();
$ J, V- D+ a- ?0 h& r9 j            theUfSession = UFSession.GetUFSession();2 M8 V- @. y. Q6 W) W8 N1 s
            theUfSession.Ui.OpenListingWindow();
9 S" k' L+ q% _5 y6 }9 D0 F+ `            Part theWorkPart = theSession.Parts.Work;
/ Q% I3 |+ h6 X' g& z: `+ c2 [. u            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;
+ d& V) ?$ U+ z+ D% N- u% X8 `4 G            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();' Y" n' C9 }( R% Z3 i* O
            for (int i = 0; i < theFeatures.Length; i++)3 P" U3 J* p; E3 R+ }9 L
            {/ e/ E) c! ]0 I8 e
                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
4 t2 D" P+ V0 n6 Y' s  F                if (theFeatures[i].FeatureType == "BREP")) q  i  Q/ ?; e2 I9 A! d
                {) `: U: D' r3 z
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
, s7 D" `5 u3 v3 W. M) f' j                    Face[] faces_of_brep = theBrep.GetFaces();
- h. v! I7 U4 k- y7 V, [7 q' s                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");. _) w  q- d. k, k% M9 H9 f
                    for (int j = 0; j < faces_of_brep.Length; j++)
/ v+ z3 U5 B: o6 @5 |- [* \" @$ m, V0 f                    {
% p$ |1 J- V% ^% R                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
, W3 }2 x# A7 n" j+ P                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
! \) U3 m9 {. i8 I, Q5 L4 B: Z+ b* o                        if (facetype == "Cylindrical")
' M! Y( N5 v0 Q; X                        {2 r4 f% O: w/ A! }
                            int type;5 a7 {+ P6 V! l3 M/ M
                            double[] center=new double[3];
$ F/ d! t; m6 |$ N6 L* w                            double[] dir=new double[3];$ _7 P* y9 x5 e3 g+ q0 t5 W0 p
                            double[] box=new double[3];8 Y$ |. P, K" h6 g' }1 U& Y( f" C
                            double radius;; J9 l& ]/ c# v2 A0 {2 S$ Z4 [
                            double rad_data;
. Y* r" R  t1 l+ r' ]                            int norm_dir;. u( t! [- x+ {6 r
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
( R- c/ _1 k0 Q/ m                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
" k# a! s$ Q. v: t% t5 S                          //DeleteFace(theWorkPart,faces_of_brep[j]);! J, L8 B0 G( @" ?" F7 U( J; c
                            double NewDiamter = radius * 2-2;
( b: T) x+ D$ o1 _1 @" T' E% f                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);+ l6 N/ D" e7 P
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);$ t( R4 q; m' I" d: S3 w
                        }1 @: |9 A6 B& F0 {' a
                    }
: @! h9 K, C% g                }. V3 ]0 W$ v- N) C( D+ {/ Q
                if (theFeatures[i].FeatureType == "CYLINDER")
3 ?  M) I7 L5 _- A                {
+ f9 |' v1 I; c8 n, B0 P) d                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);# v- b4 m4 r+ R! {
                    Vector3d dir = new Vector3d(1, 1, 1);1 L8 G/ ?5 Q6 ~2 V! |
                    theCyliderBuilder.Direction = dir;
5 q; v* F! {; u( }+ [" h2 l8 l' a! i                    string str = theCyliderBuilder.GetFeature().FeatureType;4 ?" t" g, b( [3 S* ~
                    //theUfSession.Ui.WriteListingWindow(str + "\n");: E, q1 _, I# r2 p* k0 F
                    theCyliderBuilder.Commit();
6 C% i# I7 k4 x                    Point3d point1 = theFeatures[i].Location;
- k2 r. T+ n* h) Q+ v                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");8 ], a6 Z1 t  w; e/ K2 _
                    theCyliderBuilder.Destroy();! }: D2 M! {" p/ d( C7 ?
                }& M. y' s. D  K% ^, J$ q. h2 b
            }
! u& {+ l$ k. ]6 a. A; K5 k        }2 Z& [5 L& j6 e6 d4 F. B: A

- Y7 h; K0 a; v; x5 i  u        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
: o, l2 b6 y0 y2 r* V# |& b        {
: C! `! c7 _, a            try
3 ]! \& O9 D! ^' }1 C* _* |            {& x- X5 F9 c; Z/ M' J) r
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;) R/ c2 v# L* m6 `4 t
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;2 ^' U4 x0 q) Z5 T
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
  i9 F; e( o+ w4 b2 j5 k
& j. H1 p7 Q3 {/ X1 \7 H2 l                Face[] faces = new Face[1];6 K) Z5 O& i9 q* p9 S! E
                faces[0] = face;
0 b. v# _& w- _                FaceDumbRule faceDumbRule1;
$ R; @1 l7 Z$ Q. K                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);" m" x9 X8 \: J2 R
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];8 \, n8 ~* ~& U  B6 u
                rules1[0] = faceDumbRule1;- s7 E$ |( K, D* O: F) d
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);5 o, _: W# G( ~3 F: ]; }8 w

2 c. R: U  R( m9 t  ^) L                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();6 F; l" ~# I, _+ c# X- E
                theAdmResizeFaceBuilder.Commit();" A: w: f4 f# ^5 o
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
- B3 `% B* U* C5 f# h                faceDumbRule1.Dispose();& |" U  q7 n) J4 U/ n1 M4 K
                theAdmResizeFaceBuilder.Destroy();
& H$ Y# q6 p: [- |% _            }, U: A9 F* _1 P: C
            catch (Exception ex)5 d7 q% V- w7 q1 P+ H
            {" i- g! r3 K2 m$ y5 i* Z
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");8 i2 t$ h- ^# _: B
            }
1 `$ A' A8 f: L8 S+ f" L  P% _        }
. m4 N# O2 j* Y0 d8 b$ x" `% S
  T* w' d1 _  s1 }! _2 u        public static int GetUnloadOption(string dummy)
7 s: Q* A; ~2 V$ O9 O8 p        {
/ a% t0 ^. {2 @- p' `- D            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
/ N# O9 m3 [2 ]! t" U! i: s            return UFConstants.UF_UNLOAD_IMMEDIATELY;
5 }. u9 j& @, j0 ?. o* ^( \# Y8 H6 c        }6 l$ V& |7 P; r' r! b5 [
    }- F) U6 i' b# w2 w/ q7 @4 ^  W
}8 f# b3 M) M( M0 E* @
上海点团信息科技有限公司,承接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
# n/ N1 c7 `' d* b: e8 A  B如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

0 q; e6 V  m. t+ v估计那个地方要释放内存 " i  Z) Z( d6 N( z

1 n, l  R5 _( v6 R, z- D这个需要调试的 9 S; s2 M" x4 X/ L( [2 M5 w+ P7 O

4 S# @: J! _' B  cJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:253 A7 b! I5 o/ C# y# Q5 Y& L$ Y8 Y2 X
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
) T& b& i; m) U- l9 T
另外你干嘛要用同步建模的功能
$ V2 J* |: l" q  O6 K) W6 Y) l
% m1 G4 F% N: h直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28
: b* j- N/ ~! V" `$ y另外你干嘛要用同步建模的功能: `! A: V' w& L% a* ]$ f/ F  D/ W
4 q% [& f7 B, X7 f% y% G) C
直接使用 偏置面 不是更好

% i. B/ T0 {& [& _' |偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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
3 I% I- s+ N: Q" z7 k偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

0 }. s( F% {1 d, }$ z3 f. g2 Y具体这个 我还真没怎么研究过  * a7 P9 ?7 ?0 f$ i

9 c- ^& l' M9 ^0 ~. R0 L* S不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
* T' G% p; F) b$ Q$ s; i) [( x; \5 C# U- x4 ?3 n
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:073 p7 k/ Q" D* j2 i2 k
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
5 _! ^( u! ]8 }
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12
+ O8 g/ s9 R2 t2 k( Q你主要要实现什么功能, 需求告诉我  我写下看看

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

    我知道了