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 4398 5

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
6 Q, r  y4 j5 y9 M
#include <uf.h>0 x' K, x2 Z7 u& a+ i& Z
#include <uf_ui.h>
7 L5 {1 B# k+ y* y* n; |#include <uf_exit.h>
7 `3 x0 b5 w" L
4 U4 k5 y# l8 @- D, [#include <stdio.h>
. Z" ]* r8 O# ?5 E6 K& _5 b# {#include <uf.h>
% g! \4 z! ?1 v% x. g$ M#include <uf_ui.h>
1 r& w" Y3 s. m2 c: T#include <uf_exit.h>
/ x- x$ B4 i: ]. d. v1 Y#include "uf_layer.h"6 Z. B2 v/ F2 z) I3 X
#include <stdio.h>
$ I. I- \  ?  p#include <uf.h>
; v& g/ _3 c9 g! ]0 }#include <uf_modl.h>
$ z( n5 M+ [: ^( c) s#include <uf_curve.h>4 _# r* T5 G7 G/ `
#include <uf_csys.h>8 V3 N3 I: i# A: E! l% ~
#include <uf_object_types.h>
& W9 t" R% y9 J* p" e! I  k; }/ W#include <uf_ui.h>2 B1 T7 O' y2 F8 E  [
#include <uf_part.h>
# ~5 [  Y; i7 r( p( G0 {#include "uf_obj.h"
8 u: m) g1 j5 m( D6 N#include "math.h"5 _  H- |5 k, M& L: E

# J# G0 f( O. cstatic int init_proc(UF_UI_selection_p_t select,void* user_data)
! R# i8 s* U, D% \4 K5 w7 y{
& z. S7 j2 M: z% L; c- d1 b        int num_triples = 2; //只选择一种类型
7 Z- M3 N5 q& [/ f' s, Z. M0 r# p+ `0 }        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,) z9 ]- A. w! q! Z: q1 N5 X  `
                UF_bounded_plane_subtype,1,0};
, B, C; J% C4 l& @; m; N6 [3 l if((UF_UI_set_sel_mask(select,9 s+ S2 L: i' ]* r
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,1 v0 b  U! ?) F# a; F
  num_triples, mask_triples)) == 0)
, E# M+ {; s) h- o  i& s8 l. R {& s1 z' n: q) b, N7 O! ?
  return (UF_UI_SEL_SUCCESS);; W8 ?- f& P" @2 Z( s
}- V' u0 }4 Z! _1 t& ]
else
# K" W: ^3 n! k  i3 i {
* S& A) D3 G" o4 _! ]! O7 \$ O9 d  return (UF_UI_SEL_FAILURE);3 g* o/ C7 ~* Y& I
}
5 ?( P6 f6 Y  c& a9 ?}6 t! R  ]) @4 A; t4 o

* i0 X  A5 `! e# ?0 ?  n% x1 P* A0 E5 x3 ?/ p# @+ Q
static void Create_Center(void); l4 F6 F4 i: H  s9 l1 _
{
, t6 Y' V  a+ [4 M+ W4 d        tag_t user_wcs;, S8 e  N; ?% m0 B7 P. q) l
        UF_CSYS_ask_wcs(&user_wcs);
* w5 z  Y" A( ]! r        char cue[] = "简简单单:请选择单个平面";; _  D( h% \4 r3 U  |
        char title[] = "简简单单:对象选择对话框";2 I+ \6 H0 f% H1 e# x+ p* z
int response=0;' K' i! ^. ^0 u& s7 ~6 w
tag_t object;, L8 P  j( j, {- }
int count=0;
+ s+ Q1 g8 c$ I/ A double cursor[3];
7 T1 V: E1 z. |' ]) x; N8 b; @ tag_t view;, x9 c  y: r6 e& h  y
l10:
9 N5 I1 l6 p" ]2 f UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
. k# Y$ c( [' {, W6 y4 M3 |; a/ G if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
" y9 X) X1 c% \& ]% k1 l4 g if(response==UF_UI_CANCEL) return; //如果点取消就退出
2 G) B$ F: A# {; y UF_DISP_set_highlight(object,0); //取消高亮显示
0 G3 P7 c( v3 y; \* s5 H9 Q
' N- b( [. g; Z) h& I0 e  int type;( }7 O4 L9 @  [: H3 b; [
  double point[3],dir_z[3], box[6];7 v3 m; ^4 J" o2 E# ]! C, l. }; I
  double radius,rad_data;
( ^1 b5 a- M% s, N1 Y  int norm_dir;
2 v- P& Y( k. X  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
  s" O( b# @! T8 C' i8 y8 ?0 ?* Z5 S  }
( S+ o' G8 X3 E7 a4 H: `2 y/ R! k, @
  tag_t matrix_id;1 u" j5 K$ T: o$ B
  tag_t csys_id;6 m7 g' p+ A- ~$ i( Y: @' k
  double matrix_values[9];
