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-国产软件践行者

[资料分享] 选择平面,创建中心线

  [复制链接]

2022-12-21 19:59:03 4390 5

简简单单 发表于 2014-12-12 10:44:01 |阅读模式

简简单单 楼主

2014-12-12 10:44:01

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

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

x

+ u# N9 Q& z4 J1 }#include <uf.h>
$ a. ^8 r, s, J8 O#include <uf_ui.h>& S( K9 X9 R$ e7 X' b' Z% p0 B2 X
#include <uf_exit.h>
, T; ]) L& k2 O- ?, ]0 \" L% X
0 T) V/ q2 G* f8 a#include <stdio.h>
% [& Y4 b/ l( R, J9 L. a# ~) m#include <uf.h>3 W9 ?; p" D# Z" R7 D
#include <uf_ui.h>
3 Y) K. r: J, u#include <uf_exit.h>
% B9 S7 `0 v( x. v% e% B#include "uf_layer.h"
6 i8 G# M' h6 N/ W: h* o( `#include <stdio.h>8 T  D! {* w& w% _
#include <uf.h>
. E: t# y( a+ \5 ?& H8 c#include <uf_modl.h>
4 h* B7 w1 C2 C, R1 s0 f#include <uf_curve.h>
, z# ?7 p" a' O#include <uf_csys.h>. \: ]) b+ W! Z- M( p& A7 {# @1 @
#include <uf_object_types.h>. @* D+ o! w$ k8 \. ^9 f
#include <uf_ui.h>
* |5 ?+ w6 m9 p/ d2 P6 `#include <uf_part.h>0 F! ]( h2 G8 [- z
#include "uf_obj.h"3 ~: r0 e! s& N' N, {7 E' y
#include "math.h"
/ {& G& k% U- [# w
1 D* n8 V  {8 C/ i2 [static int init_proc(UF_UI_selection_p_t select,void* user_data); r/ v/ T+ o5 E7 q; q7 ~; o% X7 H, W
{
( o+ ?' R$ y6 ^0 n5 `1 d        int num_triples = 2; //只选择一种类型
9 r& _$ L( X2 F7 V& p        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
; b- |  g" ?7 ?* N1 p$ `                UF_bounded_plane_subtype,1,0};# K' _6 S1 N5 X7 I1 x3 Q+ k9 o
if((UF_UI_set_sel_mask(select,/ s# \1 V* S7 t( H( x, v7 l1 C: i
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC," z& h- o2 z4 k5 q
  num_triples, mask_triples)) == 0)
- G& u0 M4 W. m- X  t; v$ u {- v0 x9 D) h) s7 w4 r
  return (UF_UI_SEL_SUCCESS);
7 p- S0 \& J) d2 D5 w0 T+ D3 { }
2 t. C8 N# F5 `1 T/ b" c% l else' \& ~' K) d5 Q$ }3 R+ e* j: r4 j
{7 Z4 i! f- D: `( o: p2 X! |
  return (UF_UI_SEL_FAILURE);
( Q1 k/ h+ h% V2 m2 S, t }
, z* v" T+ F  L# }. P9 K5 @# f9 b}2 L6 K; c: H6 T7 H2 `; q) I

* q( N; X8 E9 @2 a3 W; Y$ V! w  u6 A, e4 {/ T
static void Create_Center(void)
, s3 X; v/ X7 K) X, e1 z  @{: `% E9 ?, M0 ?1 |( z
        tag_t user_wcs;
5 w, r4 C5 Z* n7 M, u        UF_CSYS_ask_wcs(&user_wcs);
' e6 z3 i  I' e6 |- Y        char cue[] = "简简单单:请选择单个平面";
( \1 z- ~+ V; ]# }6 R7 H+ L        char title[] = "简简单单:对象选择对话框";
7 U' s/ B# j. i) Y int response=0;2 C) Q" ?$ ^8 ]9 \! k
tag_t object;
3 K% Z( r1 I( f int count=0;
6 ^3 c6 X; i' ]4 Q double cursor[3];
! z! ]* u" h2 M) Y& j1 c9 d0 y tag_t view;$ f# o- f6 ^. k$ M6 Z/ I# F
l10:
" R: p$ a* J# Y4 r UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
& n0 ~9 Y8 X, @0 y, C; r9 n/ T$ l. h if(response==UF_UI_BACK) return; //如果点后退就跳转到L10+ S; d! V6 e) m, |1 e  L
if(response==UF_UI_CANCEL) return; //如果点取消就退出
1 r/ @! E2 ?  m3 Y UF_DISP_set_highlight(object,0); //取消高亮显示
; H/ K" O. ]3 P, h; e" ~+ [; `# W6 j; \+ y' ?2 R- b# @
  int type;0 `. w) Y; r) K8 q( O
  double point[3],dir_z[3], box[6];3 B/ X. O: b7 e) x
  double radius,rad_data;8 i4 N. t2 Q" r; A2 ?
  int norm_dir;
( m, }" ]* ]- T9 m7 q& `  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
0 a- k7 A2 d2 d; S  ~2 V+ U! S- ]
8 p- b* t4 @- N
! Y5 w! l4 I5 C, D2 S  tag_t matrix_id;' G' X7 G% y# m& c5 i1 A  n8 M
  tag_t csys_id;
+ A2 w0 s) W) J. g% Y! x  double matrix_values[9];
* h9 t9 }( p5 C. Z  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID0 o9 s9 k* i1 X9 E2 r/ I! z
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values5 T" f$ r$ `5 Q& X! O6 _) ^
  if(norm_dir<0)        //判断面的法向是否相反
# v( g( ]0 h7 p  {
# v: U; l4 `+ W4 |8 g   matrix_values[3]=-matrix_values[3];
, {7 M' y/ d4 l$ W" R   matrix_values[4]=-matrix_values[4];3 Q# q( e- D2 w6 w3 \4 S* q
   matrix_values[5]=-matrix_values[5];
7 @0 x6 O; E4 e" K2 M$ V3 Z) p$ p/ q   matrix_values[6]=-matrix_values[6];4 y: m$ a" }+ y; p8 J$ v
   matrix_values[7]=-matrix_values[7];8 X5 Z* g$ N, j- v
   matrix_values[8]=-matrix_values[8];
* b) N( N9 a7 R# k4 ?& `   UF_CSYS_create_matrix(matrix_values,&matrix_id);" [6 o& i4 H4 D7 f- R
  }
