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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

7 Y, q2 j" y1 O4 p8 e2 {$ ^#include <uf.h>
# }5 e, |4 D7 l9 x#include <uf_ui.h>
% c# k/ {* Y' K! @#include <uf_exit.h>; \1 i) M- k/ a) R' }1 m
: l+ Z, A( m; t, L& v8 s% i
#include <stdio.h>! `! q" M( J" g4 ]
#include <uf.h>9 k9 c/ n% C, x0 F) I9 F0 \6 `
#include <uf_ui.h>" R( R0 x; f) p5 j8 ]
#include <uf_exit.h>
! }# H; O1 q4 f" ^3 Y( _+ @( [) s#include "uf_layer.h"
0 l7 @  m6 N+ F4 Z#include <stdio.h>  B# k# M% a3 ]* T3 Y& g
#include <uf.h>) _( N. U5 Y. O" M5 ~( b3 B- n
#include <uf_modl.h>
! x% W! Z% }. M& ?: x! u#include <uf_curve.h>
% s9 e/ x+ d3 K#include <uf_csys.h>
# }# g7 P6 Q$ c' I1 ~% o#include <uf_object_types.h>
  ?5 Y( O) u% c, r+ V#include <uf_ui.h>
8 d0 y  u+ @0 D( b* c8 P#include <uf_part.h>
2 b. I4 Q5 e8 H#include "uf_obj.h"
/ g9 i: S% v- i! q  N#include "math.h"
7 c3 j( H( P8 s0 c" ^6 \1 M
: I, H& o/ P1 R* {static int init_proc(UF_UI_selection_p_t select,void* user_data)/ t5 a& l( e4 ]- k, X4 ~
{& J- {4 B5 S3 H8 D
        int num_triples = 2; //只选择一种类型3 v. k/ q. _) S9 _; W+ z
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
  N. c8 k8 P' F/ v( W/ }1 w1 k                UF_bounded_plane_subtype,1,0};0 K' [6 Y* K/ p4 n; j2 w
if((UF_UI_set_sel_mask(select,) J- Y* {3 P# K' H% A! \
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
" s) _8 q3 A/ Z  `# d  num_triples, mask_triples)) == 0)+ s7 D  U$ Z5 s! Y, D
{
; `/ X4 y4 P: y$ D$ D8 e  return (UF_UI_SEL_SUCCESS);6 h7 e& g; A; `2 g/ S: W+ f& p- y
}4 |  o2 E2 a) A6 g" r. |; z+ F
else
+ y1 h7 G4 A  ]3 V8 e {  F! \, r# N5 D" D# _- M% p
  return (UF_UI_SEL_FAILURE);
' Z9 p; a! q# P4 x }
7 j* p% m' Z5 q+ \* I}( T; j0 ^4 Y+ M* o

4 @/ R9 e, t9 u5 L0 V6 }1 Q5 b& f5 G: L9 ~7 O# G8 G
static void Create_Center(void)
$ d8 n. z) d- K, h% z& ~{# r/ p; b$ V# R% e5 E" e
        tag_t user_wcs;
' @" T! L- x. x% O- `" i; n        UF_CSYS_ask_wcs(&user_wcs);
" N. y/ |( e' J% Q% o4 z        char cue[] = "简简单单:请选择单个平面";
7 d- T/ H9 R3 \/ c  G) Q! @        char title[] = "简简单单:对象选择对话框";
% s8 X% k! C4 h' e8 _* d int response=0;1 K: |6 _' l8 L# _, @# |: v
tag_t object;" n8 Q9 m- {, @: l, C
int count=0;/ f9 _# q4 |- ]) G" I# H+ t
double cursor[3];
! q7 u6 K- v. t' a tag_t view;
) U0 K/ R% F" i8 fl10:
" q1 w1 S$ F: @, F UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
1 I+ ~( @. K- l2 @4 H+ Q5 p if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
6 Z. e# I; d) n if(response==UF_UI_CANCEL) return; //如果点取消就退出& R# ], `9 L* Z1 C
UF_DISP_set_highlight(object,0); //取消高亮显示
0 p- [3 T2 h9 V5 e) c
3 s% p2 b' n. ^4 o+ F( D; v  int type;1 \$ \9 i: K, ~. @% k; l/ ^
  double point[3],dir_z[3], box[6];5 W5 @+ ^/ c# x
  double radius,rad_data;  ?: l+ a1 }* u+ R  G. o
  int norm_dir;3 V0 `* H4 M$ {7 T9 S5 H& H
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
! J, T4 r: p: Y6 `2 N
$ ~) t" }& ^3 r% b  j9 s# y
3 Y9 e" W, B" f0 ]! @7 y  tag_t matrix_id;
: m( N# c* b0 j$ U2 k  tag_t csys_id;) _8 C) {4 D* P1 H% c4 P4 H
  double matrix_values[9];
* L9 r+ ?7 r6 g9 n9 W  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID" [. a2 b, V. w& y% U
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values+ }% |3 f3 }; |. X
  if(norm_dir<0)        //判断面的法向是否相反: f8 v+ K9 n% P" G/ w$ P6 l; f6 S$ ]
  {
8 S; j3 ?. j. y4 q! d6 M( X# {   matrix_values[3]=-matrix_values[3];0 S; g2 J% B9 q( R6 g" v
   matrix_values[4]=-matrix_values[4];
, l+ H1 x- Y- I/ O   matrix_values[5]=-matrix_values[5];2 |4 o! C! u% t* N& l( u% X
   matrix_values[6]=-matrix_values[6];) m' y$ N- k0 I2 ]. T/ d$ E
   matrix_values[7]=-matrix_values[7];
) E+ g; ~7 I" E% x! f9 r, j   matrix_values[8]=-matrix_values[8];- K: X3 X" V& K, s1 ?& @, J
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
3 r/ K  ]) Q! K5 B8 A8 k  }8 @# v& ^' m5 k' {3 Y
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
7 ]4 l) W" z+ C1 v; Q2 z# u7 l  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
) O  N2 k& D/ F! e' R' E UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动), S, |( o$ W5 I
7 R7 Y; x) P3 F0 e( g8 U
        double boundingbox[6];  q4 B; |; I/ D# \; u) V% A; h
        double boundingbox2[3][3];( H# g! A& ~1 Y( u4 i
        double boundingbox3[6];
. p' T; }* {* Y7 G8 d        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
! T( ]3 y$ v. W. d
6 f- d" s0 {8 m6 U+ E2 R, ^) Y. Z        if(type ==UF_cylinder_subtype)8 B) @3 O$ {7 G8 K0 ?
        {
8 ~8 Q2 p8 S( ~6 W, o% P2 F# y                double cyl1_pt[3];1 j# O: G( C1 t' Q% {* [
                tag_t cyl_line,cyl_pt;
+ r9 c  Z/ y# I: _                UF_CURVE_line_t cyl1_line_coords;
& o6 c. P) ]) w$ J0 d; R0 e8 g                double WCS_pt[3];8 H4 `7 ^8 L( n6 s
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
; n8 |  H- D& ^, ^+ h4 k! e                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
/ u3 @5 f* n5 w  G# E  D                cyl1_pt[2] = WCS_pt[2];. Y& z% q9 `  x& [" v# |

) T5 a/ z; l; e* i' ^6 s3 t- z2 w                cyl1_line_coords.start_point[0] = cyl1_pt[0];1 [" I8 Y# ~; l; h; ]! C0 c4 p! W
                cyl1_line_coords.start_point[1] = cyl1_pt[1];& j3 U7 G1 g4 t+ X" r# v
                cyl1_line_coords.start_point[2] = cyl1_pt[2];9 K' O8 x6 ^: F$ q' S
5 l3 C7 W6 j: y  T
                cyl1_line_coords.end_point[0] = cyl1_pt[0];0 ~6 w6 M0 f0 e8 Y: n4 }, q1 e
                cyl1_line_coords.end_point[1] = cyl1_pt[1];: \) {3 [& I3 U5 u2 v& ]6 L; j
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
( L% \+ K+ K: J9 @
0 [+ [1 f4 g. v( d9 A                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标0 c; L4 {3 q6 S& ]
                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! m  s7 _  J) \# u' O
                : W) Y' B4 v1 y( S, o
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);: N6 [( P8 l, N2 {$ k
                UF_OBJ_set_color(cyl_line,186);! ?: A7 J6 K2 n' r- Z
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
) H6 ^( I, n: k! ]7 V  {+ c* r; V* b; L  ?! A. _9 x
                UF_CSYS_set_wcs(user_wcs);
+ F$ M- l' i6 B' B! ^0 k8 H5 a                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
+ n0 x" ?1 D4 f( T$ A8 M9 p, c: R! a) e' ]; y
                goto l10;- b3 N7 v  T1 p$ e- v3 W9 ^
        }
! e" j& m/ q+ l/ \* V2 n( B
+ }! d$ s. W6 [! m2 k; I3 C( [% a  S' V3 I# K( i6 U9 G
        double WCS_pt[3],center_pt[3];
( b4 F9 N6 K3 t+ p        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;4 t; t2 T1 p# ?: m" E
        UF_CURVE_line_t Xline_coords,Yline_coords;5 q0 y5 ^- H+ {% o( F  [
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs2 I0 c( f! C& h7 \2 d1 G1 v4 G
       
% C$ R% F% p8 p; ?' r        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
: l  q+ R! r" [3 Y  b5 h        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;. [. m" ^2 K2 |* Q
        center_pt[2] = WCS_pt[2];# |2 i  z+ G: r* ?1 E$ l4 L  h

9 y7 A- C' G& {% V* E3 L% D$ D0 J3 ^; b! B: b2 x
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/29 h2 \# Q9 I& V3 T
        Xline_coords.start_point[1] = WCS_pt[1];5 u' \& U  D. E0 n2 l6 w, T
        Xline_coords.start_point[2] = WCS_pt[2];- O9 [, U! \4 v
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标- \( b/ H, f9 ^3 T; _/ j
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);% g$ ^. f6 u& f

$ H, Q! @  Q/ t+ t        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
9 D/ H9 H8 f) C0 t* T" ~: ~        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小& R  ^' `! t$ l5 V1 d' V
        Xline_coords.end_point[2] = WCS_pt[2];
, ?7 B, e* s: }/ I        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标" z8 c( q5 \* j) }1 m
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);( u8 _; x0 ]1 ~
- M. D" s' P1 Q) O# L9 I" c
        Yline_coords.start_point[0] = WCS_pt[0];
+ Z( A" Q3 I( k$ [2 f/ s        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;$ P" |, n* q- }6 o; ?4 k
        Yline_coords.start_point[2] = WCS_pt[2];$ k* C( s& a- T3 m0 K8 {  Y
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
6 i# H+ o. V$ L$ S. l; `$ y" r: V7 y. W! K//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);8 B5 e4 j6 z2 l8 `$ G; O" E4 B5 a
' `1 {: R: R# e8 i. ], h+ u
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
- ?, h+ _. Y* L. H$ I) O        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
5 l7 F9 i8 r+ H2 a2 `9 B        Yline_coords.end_point[2] = WCS_pt[2];
) x8 @( R, S! r  f& W        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标' J. S" E% A5 _/ T) g& j
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
) D% z) H" D3 u" A5 p% }& c       
. t& b2 N/ E# x  d/ l        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线3 A1 N' K6 M  J1 P1 z
        UF_CURVE_create_line(&Yline_coords,&Yline);6 [: a$ o% z! C5 f6 g
        UF_OBJ_set_color(Xline,186);        //设置颜色
1 T7 ?3 C" z' `* M7 o: r# k6 |; f        UF_OBJ_set_color(Yline,186);
: ?3 q6 \$ i* p% Q% e        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型9 C! t- C8 K& S; s6 L1 z
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
$ f8 |& U2 E* p  p
9 o# }5 C1 K! G2 B# k! R        UF_CSYS_set_wcs(user_wcs);7 `9 L+ U# Z8 ^8 A1 y* R6 w: I( k
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
6 c; \+ @8 H% r2 T% T        goto l10;
+ U1 x" R1 u$ s( {* m: b4 T: E. L6 \( r. j2 W% G
}9 C3 w8 j. X! B: o' J
! A  ^9 d) b3 q% V1 D) \' X
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
9 R7 E3 l7 P) v2 f& L{
% c4 n2 b5 O4 p8 L/ ?4 o9 C: I% W    /* Initialize the API environment */
- Y# \" P$ O2 ?, Y( _2 P    if( UF_initialize() )
# P$ C# p9 c& r5 S5 k3 V  s    {4 e9 P* d# m2 T# G. I: d
        return;
/ d) h, q1 V# p2 Q0 y* z+ n3 ?6 d    }# w- |+ h% n5 _" U& o
5 L- s5 }/ N- {+ l+ g: J. \2 `
        Create_Center();, f# {' ?4 M. S/ B' M7 o4 ?4 j: f4 K
3 `7 Z3 q& _" ?
    UF_terminate();( G; d% {$ C6 s' j
}
7 g3 z1 I0 _) E0 L% w( i' [3 A7 Y" v# ^! _9 X: C3 n% E
% v0 ~, P; t& e. Q/ u# O- }3 `# s
extern int ufusr_ask_unload( void )5 p% ]/ f$ L6 q5 J+ H8 m
{7 W2 }  |" L9 e! m" q/ A3 J
    return( UF_UNLOAD_IMMEDIATELY );
1 b' a' u# u9 L}
! Z. B8 ?5 ~+ N  |9 z. u, {) u2 t+ m% Q+ k7 ?1 T; T/ q) F

' I# i% y/ D' ]& d( _8 `5 j5 L  r/ f: V* E7 J3 I
* _& y% h/ P4 O# f" @7 T0 }. H# q
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
: q: i7 m3 l* @7 S( W* A& \, a1 B$ @呵呵,终于写好啦
2 `0 x8 n/ y) u  S5 d( s
不错啊  
上海点团信息科技有限公司,承接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, x8 R4 h( w0 t9 E- f9 b
老师多多指点才行
3 P3 b) E8 @' d# g) D/ 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二次开发专题模块培训报名开始啦

    我知道了