PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

  [复制链接]

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

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

坚守 楼主

2013-12-18 16:26:08

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

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

x
各位大侠,帮忙看下这段代码有什么问题,开始几次可以实现功能,多次调用之后,UG就会很卡,紧接着UG就会停止工作,调试显示错误为:执行引擎异常。:1 X* ]5 O8 ?0 ?* `! i6 W  k7 \4 h4 h
NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;
, Y& c. B& E0 ?                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;" {6 h# t8 s  U" u" t1 t% Y; }
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);
5 W0 {( w: Y& @- h- d! ?/ @2 C8 G1 M
% {1 m: `6 D: _9 ?& U; A7 ]                Face[] faces = new Face[1];
" V% X2 S) h7 L4 A+ G6 `, b: O                faces[0] = face;2 E$ y& p9 C7 v  T  f
                FaceDumbRule faceDumbRule1;
0 y3 P5 g/ P  W6 y                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);& y: b2 K. o8 C" v# @  w5 I
                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
/ z2 T; v7 a: h, u, i# v" G- @$ {                rules1[0] = faceDumbRule1;* ^" N0 j( C1 z% m0 f) j( k8 `
                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
# p8 y& t5 {& ?9 W+ x& L  A. f1 w$ H% u7 y7 E  R
                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
+ g  p/ _* s8 P- n% D                theAdmResizeFaceBuilder.Commit();% ^5 |4 i& l; B% t+ b" p8 ?, F" Y! n6 H
                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
