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

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
8 v% L8 S6 n- q* G3 [NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
! K" H7 P- R8 ~$ u8 w                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;- P1 Q2 O% S% ?, i9 k
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
+ d: ^4 P0 V0 c, |
$ Z7 E4 J+ ^; u                Face[] faces = new Face[1];
, S& w5 Z4 s4 Y* `2 Z; B9 d* ~                faces[0] = face;+ R" x, T6 t3 ^8 ^
                FaceDumbRule faceDumbRule1;) F- x! E% v4 A- E% P
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
6 E$ r. ?( [. R                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];0 n' K: D0 R$ x& O* Y
                rules1[0] = faceDumbRule1;
7 A9 X& b. ^1 x* M! a  _                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
" u( a: B2 G( d- F: D1 C4 x" u: H/ [4 T, M& o
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
: k( F- J) B2 n: i$ z# F8 g; F                theAdmResizeFaceBuilder.Commit();
; S* m0 p  R5 w: ^                Expression expression1 = theAdmResizeFaceBuilder.Diameter;" a5 r) y6 Y* V6 Y
                faceDumbRule1.Dispose();
- [7 G  q# s+ e1 G" v                theAdmResizeFaceBuilder.Destroy();
  i. I4 ^# r; a. P! T6 n' o& x8 J0 ]& ?, p8 _+ S2 ?

( S7 a+ L/ l' T6 l) x' Z由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值" m' r9 u# g5 t( ^8 n3 g
上海点团信息科技有限公司,承接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

你就这一段代码吗?
1 D4 b7 s  T2 F4 |+ E3 s, N/ g其他的代码会不会有问题
! @1 J9 J1 Q# 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

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
( y. V7 Z/ i: @* _5 rusing System;1 O2 O) d5 N) }) n) o. l0 p7 _$ h
using System.IO;
9 r4 S& d' D4 T5 j. [using NXOpen;
& `- z# [' C8 _using NXOpen.UF;3 G3 C& Z& K8 p1 r: G

5 @* \- m+ {* x' onamespace InstanceFeature! `; i: u$ h4 Q
{/ C  u0 V0 ?# p3 e/ ~' a7 z1 g
    public class InstanceFeatureEdit
: \2 ?( \. r/ A9 K    {
" u. \; M3 r6 v6 {        private static UFSession theUfSession;7 Q+ u* j3 s, w* Q
        private static Session theSession;- n& L% ~* t# _* e8 v
$ J9 U! k# E  ~5 r5 `( d3 x* u
        public static void Main(string[] args)7 O4 l: n& N1 @, L4 \
        {
7 H* G  u3 g, W1 p' e8 v  Q            theSession = Session.GetSession();
; M4 q. }7 N5 Y* d! g            theUfSession = UFSession.GetUFSession();
' M& {  ]9 V0 b1 g/ V9 z( L3 i            theUfSession.Ui.OpenListingWindow();& u5 D) M6 \! B7 K
            Part theWorkPart = theSession.Parts.Work;) H$ F' o6 n. y# A) O, I
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;0 x5 ~7 M8 l1 u& Y
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();; w( [( {, }0 {# Z  `% _( |
            for (int i = 0; i < theFeatures.Length; i++)
+ R, T' c+ E7 \; D  C            {
4 J' h8 m% S4 S$ W/ x3 j                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");5 r2 G7 f5 A$ G$ V* t
                if (theFeatures[i].FeatureType == "BREP")
( G( ~( R" f1 K/ H' I                {1 ~/ U! ?7 p; Q
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];. s0 s* m$ U( O
                    Face[] faces_of_brep = theBrep.GetFaces();
( M# k$ G! {+ r                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");( w7 {, W# V7 N5 _5 m2 I
                    for (int j = 0; j < faces_of_brep.Length; j++)4 H1 X+ k/ Y4 W- I& [( E6 t
                    {
; j( M6 ^2 n7 l5 r$ n3 [                        string facetype = faces_of_brep[j].SolidFaceType.ToString();
) l8 \8 u8 }5 |+ ~# A                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
4 d( j$ K! J8 ^% b                        if (facetype == "Cylindrical")$ y0 |( Q0 V7 C) {, x$ V& ^3 H
                        {
* g( S6 K/ L5 \% W& C8 v                            int type;- W2 i' Y. r) ]# i* \7 z
                            double[] center=new double[3];3 S. c1 }( B* V- v* }3 ?
                            double[] dir=new double[3];4 ]; d8 \7 E# N
                            double[] box=new double[3];: w4 B4 `: Y0 K$ H
                            double radius;0 {! Q* q4 |* T5 f
                            double rad_data;! g. h: |+ r0 `" b) e8 e8 A% o
                            int norm_dir;$ o* m$ o6 m' d
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
7 `- k( O8 d$ d$ @! A                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
- E8 N5 i% h: t                          //DeleteFace(theWorkPart,faces_of_brep[j]);) l) F5 U( g, B. E1 B6 ~2 w- n! D
                            double NewDiamter = radius * 2-2;
* `, z+ K8 I0 Q% x                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);
% _+ q$ \" A* y                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);8 q" ?) G8 W0 m/ c$ j4 n* e
                        }$ F1 k3 Q( O2 W" d" |
                    }
1 f3 {! `3 Z' K0 A                }7 l) R8 Z8 r# J" u0 j1 z
                if (theFeatures[i].FeatureType == "CYLINDER")& y; p$ \$ A8 L  ~2 Z, {! M- M
                {
, c5 Z& e$ I  B& o                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
) m. z( p. h  S                    Vector3d dir = new Vector3d(1, 1, 1);4 H, M  L  n* ~( j8 o" b4 |
                    theCyliderBuilder.Direction = dir;( j0 y$ V; V$ S8 B) h
                    string str = theCyliderBuilder.GetFeature().FeatureType;' U; t1 o2 f% P* q6 v: Y" N/ N
                    //theUfSession.Ui.WriteListingWindow(str + "\n");. P$ h9 ^# X6 o3 B% L7 l
                    theCyliderBuilder.Commit();# D  {! ^1 v4 j- z1 R  w
                    Point3d point1 = theFeatures[i].Location;
7 ^& ~! b. [; w9 U  j                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");: C: u  L# r/ c! H1 w$ O
                    theCyliderBuilder.Destroy();
0 E" s- b& w% W& ^* H) }                }3 H- r% s( A. W" W2 U
            }
. H+ |* n* U& H8 A$ \        }
% M  L/ n. f8 G
" S& I# h' R5 t1 M, T        public static void ResizeFace(Part workPart, Face face,double NewDiamter), K* m9 N6 Z( h$ q8 j% X7 n
        {3 \# x6 b9 r/ K
            try% N( ]& X% V  M* N* t
            {
" B$ D% k' ]. h3 w" L                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;+ D# I( K  w1 o! K' ]
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;; Y* q4 M2 u+ e2 o3 C
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);* \6 i# e, Z2 ^. o, F  F
: m' H; H' @- C( k4 b5 m
                Face[] faces = new Face[1];
9 v0 _0 R% u2 J  l+ p1 e1 }                faces[0] = face;; d8 o. U) M) Q/ w9 k# Y0 _; ]
                FaceDumbRule faceDumbRule1;0 q. W- O% Y5 D: S
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);) ^% ]% n( g( {$ q8 h
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
8 a3 _8 a6 y) i- P& u                rules1[0] = faceDumbRule1;
% L/ g$ T2 @1 S' M4 u) s6 O                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);0 ~( R* e0 m+ Q1 l: i' X
+ R* i% [& U6 o- j3 q% \7 [
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
- u/ Y9 Y+ e% [% o' y1 c                theAdmResizeFaceBuilder.Commit();9 Z+ Q& p9 C1 D1 e: B0 Y
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;$ `1 B2 A$ d" @9 X
                faceDumbRule1.Dispose();0 Z+ A2 z, o* @% y  s
                theAdmResizeFaceBuilder.Destroy();. O9 e0 N6 k/ t( X: W$ J2 X
            }' q% m3 v8 c( N3 t
            catch (Exception ex)
# K) O% A! q( I  J  D            {
" R' ]/ g: F" \  U# U$ @; B                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
8 r; K( U; }4 X( p( i& M            }
1 A% r' p: |) Y* h3 z        }
1 y9 I  o8 M- r( r6 S/ u: ]( u- u
        public static int GetUnloadOption(string dummy)8 i" `5 V: c) e% s
        {
+ a+ f" S+ j. U. D& M' ]6 N) p, I+ w$ B            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");6 e2 W/ I3 S% j( w  s
            return UFConstants.UF_UNLOAD_IMMEDIATELY;/ {' ]# J7 b' g, i3 f/ I
        }( p: c& {. ?* r! e
    }+ j- H9 C/ p. V) m  d8 [
}
3 }* S- }2 R# P6 y/ D- u
上海点团信息科技有限公司,承接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
, _+ X, ^' u+ g# F8 \如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

4 m6 }. T  @# u- `! c估计那个地方要释放内存 6 F: s9 L2 u# S$ E2 `
& p+ H/ G7 z! J' A; \* D
这个需要调试的 / y) z+ A" y& Z2 V( D
' E# G& L4 V* a0 b0 {4 y
Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:25
) B; A1 J; E7 x' h5 F如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

9 ?8 g* X6 _$ i/ H+ b- C8 w另外你干嘛要用同步建模的功能
7 x+ y) T# x6 t7 ^
1 ~" @  E5 G$ |7 m- z直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28+ a; Q( I0 t6 u* Y) M& ]' H- e
另外你干嘛要用同步建模的功能
  R& E+ X* o% q* ^5 f; V/ d$ _! ^1 |$ R0 ~
直接使用 偏置面 不是更好

+ ]- ^( {0 W7 @& ^! P" V4 c偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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:074 u( {  U+ O* M$ g# m/ a$ j
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
3 N( x& {0 z3 u. [- l* c
具体这个 我还真没怎么研究过  
9 n& j. G  Z( e9 D+ @- c% }* N6 k0 |
; j, @% H) k, a( Q( m! V6 Z* l: ^不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
3 D/ y, L9 ~6 L/ t1 O% v8 j/ \
4 D! O( A9 e* Q2 H偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:079 |3 J: Z. x7 ?0 D/ q  e0 I
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。

0 W0 z! h7 d) a" p& n, ]2 ^6 H你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:120 j5 g# B: \" O3 Y5 r& ^) n+ t
你主要要实现什么功能, 需求告诉我  我写下看看

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

    我知道了