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

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:
5 I4 r9 z7 c  w3 m% ONXOpen.Features.AdmResizeFace nullAdmResizeFace = null;) g5 u, k  v3 d( v7 u% A
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;1 ]# e& Z' ]$ d/ E8 l: t% o+ ^6 D
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
! B' Z" D- D; @/ y' \0 T, w
$ H: s; m) ]  ?* h2 O! x4 F                Face[] faces = new Face[1];
# R$ H- @2 p! i                faces[0] = face;/ t; @9 H; B0 `+ ]# Y" @/ ]
                FaceDumbRule faceDumbRule1;
# l& E5 P4 F/ e7 S  U, S& I                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
; O- i, t: H- O+ d                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];0 n' L, K. E/ {" x7 @7 o( L8 \: i4 M
                rules1[0] = faceDumbRule1;% L4 _/ ?, b, y3 @! M
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
5 y- G5 A& {; c! i" _5 \* f3 M
( ]1 S# z& h5 J' G0 J$ C                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();8 L, V% l- ~: w3 V7 |3 x% [
                theAdmResizeFaceBuilder.Commit();  J7 @1 E2 X+ J! a9 e: w! h
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
: {; I( S3 N% U2 J& C1 _1 A. n                faceDumbRule1.Dispose();
$ z  z! G2 v$ I) f+ u- Z- w                theAdmResizeFaceBuilder.Destroy();
; R" w& b3 e6 ^8 X+ b0 Y8 q+ [, m4 G
4 S# T5 m4 g) O- u" y6 a7 p% j, {
9 _  U0 f5 e6 Z由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值0 _2 H( r! D! i, l" U7 O0 a
上海点团信息科技有限公司,承接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

你就这一段代码吗?
2 G3 \- p" F$ w. S8 p1 F! Q* U  B其他的代码会不会有问题
0 S1 Y3 g# K  L这是你录制的代码吧,你的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

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
- S8 j) R( `( k3 `" D' {! ^4 _using System;2 P2 Y+ D  p% N. d, N5 N/ o3 H7 M
using System.IO;% V; c  }. u' z
using NXOpen;
: Y9 x7 E: ?6 |3 W, Qusing NXOpen.UF;
: o* \( ^- ^# Z
# B3 {. _1 A2 O4 z0 m+ \namespace InstanceFeature
. ]4 j' s+ l, b6 H& Z5 h9 N/ G{
( o2 k5 y9 a) L3 a% q    public class InstanceFeatureEdit/ J2 J% S+ j  e* _; G7 {2 c
    {! l- X4 J: A7 Z! ?
        private static UFSession theUfSession;+ b1 X' {( J5 M1 Z
        private static Session theSession;
/ r- B6 A! N3 k9 W+ t! R& g: a6 [+ x, P# B$ m9 q
        public static void Main(string[] args)
7 K+ `  d0 B0 Q" k) a( G& p        {3 I4 x% P) k0 Z) w+ x! f7 l( Y  z. k
            theSession = Session.GetSession();  A$ R0 q; u7 j8 a4 Y* g
            theUfSession = UFSession.GetUFSession();8 W: d5 c8 d/ \/ ?) x4 H
            theUfSession.Ui.OpenListingWindow();
# W/ r! `. [5 F            Part theWorkPart = theSession.Parts.Work;+ z/ a5 ?4 N( R5 X8 k) J# A
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;+ o' Y2 H: B& e  |7 E  V4 }7 p
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();
5 P7 {* z. M5 J# J: x( B5 S            for (int i = 0; i < theFeatures.Length; i++)
" y5 z3 H+ Y- e. h! h/ n! r            {
3 q! d2 k  X" C3 v                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");
- Q1 Z5 a6 J8 I' Z7 k                if (theFeatures[i].FeatureType == "BREP")
$ b! g, a' _$ `' ?+ X0 I, v                {; T; f+ [) q1 q$ m- _9 }% u) ~! W
                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];+ r% H" v& {' w' f# i
                    Face[] faces_of_brep = theBrep.GetFaces();
$ }3 A2 |% }* k. L& F' R  C                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
0 o  Z5 w7 a7 {" U/ w& N                    for (int j = 0; j < faces_of_brep.Length; j++), l8 f) v& Q2 k% i0 `
                    {
$ K4 Y3 d' ]7 X4 K8 J/ ]$ w; s                        string facetype = faces_of_brep[j].SolidFaceType.ToString();$ m1 O" `* [3 ^# `; o$ Q6 x+ `
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");5 ^. q7 v: I6 Z: i) V4 n
                        if (facetype == "Cylindrical"), X7 p( U* z, J% ]0 E7 n
                        {
3 E+ R, B9 a: l! K) w6 s" H' d& ?                            int type;
) U6 o, c9 x: B& V. |                            double[] center=new double[3];
' q* _' p. ^+ D. U- m3 \) |3 ]5 S6 M+ l                            double[] dir=new double[3];+ X% \/ n! n! F% H' Y( j5 N
                            double[] box=new double[3];& ~; F8 r2 `% R+ d, W
                            double radius;6 [8 s9 V! z9 u
                            double rad_data;
/ Q. ?1 N# }1 Z( ?) B                            int norm_dir;  l% q+ O* ]. }; ?! q
                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);
! W, O6 m3 F5 l5 n9 P                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");8 }9 g% b" O, x
                          //DeleteFace(theWorkPart,faces_of_brep[j]);: r( ]. b* G" Q; t4 ?) \
                            double NewDiamter = radius * 2-2;* }( T- B: S2 t0 _7 a( L7 x+ ]
                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);* y2 p9 @8 ]2 Y7 L
                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);8 a) ?$ p! g3 @' K9 F2 W
                        }% `: I7 c$ r) x* I
                    }
