PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
5 g1 G- u& z8 I
#include <uf.h>
: r1 G5 B& V4 b6 {#include <uf_ui.h>5 I: z  K& M2 X$ G
#include <uf_exit.h>
4 b/ `/ \/ S. F. e; u6 P* P- F. {
- c8 U5 A1 [( t  \/ [7 W#include <stdio.h>
' f, g7 Q' T8 ?% g& ^. h$ A#include <uf.h>) A% o3 _# `1 w0 h
#include <uf_ui.h>9 \' O# ~" q# t8 h1 q. Z
#include <uf_exit.h>) x  S7 X( `) }; b: l
#include "uf_layer.h"
/ `# v1 `8 n6 ?#include <stdio.h>. m& a  m2 M* s2 V( M
#include <uf.h>
( k& e) I, G7 V2 Q#include <uf_modl.h>7 G; [" v. D+ x, ~& l. t1 Q
#include <uf_curve.h>
" {" L! f, ~0 E; ^#include <uf_csys.h>, ]  w% M' U  p% x. e8 W1 F
#include <uf_object_types.h>
" K5 H- V+ F6 c+ P" m#include <uf_ui.h>
3 [2 d4 C9 W) |% F* O#include <uf_part.h>5 t: _; z8 ]+ ]& {+ e9 B
#include "uf_obj.h"
8 [* m! G1 C  \+ B#include "math.h"
, h! x7 T& X4 `2 L7 Y. G, K' X( l& N2 v% B
static int init_proc(UF_UI_selection_p_t select,void* user_data)
0 e5 H; U- m" n- X. L  |0 c2 m{1 m6 T1 Z. y' h. Y* f/ J2 ?
        int num_triples = 2; //只选择一种类型8 v7 T4 K6 n: J$ M# J; F
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,% N$ @% a" @$ M* C: N! w8 u$ b5 y' e
                UF_bounded_plane_subtype,1,0};
) ~. }3 N0 H6 o# N! s+ Z8 B3 {8 r if((UF_UI_set_sel_mask(select,6 i2 R3 |1 }/ y! w: I5 D
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
  r: P$ f) _' q1 |* Z$ s8 |" }  w  num_triples, mask_triples)) == 0)
* {+ u4 b, x" D+ ]" k {
/ O# f) w6 f1 F# r  return (UF_UI_SEL_SUCCESS);
! h- M- Q* K( ?) i" ^) }! [ }9 F) d. a. Y# @* M' N2 D
else, N- S" y8 |6 X7 s5 m" A
{
+ R" V$ v( @. ^" e. E  return (UF_UI_SEL_FAILURE);4 o$ b" b/ x. z3 Y( Q
}6 w/ E( N& X3 g& k% `7 {
}
" e  @1 l: U7 ?( K1 m
/ C4 i- u% h' W3 I( r# t4 N" X; |  j( f* ?: A
static void Create_Center(void)
" h8 f, q2 L/ D0 T$ ]6 A" p% k- z* x{
, h; u2 `* i' E4 K: {. D$ |  a& s2 X        tag_t user_wcs;
3 f% p3 n9 g2 c$ e        UF_CSYS_ask_wcs(&user_wcs);& _; S) o* Q( r: e/ I: z
        char cue[] = "简简单单:请选择单个平面";! }# e& G) y% L: P2 h0 U- W! m6 ~
        char title[] = "简简单单:对象选择对话框";
. d8 r) f5 I" W. \1 a int response=0;
4 N% i# W1 v# L- M9 ?# K, h tag_t object;
3 g& w* F: k% r7 U# S7 |! L int count=0;; [( q8 r0 t- |/ [; u
double cursor[3];2 ^# D7 d( q! X/ \
tag_t view;3 W2 |+ Q: ^. p3 F$ e$ p  U  P/ j
l10:8 z% z8 z* Y% g+ B
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
+ \% I/ y0 O7 G% W if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
% T+ Z1 I# l, O3 e if(response==UF_UI_CANCEL) return; //如果点取消就退出/ s% ]" E$ X& w& }. N
UF_DISP_set_highlight(object,0); //取消高亮显示- F% Z3 t& g5 ]" n. J+ F) V" k

4 x0 x' D$ E( M4 O* O+ P8 \  int type;+ E9 K3 N, S! n( l
  double point[3],dir_z[3], box[6];
9 h& S6 v' u+ B4 d  double radius,rad_data;( `/ T, Q1 i7 D* ]
  int norm_dir;7 \% B  c9 h! x9 G8 P
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
/ S+ ?3 \7 q* b+ Q7 |. d: R2 u" l! l+ M
2 m' j' L, U3 t/ r( |& n6 U  I
  tag_t matrix_id;3 r3 ]% |, @7 ]) `
  tag_t csys_id;
, ]; A" N9 L0 o  double matrix_values[9];! q- g$ |& W* _2 `/ C1 d
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
, P! N4 P, u- ?) c7 G* p  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values8 h7 k( l) S8 o4 y( d2 M( v1 d+ J+ n
  if(norm_dir<0)        //判断面的法向是否相反& D4 p# |. M7 y4 }5 i) O& n6 ?
  {1 ^- ], `" I) d# a+ X' w
   matrix_values[3]=-matrix_values[3];# K1 A% ^0 A' F) x5 c9 D1 d
   matrix_values[4]=-matrix_values[4];
5 g! q' A7 d- R2 y  |0 M   matrix_values[5]=-matrix_values[5];/ n0 U( |2 h& V+ S' T
   matrix_values[6]=-matrix_values[6];
+ Q; y5 L! |. I) v: j   matrix_values[7]=-matrix_values[7];
2 P0 \* i( t! C$ S( z2 o( u   matrix_values[8]=-matrix_values[8];
, `) R! B" f% f. w3 j9 u   UF_CSYS_create_matrix(matrix_values,&matrix_id);
6 t4 P: @; b1 {' s; |7 L  }
1 X/ @, O: X7 G0 u+ {4 B  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);, L4 g6 W& S* r8 z
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)! M7 B: [) R1 S
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
$ o1 j5 K$ r' H$ J/ l% @! @- q0 u# i
        double boundingbox[6];4 q9 J* M; j6 }/ y" L
        double boundingbox2[3][3];