/ N+ ?" ^  Q: P( _; T; C$ @                faceDumbRule1.Dispose();
  n9 R/ F0 k, @0 j                theAdmResizeFaceBuilder.Destroy();
) C9 {- _. j' _
( a5 s; S9 o9 Y0 X9 `* x! F
' n( t" i+ q6 g7 O: r8 M由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
5 v. x, f! N8 j" j
上海点团信息科技有限公司,承接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

你就这一段代码吗?& ^  b! f$ p! Y8 {- e% ?
其他的代码会不会有问题' y" B; Q( }6 w
这是你录制的代码吧,你的face选择都是同一个?
上海点团信息科技有限公司,承接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:22:24

坚守 板凳

2013-12-18 19:22:24

这是子函数中的代码,是在录制“调整面大小”操作代码的基础上修改得到的。完整代码如下:
% Z: A& V0 E- o2 r3 K8 }: pusing System;
0 L" ?  h/ k* w7 ]) _using System.IO;& q  ~5 L' e1 `" ^+ W& q& M6 ^3 s
using NXOpen;
+ R% C, t( o2 c' Y) O0 G) G5 [using NXOpen.UF;5 q8 j: _- L3 i2 f2 u

* E: d% ~  F; i) o# G! enamespace InstanceFeature; W; _( l1 G; c9 ]! M( f4 ^' \; ~' k
{
# K- O0 a/ k7 D8 G; U3 X6 |8 v# g  \    public class InstanceFeatureEdit
$ v6 c: g* G: V, B! q3 Q- a    {
6 ^1 g7 w5 |' X; f        private static UFSession theUfSession;; _1 c! Y9 W, t; ]% e( b' g
        private static Session theSession;
9 }# U' s1 p  k0 ], q+ l2 s' c, c7 o, j  L) a
        public static void Main(string[] args)* ?+ A6 g' Z( n; J5 f8 g
        {
/ ]2 I8 @3 @9 X            theSession = Session.GetSession();
7 g& H& v2 g* o0 u8 s            theUfSession = UFSession.GetUFSession();
) [4 G, o9 b5 S; s3 A            theUfSession.Ui.OpenListingWindow();3 _% o) @7 H# o: i
            Part theWorkPart = theSession.Parts.Work;! y1 N6 |1 ^0 r
            NXOpen.Features.FeatureCollection theFeatureCollection = theWorkPart.Features;/ G/ a# n. S& x& G- f; ^
            NXOpen.Features.Feature[] theFeatures = theFeatureCollection.GetFeatures();1 n; S6 m& [- D8 j0 v; ^
            for (int i = 0; i < theFeatures.Length; i++)
( p* w- }: M7 {, p2 S            {
6 N2 J  L! `7 K                theUfSession.Ui.WriteListingWindow("特征类型名:"+theFeatures[i].FeatureType+"\n");9 @) @, {& x3 E7 H( T/ B# B
                if (theFeatures[i].FeatureType == "BREP")
8 [- P. k- J: G; n% x( _                {
$ z8 c# \. d& E! V                    NXOpen.Features.Brep theBrep=(NXOpen.Features.Brep)theFeatures[i];
: w" B/ @5 \% Y( U$ I                    Face[] faces_of_brep = theBrep.GetFaces();
3 p- x+ A2 K+ Z9 Y                    theUfSession.Ui.WriteListingWindow("面的个数:" + faces_of_brep.Length + "\n");
8 M2 n0 r9 f4 I; ]$ Y                    for (int j = 0; j < faces_of_brep.Length; j++)) ^! s' d! ~" d" f  ]0 W
                    {6 l! V# X# m, x  X6 S
                        string facetype = faces_of_brep[j].SolidFaceType.ToString();$ A$ E/ v- p7 W; K1 D
                        theUfSession.Ui.WriteListingWindow("面的类型:" + facetype +"\n");
! S7 p- x* R/ k& \- p% T                        if (facetype == "Cylindrical")
  N* L% l' h$ u( i8 [                        {
0 j6 g0 c8 {5 U+ B7 a: O8 f: }                            int type;; e) C6 ^5 R- n! q8 i* R) {
                            double[] center=new double[3];
- y8 a* Z# i9 R! j- _! q5 E                            double[] dir=new double[3];& O. Y, y1 A8 J/ s  R1 o2 U# h9 ^# S
                            double[] box=new double[3];9 L5 F% {' R* [2 g' ]" X6 L3 C9 o
                            double radius;8 Z$ r+ Q, j3 r4 |( w
                            double rad_data;
: c3 `" Y, a5 _/ t& ~$ a; {                            int norm_dir;
+ B$ R& ~& k! u& d, ~; w                            theUfSession.Modl.AskFaceData(faces_of_brep[j].Tag, out type, center, dir, box, out radius, out rad_data, out norm_dir);7 {. W* _5 ]2 N0 d) i9 w
                            theUfSession.Ui.WriteListingWindow("center: (" + center[0] + "," + center[1] + "," + center[2] + ")\n" + "radius = " + radius + "\n" + "direction: (" + dir[0] + "," + dir[1] + "," + dir[2] + ")\n");
) x% y; s% z. r8 R                          //DeleteFace(theWorkPart,faces_of_brep[j]);
$ ?( X# n& h  e4 ]/ O" @& t                            double NewDiamter = radius * 2-2;
  w9 ^' B: u6 D                            ResizeFace(theWorkPart, faces_of_brep[j], NewDiamter);
9 s& m' A: h* \/ N4 T6 c  T7 ]9 g$ B                          //theWorkPart.Save(BasePart.SaveComponents.True, BasePart.CloseAfterSave.False);  q( L1 c" v5 x/ V% m  {
                        }. l9 l; y9 \! r- B
                    }
& e, a: a5 u. R- G0 r: |* D                }
5 j$ I& V3 c3 T                if (theFeatures[i].FeatureType == "CYLINDER")
* O/ r* r: M+ ^& G  }2 G, U9 r- o                {- G0 p2 ]) }, v; u0 X
                    NXOpen.Features.CylinderBuilder theCyliderBuilder = theWorkPart.Features.CreateCylinderBuilder(theFeatures[i]);; N7 H( m3 c, A7 m6 q+ T
                    Vector3d dir = new Vector3d(1, 1, 1);
6 e" ?8 ]& C' [2 U2 W3 Z                    theCyliderBuilder.Direction = dir;
7 s, Y6 d# \7 X% ~- o+ S0 o6 L1 B" p                    string str = theCyliderBuilder.GetFeature().FeatureType;# x$ M5 w# @8 `! K' [0 L
                    //theUfSession.Ui.WriteListingWindow(str + "\n");; @: S# e& ]) j$ e# \0 i
                    theCyliderBuilder.Commit();
9 k5 S* `/ E6 ~: N5 a                    Point3d point1 = theFeatures[i].Location;
0 @; I& K& P( `0 e                    theUfSession.Ui.WriteListingWindow("(" + point1.X + "," + point1.Y + "," + point1.Z + ")\n");
: O# z3 L# e# a4 C; A# |                    theCyliderBuilder.Destroy();/ k( n# r7 p' y6 x0 V" Q$ A8 ~/ b
                }3 p& a$ ?; R$ x
            }+ Y4 u3 w" E+ W, s4 Q" g
        }4 O9 J) Z! r6 M6 |; X

) D" ^/ r  _7 u6 E- E0 H        public static void ResizeFace(Part workPart, Face face,double NewDiamter)
7 T+ z& O" w$ [" c* D' @        {
+ ?. K3 o$ G7 ^& w; u; \/ `2 C            try
5 ~/ m* [. f( p* Q) m            {% I4 N1 Z% R: e" d& n6 x2 N
                NXOpen.Features.AdmResizeFace nullAdmResizeFace = null;$ Q$ a( j5 W% n/ @( ^9 D+ P
                NXOpen.Features.AdmResizeFaceBuilder theAdmResizeFaceBuilder;+ J7 A0 `; d0 K/ q
                theAdmResizeFaceBuilder = workPart.Features.CreateAdmResizeFaceBuilder(nullAdmResizeFace);; u4 [3 [4 C2 e$ C

5 e" |) S) y2 [! M                Face[] faces = new Face[1];
: e5 R$ P; ]7 y+ K                faces[0] = face;
# V1 b8 @3 M% d# _* X: t' Q0 S7 `* M4 T                FaceDumbRule faceDumbRule1;
% a6 m1 ?+ M$ F0 h; A* X                faceDumbRule1 = workPart.ScRuleFactory.CreateRuleFaceDumb(faces);
4 Y4 F4 f6 b& V1 b, ~1 g                SelectionIntentRule[] rules1 = new SelectionIntentRule[1];8 l0 e& Z% Y+ ~( I3 w- y$ H5 F/ R
                rules1[0] = faceDumbRule1;
) z/ p: k: j  N8 N+ K                theAdmResizeFaceBuilder.FaceToResize.FaceCollector.ReplaceRules(rules1, false);
  e. {; E' E* i* e( f! s* I- o
6 J& q2 Y0 _3 |' D                theAdmResizeFaceBuilder.Diameter.RightHandSide = NewDiamter.ToString();
, T6 _9 F: G  E  b/ Z, Z                theAdmResizeFaceBuilder.Commit();
% T0 I+ ^4 M  N9 O                Expression expression1 = theAdmResizeFaceBuilder.Diameter;
" q8 D5 K- }6 w% B                faceDumbRule1.Dispose();; G7 F6 {4 V: s' k0 i7 N. |0 _
                theAdmResizeFaceBuilder.Destroy();
5 E, o' \% K0 Q5 k3 G  T            }
. I$ `& Q5 X% G            catch (Exception ex)
' d% d8 d. F8 u            {
% c2 d1 J3 B9 n0 _* H" ^  T                theUfSession.Ui.WriteListingWindow(ex.Message+"\n");
1 C# _1 x, j/ q6 {1 T            }
% h. R! N5 q% f        }
' h" B8 E* s) b: W& d# }" v0 F) x5 Z( b# b5 [- A& }
        public static int GetUnloadOption(string dummy)# P+ Y# x8 E: k$ M3 j6 |/ ^
        {& D7 @" M) D8 ]; y; _
            theUfSession.Ui.WriteListingWindow("GetUnload函数\n");
4 ~6 s( e' |" c, \% G( u/ V! q            return UFConstants.UF_UNLOAD_IMMEDIATELY;* y2 ~$ b5 U3 R7 H6 x, c
        }6 L) |% }! s. Z3 o7 b+ M3 F
    }
, i7 G# a0 g6 n5 F' g; }}
" o% f, K9 J- P3 L, S
上海点团信息科技有限公司,承接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& r  a  ^; M/ X" J% {
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...

6 {7 Z1 G; G$ a9 s$ Q" }/ q估计那个地方要释放内存 9 @0 M, U0 m% v/ g  p3 I8 B4 {% S

0 h/ b/ i( W. W4 ^: L这个需要调试的 + V) J7 w" t6 s5 L2 U  \3 _2 h

) S% i& Z/ y4 P+ _Java 我不怎么用 , 你自己把代码 一段段的调试看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 6#

2013-12-18 19:28:38

坚守 发表于 2013-12-18 19:250 D8 L  T3 I; S# z
如果我模型中有一个孔,我调用该dll文件两到三次以后就会出现异常。或者模型中有好几个孔,可能前几个能处 ...
" h3 Q. f! t, A1 c
另外你干嘛要用同步建模的功能
8 L3 D6 V1 y9 w+ A3 V2 u6 |% c4 y/ J% p( u3 c+ P* Z* z! w
直接使用 偏置面 不是更好
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 7#

2013-12-18 20:07:44

mildcat 发表于 2013-12-18 19:28
8 i" D! P* _* E0 a另外你干嘛要用同步建模的功能. q3 n8 a6 B; ^: g3 v2 h# H, g

7 K. u8 ~, s+ d0 |2 {3 o直接使用 偏置面 不是更好
$ T' g2 a9 O% J% ~
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
上海点团信息科技有限公司,承接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- x% B8 l+ E- E, O6 t
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
9 l! ]! I, a5 P. B5 `, c
具体这个 我还真没怎么研究过  : g! `1 {$ F0 I
& V, S% Y4 d" F+ V; O
不过我建议你换 成偏置面 ,然后 试试 看到底是那里有问题' e/ a0 ^6 c2 u7 q2 J: q6 m

# y& _5 f2 h6 R; r. A# [偏置面功能很简单,在 插入 --修剪与偏置 -- 偏置面
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

mildcat 9#

2013-12-18 20:12:11

坚守 发表于 2013-12-18 20:07& s  b5 k8 y8 k  e8 r
偏置面我没接触过,我还要用同步建模来实现孔的移动、删除等操作。
* J3 n! b" Z3 h0 [+ H) C" k/ b9 |
你主要要实现什么功能, 需求告诉我  我写下看看
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

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

坚守 10#

2013-12-20 09:27:11

mildcat 发表于 2013-12-18 20:12
, U' @6 U4 @# n你主要要实现什么功能, 需求告诉我  我写下看看
. G/ k3 r% X$ U9 {& y4 k
我想实现对模型中的圆柱面的半径进行放大缩小,模型是被移除参数的。谢谢!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了