" V/ X6 m% c$ N; O& B7 j: m9 k  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);6 N1 i; Y$ X2 W0 C- o
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正). Q! m0 [3 f5 ~  M$ _
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
, J8 g% r, `1 N+ ?  W0 w
* X7 Q1 S4 ?, Z        double boundingbox[6];
4 ?) O5 T# w) @7 I6 r- v8 b        double boundingbox2[3][3];4 W# k* C9 d, l7 ?2 L
        double boundingbox3[6];
  W" K, q: ~' e; F        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
' q* g6 V8 v: i7 y; S6 p0 O, D$ Z8 i0 S( t! ~5 i& b, x2 {& e/ W9 _* H
        if(type ==UF_cylinder_subtype)( M2 m! M2 Y# u) R/ W6 X
        {! i# d- @9 J) P! U. T  _6 h
                double cyl1_pt[3];9 n4 a8 a" l$ T- Y% U
                tag_t cyl_line,cyl_pt;
7 c) U5 H4 b- C0 X5 p4 I+ n                UF_CURVE_line_t cyl1_line_coords;
" j4 ?6 k7 }: q1 k1 q                double WCS_pt[3];/ m% m, X0 X' _1 `  n3 _
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs& n* x, Z0 o" _0 O
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs3 E0 s$ f( n8 w5 U
                cyl1_pt[2] = WCS_pt[2];
4 S$ n2 i! v& t) [! C
: y, E8 `$ H$ l. C* v4 ]                cyl1_line_coords.start_point[0] = cyl1_pt[0];
. D* I5 P* L3 }4 L" A9 r3 b                cyl1_line_coords.start_point[1] = cyl1_pt[1];
" X$ p; H2 T4 p  }0 y: P  Y                cyl1_line_coords.start_point[2] = cyl1_pt[2];: G" L; Q- J  z0 S

+ ^* I9 ~/ l- m  v4 u                cyl1_line_coords.end_point[0] = cyl1_pt[0];8 p1 Y( C0 ]6 x  {* t: ~" S6 F$ U
                cyl1_line_coords.end_point[1] = cyl1_pt[1];# H8 n( F+ _1 F4 [7 d5 @* C6 R
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];) \) g7 l; W3 n5 {+ x$ |! y8 {
, A! w0 S; Q0 i" m7 w+ ^6 h
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标3 n5 \: ]( h8 o0 x4 e3 ?3 w9 Q
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标9 u' g4 M* ~' P# `( J
                * Y8 _5 b/ V: t
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);" L: z' E$ j7 u. o
                UF_OBJ_set_color(cyl_line,186);
% S9 N+ K  {+ t! c; q0 d; _                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
( l* W& t) V" B8 W* A% E3 g' i
- s. n- B$ y% r9 h9 X/ H. w2 p                UF_CSYS_set_wcs(user_wcs);1 ]/ P  T3 H2 K( B) t
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
2 e& D9 E% H1 p9 z/ H/ _3 {7 }8 D4 u) M+ M3 c8 {# V2 j, A
                goto l10;
& S% x8 t& }) p! c        }
0 N/ A/ J/ @+ {) k, B! T0 r0 ~7 D; G- F) ]! R1 t

8 |% n1 h! |5 Z6 `/ {+ ~4 ?& u) c        double WCS_pt[3],center_pt[3];5 ~3 u0 j/ f2 l2 ?" L& x
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
6 @& Q6 M4 \. c9 m  o! _3 g        UF_CURVE_line_t Xline_coords,Yline_coords;
. [) J. J$ D# f        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs. l/ \* e  C. e# T5 Y
        / H8 j9 @: w8 b  j
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
8 H6 r6 u1 K. T8 c' I( r0 L9 d        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;' W7 N8 J2 ], E% @0 J: n, d* o
        center_pt[2] = WCS_pt[2];9 a" R& Z2 f, f* `5 K# v- v