4 s, z1 {0 [# o" ^; R, c+ {        double boundingbox3[6];
2 l$ \' w4 p6 ]7 A        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
7 a. \) O# G4 c. O7 s# X9 {) K- I- O6 Z- ?9 _+ L9 N
        if(type ==UF_cylinder_subtype)
8 e; V$ F0 o1 g' c7 I        {
" B, {$ w9 U: k/ X                double cyl1_pt[3];
# U* e% G$ x% g$ _2 ^* Q                tag_t cyl_line,cyl_pt;
- p) V- x) b) a% W0 j4 B5 b& W                UF_CURVE_line_t cyl1_line_coords;
7 ?& h) B: O. b* _                double WCS_pt[3];
5 O% ^; B4 n/ \6 J8 E" W                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
# h7 i6 N( A* v- d                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
/ Z4 `' @* b, g4 N9 H) K. i4 s                cyl1_pt[2] = WCS_pt[2];. h2 [: S! n" O
0 ?% [% M9 y* q3 z6 U/ w
                cyl1_line_coords.start_point[0] = cyl1_pt[0];2 V1 r+ i4 ~% g0 x5 p7 J% `9 O
                cyl1_line_coords.start_point[1] = cyl1_pt[1];1 q9 N' k5 W5 Q6 f$ N9 `/ S4 i& ]. g$ _
                cyl1_line_coords.start_point[2] = cyl1_pt[2];1 R8 Q+ R& K  h+ U

8 J6 s5 p3 h. L, e                cyl1_line_coords.end_point[0] = cyl1_pt[0];- ^3 m; q! A& @: F
                cyl1_line_coords.end_point[1] = cyl1_pt[1];# b* y! |: Y0 K, D/ |% ~8 S' e
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
$ R0 P! x1 @, m& O0 B) v' x" r3 l+ k" v& q" Y# g1 [& Z
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标9 t* D' [% n  p6 Y# [; O. X% ~
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标6 l3 N) |! u# s  H+ V/ ^$ M
                ; _+ N$ n  T5 d. }( X
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);1 f2 z' F4 F9 ~$ z
                UF_OBJ_set_color(cyl_line,186);
3 q6 d9 B) S- O) X* u8 F                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型- y6 p* _, L- A! U# n" A/ c

: w5 {' H. D" r( Y& D                UF_CSYS_set_wcs(user_wcs);% w4 A- z4 v1 E/ r# u2 Y
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动): I: @2 T6 w; w* g
. q4 V# N' S7 m: L
                goto l10;
+ I$ v; `, C. S0 ^, _' L        }" x( B* u5 _7 a0 z7 `# H

0 T! q5 C# m9 y( N, V8 [$ O7 D' U1 J+ g- C
        double WCS_pt[3],center_pt[3];& W$ q4 z% S7 R* g, ]  H; l
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;4 U( W6 ?2 g) m/ ]
        UF_CURVE_line_t Xline_coords,Yline_coords;. b, T- e- E0 q
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
3 ^. I' D3 _. K8 T( D  _       
- h* q: X6 N' Z0 I/ p        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
6 |$ C) Y) F8 Z+ G, R        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;3 m6 u2 M) H. ?9 `8 k
        center_pt[2] = WCS_pt[2];
% g+ i- U. `+ T* k% s2 S) Y6 H! I' C1 d6 L9 N