- C. U8 p; k; }2 r7 h& h                }
' J1 S9 B7 C: `: o5 ~                if (theFeatures[i].FeatureType == "CYLINDER")5 _' _6 x  g( g' O, S$ m
                {
# `, [+ p5 i+ l0 n/ K+ u3 B, ~                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);
/ E8 C; o! T& x3 L( a                    Vector3d dir = new Vector3d(1, 1, 1);
' |) u0 D7 w0 ~: K+ a                    theCyliderBuilder.Direction = dir;
5 B2 F; E  D1 C! a1 _                    string str = theCyliderBuilder.GetFeature().FeatureType;$ t5 J7 Q2 `5 C7 C: R9 O5 h1 Z
                    //theUfSession.Ui.WriteListingWindow(str + "\n");
% L" `0 Z, P1 d. U, X                    theCyliderBuilder.Commit();+ Y4 F: O/ o  h! J1 y
                    Point3d point1 = theFeatures[i].Location;* l4 w$ Q. v. q' B
                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
: q* y5 f! l2 w" w                    theCyliderBuilder.Destroy();
" h" y3 H& j1 O* s! w                }
: j  V# E, D, d$ @) t            }
1 e$ H8 M  m" q* S5 A1 e) d        }
$ Z( V' W" g" e, f, b( L5 m7 c; ?' j* s" ~) E
        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
9 _( [3 L5 V& x) S        {
: M; U% X) T# B: g: F: W# [            try* n9 a5 ~# X1 L7 X, t
            {
8 e( Z, W) I& v+ s1 g                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;% [& _* {& f, z$ G+ v
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;# _2 N* o) ?+ E9 N# L% H2 c2 q
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);. D1 `% I* W: N
7 B, \( }7 u% _4 @" m/ u
                Face[] faces = new Face[1];
; |! s4 N# D, |+ k% H: U4 ]                faces[0] = face;; \) O. `6 u4 R$ S+ j
                FaceDumbRule faceDumbRule1;) R7 ]( e4 n/ h8 S
                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);) b" f; b7 T) G( G6 D
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];% l* m! s* _+ F. p1 ?4 X: a# _
                rules1[0] = faceDumbRule1;; ^6 F, y& j2 C7 E- B7 o
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
2 R! t5 j. T0 D9 w% d1 B4 h1 C! ?6 [7 N; l6 [+ r0 I+ W) O1 o
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();9 X- ?9 f9 T3 e& C3 x: N3 P1 N6 B1 v: ]
                theAdmResizeFaceBuilder.Commit();8 v; K- D: `9 n; Z! a7 [0 r5 H
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
; v3 }9 L* w* j2 z( |2 N# }                faceDumbRule1.Dispose();. }& G! B$ B( z
                theAdmResizeFaceBuilder.Destroy();  E( \5 X! b' K: D
            }
# o1 j# [' |$ ^0 f0 L0 i8 `' O- y            catch (Exception ex)" D* L  k) @3 g
            {3 e8 Z! g; p1 Q: r! z
                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");6 D4 \* a3 |" n) i% d. z4 N
            }
8 k7 y, U% V/ l& u6 h- ~7 g        }
% f" _8 h- ]5 k
& a6 H/ m4 ~, H3 y0 O% `        public static int GetUnloadOption(string dummy), o9 l7 q  E1 I+ F8 |5 A
        {
: s3 w7 J: v1 k: A8 u" R            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");- x$ K( j. ?0 [8 t
            return UFConstants.UF_UNLOAD_IMMEDIATELY;- t2 k: d% {3 d  g: p
        }
6 b" |$ B% {) r, q5 z! o    }7 p6 k) ^; D' D1 y8 }
}
  {5 |7 w) X( |
上海点团信息科技有限公司,承接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:254 C+ @- {& n! U0 r& w
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
6 J- {- ~- }* {2 |/ l
估计那个地方要释放内存 - U$ o4 M1 g: B" Y7 t
7 f" a% R4 n2 O+ j* D
这个需要调试的
7 u. f+ V7 O6 r- V
) r9 l$ h! P+ eJava 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:25
9 O$ ^6 \& i8 {) D/ P% Z8 r) S如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
" |) o& z1 \  E1 o& I' j/ l8 |
另外你干嘛要用同步建模的功能
1 {/ B- d+ @/ D# \6 c4 O
9 F1 `3 a% L- `直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:280 @. i& _. U- q$ I
另外你干嘛要用同步建模的功能4 j3 M: s# ?# [
2 X' `* V, @6 a) B
直接使用 偏置面 不是更好

. e( d9 k8 G8 z. U偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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- D! a- S# @) y: L; Y. n: w2 m
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
! g/ v. H% i; c* r2 A5 e8 l3 K) P9 J3 e
具体这个 我还真没怎么研究过  ) J, {" p( C! @1 q7 _
( F$ a) h9 R  O& l6 |. V3 @
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题
" ^' {; G4 \# j8 ~1 t- F* e) c- z6 ?# e9 \3 M! m
偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07& G) D; d( J  v+ M2 ~- |2 j3 T
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
0 N" L) [# I( D% a! h, }
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:126 _% E1 w& q: q/ }
你主要要实现什么功能, 需求告诉我  我写下看看
/ ?: N( w& r* B6 r( B4 H0 l
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了