5 y% g4 y0 s9 V* R

6 ^% k) f$ a9 s; [# n! O6 T7 s        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
0 I, i# D: c7 ~% N7 x        Xline_coords.start_point[1] = WCS_pt[1];+ `  y, f# I2 u) u  S% }1 {1 R
        Xline_coords.start_point[2] = WCS_pt[2];. B$ ^, [2 R8 D4 N0 Z
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标* P* H1 I4 n, e/ N& X5 \2 z
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);* a. V2 Q& d4 x

' F5 G" A' e, N        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2# j% y9 i6 p  H% e/ `
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小' K) k  s1 H. C2 q: b0 I
        Xline_coords.end_point[2] = WCS_pt[2];
% y$ G# {  e% `        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
1 `; s3 c# T3 {! q$ `//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);9 u8 j& a* @' h# F

' x8 r- x& O: Z( h( h        Yline_coords.start_point[0] = WCS_pt[0];
4 a# \, w4 D& K' W! Q" ~. o        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;; Y$ C! W/ Q" |# t, n) i
        Yline_coords.start_point[2] = WCS_pt[2];0 _2 Y2 {% O7 E9 z1 n
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
" E* P& A" S+ z- s6 P! V  f//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
# b. v5 C6 X6 Q  U/ k: g
  Z/ p' U" C+ ], B- J% Z. w        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小" z/ o' Y# \) ~$ z" a% V
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;! C/ R) d/ G  _" k! R' ^7 \
        Yline_coords.end_point[2] = WCS_pt[2];
4 h% ^/ @5 t; }' B; t, m- N( H' B1 I        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
8 V0 A* x5 A6 _& q" s' F8 |//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
3 `' V4 i7 e  A; T       
  Y, f8 t& t( w8 Y) \3 ^, e1 q        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
5 g. C# L) L  {        UF_CURVE_create_line(&Yline_coords,&Yline);
+ t- ~- E/ M* q4 y7 |  _) x        UF_OBJ_set_color(Xline,186);        //设置颜色
" r  ^. l  n4 o8 ~        UF_OBJ_set_color(Yline,186);, P, y2 S! q* |- h; O. u0 Q
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型& b' ]# h# P. H; x% T  C* ]
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型7 H% h9 y5 e' `: P
3 k1 u. c0 T% @+ x
        UF_CSYS_set_wcs(user_wcs);
8 t& J3 ~8 \3 E) t$ K. _7 V        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)# Z1 t: T; m& m( A9 H9 a+ A
        goto l10;
: Y+ g- x7 d2 Y- F# U9 w& ]* H
) d; I* N; \  [2 S}! C, d5 A: O, R2 {$ p! q, Q

0 ~5 g$ d: i' zextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
3 s4 N5 ~' {8 L+ O) n' s; _{
# g' a: V& e; z% d- H; F    /* Initialize the API environment */, b  ?- A" r; L  q- t
    if( UF_initialize() )2 t6 y) z: [! t  Z5 a
    {# V: t! P# a- b( ?
        return;
1 ~7 X8 }: J  N7 L% a    }& K* H( N0 K% U& |

* D, z7 F% S$ m) q! T  Y        Create_Center();. D$ \# D! L2 ^% Q- R! _! L
+ R: ~) ^; z# [7 s7 F- R1 D" O  Z
    UF_terminate();
  ^' J: m7 t' [- h}! s! E6 V9 j( k5 i! @$ K

" T1 m" G9 q- f! ]% q4 i: {
% P) E" [8 Z" w2 Z7 @9 V- xextern int ufusr_ask_unload( void )0 W" y# ~! d- d* X/ I, c5 K: F
{
, O: }5 y9 v+ e" P! t8 B2 ~3 U    return( UF_UNLOAD_IMMEDIATELY );1 r6 \8 R+ F- s
}7 I1 M$ I* y; [7 j+ i7 f
( f: x, j$ m" j8 r- o- z

' S* J7 K$ ?1 t/ N$ x) O
6 [& K. N' E7 G$ E1 K# [3 X3 y5 c6 g" y
11.gif
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复5

简简单单 发表于 2014-12-12 10:44:43

简简单单 沙发

2014-12-12 10:44:43

呵呵,终于写好啦
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

admin 发表于 2014-12-12 10:48:43

admin 板凳

2014-12-12 10:48:43

简简单单 发表于 2014-12-12 02:44
7 j3 r1 h% T" G4 b) L. x呵呵,终于写好啦

* v; b5 x0 ^8 \) l; P% F3 \. d2 [不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

简简单单 发表于 2014-12-12 12:01:37

简简单单 地板

2014-12-12 12:01:37

老师多多指点才行
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

admin 发表于 2014-12-12 14:24:54

admin 5#

2014-12-12 14:24:54

简简单单 发表于 2014-12-12 04:01  [/ E; Z5 n7 g3 Y
老师多多指点才行

4 l& e9 A6 B- O! k后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

freshapp 发表于 2022-12-21 19:59:03

freshapp 6#

2022-12-21 19:59:03

好人一生平安!楼主好人啊
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了