0 x. z: f, Y8 y+ j- A2 i- ?        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
% L' p: F$ D8 ]  T. w        Xline_coords.start_point[1] = WCS_pt[1];8 G4 g2 Z/ S( f( a' `3 Q
        Xline_coords.start_point[2] = WCS_pt[2];% e! r: f; `+ C& ?- D* j8 g7 G
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标$ @/ j8 Q% a# a/ G8 H0 W
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
  a% l1 O4 M2 h  N* M
& |  l, V+ X0 Z0 c        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
9 i! s) {' H) s3 p        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
0 c) `. z, ]* |; l- W9 x( e# `7 [        Xline_coords.end_point[2] = WCS_pt[2];, \5 ?- W# b' H# k
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标( W6 p2 D3 R4 e1 I: i2 b( r! T
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
2 t7 b( s1 r: L! C; @8 y+ a9 e. z$ o% p$ a! m
        Yline_coords.start_point[0] = WCS_pt[0];; Y1 \& F1 v8 Q7 @
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
( R9 ^# m: ^9 B; ]; _        Yline_coords.start_point[2] = WCS_pt[2];
) `% I) t3 @$ t3 I7 W        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标! V8 y/ V+ u) E
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
, H, D9 F" y) T$ K' N3 f
- _$ b5 o( B1 A3 i        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
5 ?. F; \' _( e# h        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;) b8 J3 {) L9 o" m  O
        Yline_coords.end_point[2] = WCS_pt[2];
! u4 }2 k; D1 C7 Q7 S3 J        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
9 p, `" E) l* j/ a- L! B//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);; e# @0 l% f2 n# m
       
+ K" q+ y* C% q+ R+ M* L        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
& g% w3 n# z6 ?! H/ p$ I  V4 H        UF_CURVE_create_line(&Yline_coords,&Yline);
0 }( [7 Q6 V! Q" D        UF_OBJ_set_color(Xline,186);        //设置颜色
' ^- Z' G2 q! x: h" c- a; p        UF_OBJ_set_color(Yline,186);
6 ^; j: X3 W+ |+ R        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型; M2 A; e5 x3 N
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型! Z0 e1 R# c) V" ]1 q5 L
1 a9 Y& u$ @9 R; a& b7 @
        UF_CSYS_set_wcs(user_wcs);
1 ]4 m6 ~8 j/ |        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
4 C' |* t% o7 t2 f        goto l10;# Z4 C6 X1 s3 q4 }% V7 W2 M. t

! y6 L* e  c' O2 i# V7 K# x. I}3 R4 ?" E5 p" l6 G0 [2 P
, x& O" Z  M1 m3 x5 {
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )* _% r& w9 D  \9 J# u
{
; r  N6 ~) K) M3 y& ^    /* Initialize the API environment */
$ w$ N( N! t( d9 _    if( UF_initialize() )+ ~, k( b& W+ U$ `3 q
    {# S2 d/ }$ ?% c& L8 _3 S
        return;
3 P  L  m+ X& V/ {    }
9 J, D: D) H; f( ]# T: H* A% F
4 v5 g8 F- x0 {$ a: H        Create_Center();
: a1 v* Z1 ?6 E4 _- p
- F% v9 y" j! w* G: \: T    UF_terminate();, h6 \4 q/ j: ~
}
: O5 [; I+ o) R& T& a4 E0 Q8 A9 N9 B: H% V# N# c4 p8 e* Z

3 v' i* [6 W7 N$ }extern int ufusr_ask_unload( void )! g' V& g) a2 D6 S- C4 t
{
5 F2 [7 c7 B9 ]/ f: M& q/ l4 @    return( UF_UNLOAD_IMMEDIATELY );5 W/ n2 |5 C8 R
}$ X) K8 c2 ^* ?8 M

+ `0 n6 ?9 H: A/ F1 M! e3 T3 y( g+ n. n

$ ^% e1 k9 z; [# z/ ^* n
. O! A, e" C- `; _: ?1 n3 k
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:441 X. ?, ~- i; F. B
呵呵,终于写好啦

" Y0 \1 \# Z0 b不错啊  
上海点团信息科技有限公司,承接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
, E2 f' |; e, V老师多多指点才行
- {8 g2 D' p4 H$ \- t  C+ N
后面把 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二次开发专题模块培训报名开始啦

    我知道了