% m: d6 {7 }( p4 P( I  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID: ?' R% A2 @7 p  t( U& s+ U* u
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values. n# Q+ M8 H9 m3 Y1 U. B/ T  U
  if(norm_dir<0)        //判断面的法向是否相反
( ^  L3 {/ D- C1 S( v+ f7 e# j  {
2 _* a( H' G6 y. m   matrix_values[3]=-matrix_values[3];
4 s' x0 {% N2 N* r0 s   matrix_values[4]=-matrix_values[4];, o2 M* p$ ]* k0 M* Q- q
   matrix_values[5]=-matrix_values[5];
. O% o1 ^5 K8 t$ V9 E. T   matrix_values[6]=-matrix_values[6];! d6 b0 [3 Y5 O. t" w6 M" k3 L, }
   matrix_values[7]=-matrix_values[7];
" e7 ^* H: s" C' Q- {  L8 a2 o   matrix_values[8]=-matrix_values[8];5 R7 d3 ^6 v5 H% Z$ i! f
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
/ e5 E: r( i2 b; I- V  }
* X+ t; _3 ?8 K& n  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
0 u" Z7 B0 |9 c. a# o) ]! t" ?( b  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
& b% b+ C. _' w* ]2 O UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
- t, B* q5 S9 U3 @8 H0 |: Z: `+ m0 ?- i5 b# U$ t# d2 y
        double boundingbox[6];& W! f0 \. R5 V. G! Z$ a' G
        double boundingbox2[3][3];. P( y. p; _- t: M
        double boundingbox3[6];
# O  h9 p! M& Q9 Q9 ]        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);, L# @7 \, \, \0 Y) I6 c3 ^2 e7 ^

0 p6 U% D0 d$ [' {, ~+ j' D7 J8 `        if(type ==UF_cylinder_subtype)
% p9 m) {4 [/ l( @7 o3 E( Z        {
0 P8 B" E; _1 G. {                double cyl1_pt[3];
4 P1 Y; `, j8 n3 A% F( x2 j                tag_t cyl_line,cyl_pt;9 ^7 q0 n& T& T+ g+ a) g- y) S
                UF_CURVE_line_t cyl1_line_coords;
9 J" j6 l1 m) d- H* F                double WCS_pt[3];% G+ m' t, w3 Q* K$ K) O
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
9 D% m2 g" c9 w                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
4 N; W; g  a. X5 T' }9 O* S2 h( D                cyl1_pt[2] = WCS_pt[2];
1 R" |$ V, b- s( u5 e* G8 Q+ V0 I+ B. W1 Y0 A8 h3 c1 N! Z" C
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
; m; [6 H" n$ @! n/ t' ^                cyl1_line_coords.start_point[1] = cyl1_pt[1];
) E  j3 G& v7 p                cyl1_line_coords.start_point[2] = cyl1_pt[2];
, H# V6 e2 _4 A" ]. Q! v, ^6 p1 r+ \1 R- c
                cyl1_line_coords.end_point[0] = cyl1_pt[0];5 u7 V1 n2 P% [* |9 b3 d4 ]
                cyl1_line_coords.end_point[1] = cyl1_pt[1];9 P( T5 P# g( Z& i
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
) l$ K( I  w- g2 A5 l* @9 X9 y8 G! {0 M; r! ^& G  ~' b
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标# }8 e# R% H+ }. C6 h" z& A
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标0 e9 k9 O: a; q4 D4 E8 n, Q
               
( N9 \* ], U$ i5 E6 E                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);! W5 K0 r: z: w* v8 a- }- g% c/ Y
                UF_OBJ_set_color(cyl_line,186);& D* r1 ~* Z9 X8 I! }
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型/ f; _; Q; P' b, X& [
: N9 w' ]1 L0 @' O3 v- m! z
                UF_CSYS_set_wcs(user_wcs);5 U  ?# X8 x! f, u2 P
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
- ^+ Y& F3 l8 R" F. r! p( @" Z  {
6 m% e" y& ~$ S$ [6 w% j7 v: x0 |; h                goto l10;
- q* H/ M  }1 _* M+ J        }
7 k, p4 Z' V: r1 j" H; m. x1 K) [% P4 Z: O% a' T, o" I( d: P5 J* }
0 i3 f& a+ f$ g) j/ Z# f8 U
        double WCS_pt[3],center_pt[3];2 f7 \+ C% O9 b' L5 D) p0 o
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;% S6 Z* |7 R0 @
        UF_CURVE_line_t Xline_coords,Yline_coords;9 P8 w4 M; v! G- n. g  _+ D6 ^' ?6 X$ G
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs+ _+ _, [* f6 g/ H
        ! v) z- R; @2 m* \$ u; f, J
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
( c/ G& T9 s6 `/ G" X" k. H        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
4 A. n+ @9 z. M: J& ~        center_pt[2] = WCS_pt[2];' z8 d! O' u4 _: [8 u+ ^1 A

! }8 y  X7 m5 O- _7 x' e: H2 ~  B- ?4 [* O& V( J# m
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
- x+ e; U! z5 i% r, N0 F        Xline_coords.start_point[1] = WCS_pt[1];$ D1 f% N: S) r, ?% M
        Xline_coords.start_point[2] = WCS_pt[2];8 x( @  `4 \  b* I- c
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
  H8 k7 H, F. q' O+ W6 ~7 }! B//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);& f7 z5 V/ a0 ^) n8 F$ v5 R

- V" Z/ o9 s2 U; S% i9 \        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
7 C" @- ~* u$ T' N. \1 O" H" U        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小3 Y5 R, x( P/ q. b
        Xline_coords.end_point[2] = WCS_pt[2];9 F$ P1 a& ^3 b+ z
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标: w1 L" K! w3 d& ~
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
7 h& `! d) V8 s$ @0 ^7 {' n% t6 }" U. x& W3 M( B% X& A# c
        Yline_coords.start_point[0] = WCS_pt[0];: }9 T  `, V5 n! D, @  M# i: z$ T# N
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
1 }: ?( x' ^" f# }        Yline_coords.start_point[2] = WCS_pt[2];
: A% U! _* U. n        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标* i$ U; R' y, [' x# ?( N
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
: k; o4 q( f6 a0 T! _+ W& X, S- |% K+ x1 |- N1 V
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
' @( ]! [/ U  d! y# ]8 O        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;0 G% X) s+ x5 C: d: x. q7 S
        Yline_coords.end_point[2] = WCS_pt[2];
, p5 ~* n% `4 U  E! K& c: _        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标) L! Z& l8 W& C: I+ l5 A
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);# x" |! z3 v9 @! q. C. E2 W& M
       
2 u. w1 A! \  @5 T* s/ N4 s        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线. ]& ]6 f/ y8 R: x/ Z
        UF_CURVE_create_line(&Yline_coords,&Yline);
# I, `- `# G$ ?4 `+ x) h- T' ~- b        UF_OBJ_set_color(Xline,186);        //设置颜色
, `+ s" s5 ?  p        UF_OBJ_set_color(Yline,186);# Q: i5 B9 q7 a4 t  _! ]
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型  v4 \; \8 N1 i. _7 |
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型! C8 P  _" S4 @; `2 M

) D3 H6 k, A$ T% q# ^( e& s2 S        UF_CSYS_set_wcs(user_wcs);8 d, Q+ u( F" G$ T6 a" G
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
, X/ Q6 P6 X* e0 l9 n7 Z        goto l10;) a2 \5 g" H4 D& V1 C5 h

! b! b! _" T3 Q! A  {: ]}1 P9 h/ n" H- q/ z

0 D4 `# O# w* C2 ^* p% yextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
# n  D# f7 O7 Y{5 g% C6 Z, o9 {& C( p
    /* Initialize the API environment */1 o% [( m) X& K: a* h
    if( UF_initialize() )
6 ^: E! C+ d) P1 S    {
# K+ R8 Z. N+ N# O        return;
8 n8 L) M0 _+ l7 R& {) s' {    }2 T! v  X5 C1 [

! v. ], {5 S, `$ ^! Y  d        Create_Center();# ~. Y. e: T1 m3 F# A2 l" u4 N

2 c$ _- J$ N! D0 m+ \7 t    UF_terminate();
2 D/ c) U0 d, p' V6 S: N}# n) d1 n, m# M  B7 b0 {
8 G6 h, P) A& M" y' b. {
# N7 q$ c4 Q: U2 d( t" V
extern int ufusr_ask_unload( void )
/ u, S: \" |9 [: f+ [# w" l{
& [  c( ^1 A& k8 f    return( UF_UNLOAD_IMMEDIATELY );" h# i- K1 G2 R1 O# N, F
}* \; D% ]$ a* C/ H) H6 ?+ q0 \

# U$ C9 I$ z& I8 p
' R5 j, g- A2 b" W0 \. X
8 W/ z! l5 y9 K
4 g; z4 G" ]: f! R% |
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. F; W7 o3 _; C6 q. }
呵呵,终于写好啦

1 l8 c! y$ g: g- Q2 K/ a不错啊  
上海点团信息科技有限公司,承接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:019 m% A. F; X4 q; `- V( T
老师多多指点才行
" W7 T+ |; X" @. D8 j. d& V% J
后面把 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二次开发专题模块培训报名开始啦

    我知道了