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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
# B. v# Y7 j- B3 F0 z2 l
#include <uf.h>! W  Q# |* j2 W" D0 e* {
#include <uf_ui.h>: R! x+ z+ Z4 {7 N2 E
#include <uf_exit.h>
/ g: z* ]+ {8 r: X$ j6 J7 M$ S4 ~/ q, _' Z, ]( _
#include <stdio.h>9 `$ i' i' Z7 G- M9 u
#include <uf.h>
  `; _+ h0 |6 K& U1 e" Q: o#include <uf_ui.h>9 S7 t2 s1 S/ I$ v+ A. P
#include <uf_exit.h>
9 i, H4 A$ C! E/ n#include "uf_layer.h"2 x3 V$ f$ w6 K" m# d, S
#include <stdio.h>
( e. Z6 }6 C! F1 Y* p3 k9 ^5 `#include <uf.h>  \3 _' ]/ J- }( S7 E* Y
#include <uf_modl.h>1 b3 w# h6 P, C7 m
#include <uf_curve.h>
4 c% b1 ~6 t$ M$ p#include <uf_csys.h>; Z4 r# W% T8 v6 E( e7 j
#include <uf_object_types.h>) @& L$ [1 v: x! o; l# x1 u. F
#include <uf_ui.h>
3 K5 N# c/ v# w0 h) A' U+ A- b# \#include <uf_part.h>5 L3 r3 X: i# i9 X$ v6 x
#include "uf_obj.h"5 P  `" U- O$ k$ }7 h
#include "math.h"1 ?+ z6 n5 D% \+ V' ^' n
! K( v' M0 S) S0 g) {& d! j
static int init_proc(UF_UI_selection_p_t select,void* user_data)
4 {" j. r& j- y6 h' W9 `! K0 p{  q$ F( l- @$ m* K% w
        int num_triples = 2; //只选择一种类型
1 v, H; y/ a1 _# M        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,0 O$ t0 J# O# d' f
                UF_bounded_plane_subtype,1,0};: k& T  t* j) M6 `
if((UF_UI_set_sel_mask(select,+ C4 U/ A8 I4 W& n, Y  y+ D
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,: v: v8 k) ~3 z
  num_triples, mask_triples)) == 0)6 I0 Q" K/ ], K# }
{
. Y0 p* o5 N5 R% B  return (UF_UI_SEL_SUCCESS);0 }: r: Q$ A+ w( e9 q- i
}, j: L$ x) E5 J+ Y& G
else. R& E0 w$ G1 Z$ W
{! l5 a) |% X6 h9 Y- }
  return (UF_UI_SEL_FAILURE);
7 `/ q/ U; i3 n" R- @$ J }
9 E2 g1 e( ]+ _) C) A}3 z' `6 J' h9 w5 S. D) p
5 C, {) O2 _, x9 _; H2 R/ {+ E0 h

1 s& A% g) a/ C/ ]static void Create_Center(void)( I6 E2 [0 T8 [2 x& s
{' U, ~: J) x. D0 S
        tag_t user_wcs;! W/ p( `0 v! J) J, x
        UF_CSYS_ask_wcs(&user_wcs);
+ Q0 V, ^  {" S  q+ ~        char cue[] = "简简单单:请选择单个平面";9 T9 k& F# b1 b3 H0 j. x) b9 J! a4 U
        char title[] = "简简单单:对象选择对话框";
2 N: S0 d5 X  ]3 r int response=0;
" c" P. W1 Z# U; W' O, R2 q2 P tag_t object;8 O5 p9 G6 }9 C% r* H* R4 m
int count=0;4 R0 y+ P! j$ N% S9 {6 p
double cursor[3];
, y* p8 [5 v3 X9 }0 a+ F tag_t view;! l- e% r0 O# n: K
l10:" M# G7 O6 R2 i% b/ n( v
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
& X1 {1 ^/ M( y9 p" P( Q if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
# O: @7 b! c' y4 [0 w1 v" _1 D if(response==UF_UI_CANCEL) return; //如果点取消就退出6 ]# e' y( N/ }' C% h# ^+ E$ ]  I2 {
UF_DISP_set_highlight(object,0); //取消高亮显示% r2 b/ s. i0 d6 w. n$ h

  X4 A& }4 I3 g2 `7 ]  int type;, M( P% w1 ]/ O3 p1 O0 k
  double point[3],dir_z[3], box[6];
, v1 H3 ~0 S5 W" g  {  double radius,rad_data;  P9 X% g( r; b& {. C, {1 A8 j1 _( Z2 |# m
  int norm_dir;# V( ^$ l& ]1 N- l
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
9 m% G* O- t2 x$ C/ T. ^5 |
, p& s' ]# {. w- W. \' X. @7 k6 T. |7 H% T! g# M9 w/ Y
  tag_t matrix_id;
! e3 b* C9 c+ Z& Q+ M' o) V2 G  tag_t csys_id;# L2 [) S& J# n4 R# w1 f
  double matrix_values[9];
  a4 I# M1 x' D" ^- [  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
. I7 _' N& N$ v0 N/ O  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values( ~% v0 H$ q9 [: u: t) I. o
  if(norm_dir<0)        //判断面的法向是否相反8 e( g+ j) }* e) u5 I
  {
' E) Z4 U: c1 o% X9 b   matrix_values[3]=-matrix_values[3];
: u- G* _% {9 U+ U2 {$ u   matrix_values[4]=-matrix_values[4];5 k/ b5 Z: I: c
   matrix_values[5]=-matrix_values[5];
  ~* ]2 m! o3 x- T6 `1 x   matrix_values[6]=-matrix_values[6];
. E  }: q/ o- T: y8 d0 v1 b+ m   matrix_values[7]=-matrix_values[7];0 i+ M8 c0 n. ~9 e0 A
   matrix_values[8]=-matrix_values[8];
4 J. D+ s7 s) K9 X: _' `8 h   UF_CSYS_create_matrix(matrix_values,&matrix_id);
+ m% E% f0 K# O! y  }
; ?$ U% Q5 H2 C6 A) |  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
; q$ U& q) r( x7 ^1 O  H8 {  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)' z" }4 ^1 X+ N. n  a$ H8 s
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
" r4 B1 ^/ i) A% {4 t1 @) N9 m4 K1 Q: z. R; ]& [- N  ~
        double boundingbox[6];
! t. ?" y" D: Z. k        double boundingbox2[3][3];% t* Y3 x, j( O& r# }* R. j
        double boundingbox3[6];
& l2 u7 D8 T- X5 Z- R+ H        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);8 W" Z! g8 G+ V& P
* ?; o+ w! `6 B% F/ b
        if(type ==UF_cylinder_subtype)$ @) y# O7 `6 K
        {
/ A' j2 Y; o5 @                double cyl1_pt[3];
5 {0 j% Q) V3 e: {5 A                tag_t cyl_line,cyl_pt;, S2 N* _# ~) d% U, |! u5 c# A; i, R
                UF_CURVE_line_t cyl1_line_coords;; K# N. {* c3 n( s; |7 @8 B
                double WCS_pt[3];
  E& H, s2 b+ C" T# N- W% `                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs* }# Z4 k5 e/ T  l. N
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs. O; _  g0 c; E% {. u* J
                cyl1_pt[2] = WCS_pt[2];9 @& f$ K/ `- n
5 A2 Y) Q$ h' e" T
                cyl1_line_coords.start_point[0] = cyl1_pt[0];' {$ J/ N5 R5 B! @" Q9 u
                cyl1_line_coords.start_point[1] = cyl1_pt[1];; Z8 y2 e; M) W" b- o" _
                cyl1_line_coords.start_point[2] = cyl1_pt[2];
+ {5 ?! r2 A5 I6 u+ O7 V5 i/ u  `/ w) J! m
                cyl1_line_coords.end_point[0] = cyl1_pt[0];0 ]0 ?# J7 ]# R' D) B# u0 ]/ K2 _  G
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
/ ~; C( K. W4 m9 Z( H                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];2 W3 I+ V* K: k- l7 a
$ C. c/ ?  s7 k6 M
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
1 e* L9 A5 z' k+ n* P2 i% A& n                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标* A  k* r3 u% |7 Q% q) D' V
               
- e( u! q& q5 Y2 }* ^5 v. t5 y. ~                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
2 n! i; O: C1 z+ O                UF_OBJ_set_color(cyl_line,186);  l- |4 A+ e4 A2 h
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
+ I6 s( ]' C: \; H+ R4 r7 z9 Z+ c+ R3 T0 ~, w* K# R# I; w9 I+ m6 R
                UF_CSYS_set_wcs(user_wcs);: \2 D! w2 U+ x+ R, Z7 P
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
" D5 D9 g+ X9 o; N, F) B
& a9 s3 d+ a1 W' s% Z                goto l10;
8 s/ L4 v4 c( E: ^; t- V        }
0 g' `7 T4 F: Y3 W2 A; f
7 }4 s8 A* |" z3 A$ }4 x- l+ g' v- h
        double WCS_pt[3],center_pt[3];
! F+ c4 b5 N- T) l4 {        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;  t) x# F3 w& I- r1 N+ g' H
        UF_CURVE_line_t Xline_coords,Yline_coords;
+ S; {6 g7 P" O8 M        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs! U! g, q& Y+ w% @" u, S
        & H' I$ w( a* W: _% t- I, f6 z
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
2 V* o, g( G& H7 d. T1 x/ f5 g  Q  |        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
# P- B: h+ |! z( V0 _        center_pt[2] = WCS_pt[2];6 _7 X* G% [$ f* _
& k3 s. s! V: M( C$ v( k8 H

: z! ^7 _) t/ ~1 H# |- g# o! a+ [        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
. u; s" A  t7 G8 d: D        Xline_coords.start_point[1] = WCS_pt[1];
+ [# w+ }4 ~1 X6 P        Xline_coords.start_point[2] = WCS_pt[2];
" o$ ]+ W) ~9 _" i        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标. }& v% T& P& w+ b
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);: O2 W8 k8 S/ U: r/ u2 [$ y  ^

8 e! K0 w6 k: H) s, V9 c9 f        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
( {% w: n7 e5 c8 b* x( m6 w        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小9 N  `9 h, ^+ Z! `3 E
        Xline_coords.end_point[2] = WCS_pt[2];' K; I$ [' n) }) z& Y
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
: q" t' M' W2 U9 c  N; `2 Y9 H8 Y# E//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
7 _1 }" V" y* o
' `1 u& ~9 F# B7 r- P        Yline_coords.start_point[0] = WCS_pt[0];: A  e% a" w) K& M# Q" e( J8 |
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;- _! D) K1 p6 y% v3 E+ u: I
        Yline_coords.start_point[2] = WCS_pt[2];. x# N  A" s* A* @1 w" Z& |9 g/ S
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标# x  c" e$ p4 e; L" L% n& e
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);" P+ Z+ w) g  }( G

( B2 L6 {5 C; O3 }4 `; X" P        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小% R  |" G& `# ^0 V3 k6 T4 w& j0 o% B
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
& k. N2 {& M/ S: R2 I# _$ v        Yline_coords.end_point[2] = WCS_pt[2];& M( e/ d% L$ p$ j. T
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标  }! e5 A7 l/ S
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);' Q/ z, l/ Y( m( ^( }
        ' x. o: k% I+ R/ o6 S8 h  c
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线8 m% ?8 [1 W" I: l
        UF_CURVE_create_line(&Yline_coords,&Yline);# ^8 U% T; ]7 q. ?' Q! o& Y
        UF_OBJ_set_color(Xline,186);        //设置颜色! H3 [# ]( `) L9 _
        UF_OBJ_set_color(Yline,186);
( v: P8 q! n  _+ G: ~( P        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
& |4 b7 U1 N+ s# {2 }% R5 n. p! t        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型  G/ }9 j/ L7 o

( b6 |4 @# r$ C) m7 t( H        UF_CSYS_set_wcs(user_wcs);9 t5 S6 p( f4 x
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)  z' V7 W$ B# v8 u1 ]6 ~
        goto l10;! V5 c; l% g5 z7 t  M
) q) {# A) Q4 M9 S
}$ m6 o0 {( F* J5 X# B5 G7 W' p

3 _- k, e* O* U9 E7 Uextern DllExport void ufusr( char *parm, int *returnCode, int rlen )2 t( p: X: D/ |/ k
{3 G% H3 T% v0 V! w8 }& _" y! n. @. V
    /* Initialize the API environment */+ {; D: l4 k" b
    if( UF_initialize() )
" s+ A  C, g( H- B" k) p    {$ q3 m1 i/ h3 C
        return;2 |% F+ f, }# w" g* ^6 L
    }4 {" P! m/ m- c0 f; K& `

3 [; ~+ C9 B+ e6 ~" `        Create_Center();
. P6 X) G3 n- y! u6 d" i7 r% |  c6 K0 E/ h. H/ e
    UF_terminate();& R' r# X* k; A# C7 C
}, V& t) ]9 [# S: a- v$ t  V9 c

% e* _3 [: N- g- A( h! ^7 K
* Z! t) l, S9 E3 bextern int ufusr_ask_unload( void )- ~' J- G9 H- e, N" g3 x, _. g
{
' P/ a2 k* T# J5 d9 O3 X  D    return( UF_UNLOAD_IMMEDIATELY );; ]8 ]% e* k  I
}
/ [# d5 ^1 X2 y& E1 y" C# g2 g2 Z: j- F2 M& k

( r7 J' k2 V; N; Z+ R! b% `& E% V, Y6 O  I. {* c: o

8 Y* }5 D3 n8 a3 G& d6 [. n
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
, b$ l/ T  L2 a' u% p$ L# n* z6 K呵呵,终于写好啦

8 N. V3 j$ D, f8 ^不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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:017 W( t  o5 L" L" R7 Z
老师多多指点才行
1 A! x( b; r5 |; ?% ?6 n
后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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二次开发专题模块培训报名开始啦

    我知道了