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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
/ p+ v2 o6 D8 l" e) y
#include <uf.h>
/ B' g7 O5 e9 e: n! s- X: X, r- J#include <uf_ui.h>
4 G8 J) Y- o8 R/ `#include <uf_exit.h>6 `! X: {' m! |8 r& Z. P

4 g! I. ]( R+ @( [. U  R#include <stdio.h>' c3 B1 B* i5 N) s1 h& Z* D+ y' J; X
#include <uf.h>6 o) y+ l( I3 Y+ {7 }+ E
#include <uf_ui.h>( P' @. h5 J3 l; u1 J
#include <uf_exit.h>' _9 \4 r! ?% L6 h+ O
#include "uf_layer.h"/ l4 ?, Y" q0 I3 K' |
#include <stdio.h>
6 j. t% v, F8 ?0 ]0 D#include <uf.h>
1 U9 x# @4 X. z3 X, k! S) l: q0 {#include <uf_modl.h>
' f$ U+ f% t% ~#include <uf_curve.h>
3 g9 X0 ^! g8 ^- m7 ?1 V, w#include <uf_csys.h>
+ j, y: s/ G8 `/ J/ q# ]. ^#include <uf_object_types.h>
+ W' E1 c( ?8 W# s#include <uf_ui.h>
% x9 F" ]: W( {: t, E#include <uf_part.h>
  t# j1 m/ y' u& P7 U! n3 W8 \#include "uf_obj.h"% ]% d' w. f$ ?/ H. X, t
#include "math.h"9 O( Z) t: C0 U( i4 t/ g1 K4 o
5 u+ T7 A; n( o: H) D+ w  b
static int init_proc(UF_UI_selection_p_t select,void* user_data)% s9 w1 O" a* s: c
{$ \' b: S' |3 f, d. h3 K
        int num_triples = 2; //只选择一种类型
1 U4 c2 Q- F: K" R: b- Y  A# Y        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,% u& w* X0 o8 r9 S% D
                UF_bounded_plane_subtype,1,0};
  B* N/ X6 ?  W: r( R if((UF_UI_set_sel_mask(select,5 e9 i1 Y8 G" h4 w: h7 X& Y
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,7 m5 ?6 p4 ^" @/ y. A/ N
  num_triples, mask_triples)) == 0)% W/ a; q5 ]. R1 f
{
& @- b: j8 ~5 S  return (UF_UI_SEL_SUCCESS);; x, E) C- n* R# {6 e
}
* Q& |/ F0 H7 `! P8 [# { else! X7 f) E: n8 d: R0 M+ N' G
{
: O8 t: h1 _9 W8 ~/ {  return (UF_UI_SEL_FAILURE);2 [' n3 }, ~8 ]% V
}; N3 [/ C/ p( i0 j8 _
}
: Z7 _: @5 k3 N
& f$ c* |" I& G( ?! C& u' l/ f$ T9 e2 P$ Y  j8 ?: A
static void Create_Center(void)+ ?* d0 I& ]5 x4 J0 v
{& d9 E  X  l; I2 u! \
        tag_t user_wcs;* J7 [+ D! C8 k/ Q7 p% w% }+ \' j. x
        UF_CSYS_ask_wcs(&user_wcs);' R! d2 K8 ?0 I9 H1 Z, l3 P
        char cue[] = "简简单单:请选择单个平面";
  _! `9 M7 M6 N$ ?        char title[] = "简简单单:对象选择对话框";
$ [& C6 R+ ^  X7 k& e6 O$ R$ p( a int response=0;
" k+ ]" p4 e1 S( x5 A" I/ ] tag_t object;
3 c) T0 S8 a# m. I: _4 \- W1 c int count=0;
( G( r# T5 A9 n, g, K& Y double cursor[3];: W* a9 s& i  O! Z4 O# `; Y8 J) K
tag_t view;- x. x+ q$ V, Z
l10:
2 V7 b" Z1 j/ d UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
0 p) e' g) B* F$ Q$ b if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
/ H8 \- p2 y2 R/ |; k, W if(response==UF_UI_CANCEL) return; //如果点取消就退出
6 F0 d! E9 b" @7 h3 v. s) U UF_DISP_set_highlight(object,0); //取消高亮显示
/ Z% _4 `6 W8 h4 e
4 P- A0 s' |4 S# N, h- j* V7 h  b. [2 v  int type;
$ O1 H8 d' G4 _. K# u/ [  double point[3],dir_z[3], box[6];6 }# T  B( u$ J7 |$ Y
  double radius,rad_data;! h. I8 Y- V( a6 X1 Q
  int norm_dir;, Q. G) g" v3 [' d* M
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向: u$ @7 o3 I4 O
2 Q0 {3 D  N' Q& j3 o( P

2 I; _5 t5 S; B7 k/ h3 B& L  tag_t matrix_id;
0 Y  ]/ {+ M8 u0 {  tag_t csys_id;
( s2 {+ q1 Q+ U; z  double matrix_values[9];3 k! S5 R# [+ }$ f
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID& }0 X$ v+ d% d. i" n. W5 V* z; O' B
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
6 [1 p+ K/ U% i' O1 d  if(norm_dir<0)        //判断面的法向是否相反5 I( p9 k! s# P, a& E  `& o
  {  `) f+ w9 Z2 c9 M
   matrix_values[3]=-matrix_values[3];/ y+ ~$ `; s6 T$ b  n
   matrix_values[4]=-matrix_values[4];' M' e; A1 t2 g. x+ Y8 D/ T: J
   matrix_values[5]=-matrix_values[5];' Z0 w7 z/ P3 @' E/ m
   matrix_values[6]=-matrix_values[6];4 D5 C/ W$ l, t" g
   matrix_values[7]=-matrix_values[7];+ A: C& E& e, Z# X( R( I
   matrix_values[8]=-matrix_values[8];
% s' d; i1 M: N, ?2 Z   UF_CSYS_create_matrix(matrix_values,&matrix_id);
- K. ?2 G6 E" ]5 w. \( ^4 o  }, ^1 y  H! {7 ~" H( h0 k
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);$ c6 l) o- g# K5 k
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)$ j- n5 D$ N7 @8 }6 A- S
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)1 B) b/ s' i1 J
3 e- Z& H- z4 S" ?! V0 `" d5 F
        double boundingbox[6];4 S7 S( m4 A$ Q
        double boundingbox2[3][3];: G7 C+ b) n: I5 C' k
        double boundingbox3[6];
# ]) T, v3 P8 |; \; z4 w        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);6 r% k  Q; Y! t- A) l8 b; X
/ E/ p* O9 J" d8 H3 M9 u# P
        if(type ==UF_cylinder_subtype)/ I# x: p, L4 m2 J  n! t+ ?
        {9 h5 {& W! ?' ~1 O7 {/ Y/ M
                double cyl1_pt[3];
  Y. `; u, k; ^6 ~9 B( Y                tag_t cyl_line,cyl_pt;' ^! |' a* L% p6 V  Z# J8 L' X
                UF_CURVE_line_t cyl1_line_coords;
8 L9 ]( c$ `" e; S; D3 p& @% U                double WCS_pt[3];
$ T1 M+ m! \  @, ^. f7 i2 W. S                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
( C- ~% I, y& l                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
# F6 u% P1 q; i                cyl1_pt[2] = WCS_pt[2];/ z/ N( j: b$ r4 {2 ]3 l
' ]' Q/ }4 s$ S3 a) w
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
4 O: _1 Q9 K6 ?5 Q! _                cyl1_line_coords.start_point[1] = cyl1_pt[1];6 a$ X8 s% L3 O% `. F% c
                cyl1_line_coords.start_point[2] = cyl1_pt[2];8 a( \5 E4 c* j) ]
, n$ a% D1 n% E- v/ p
                cyl1_line_coords.end_point[0] = cyl1_pt[0];" L* e' r( @8 A
                cyl1_line_coords.end_point[1] = cyl1_pt[1];- [- l3 }# b- S' N) l/ [) C
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
2 ?+ X+ A; z* O5 _3 [
1 C+ A- m& _  |& {( f8 r* w                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标, v- U5 _: e+ p
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
: n& F# M8 J  A( f5 M               
/ b& n0 P/ t4 z/ o                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);" P- E' S5 ]5 l0 i
                UF_OBJ_set_color(cyl_line,186);! s3 p' F* x8 u! u' j6 \& W
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
! `$ @  t% Q/ `  r8 i, k) o& f9 v7 z  _- Z2 R
                UF_CSYS_set_wcs(user_wcs);* o, N) |* {* T- c5 W
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)6 G! k, x4 ?6 D2 |$ E) M! b

$ `+ n8 A0 W! o6 v- S                goto l10;
9 N: K; }0 G3 \' X8 J& J        }3 ~  F  r4 W' P3 {+ h  }6 m- K
  z4 ~+ y& z0 w" D

7 J& w6 Y! B. [. Z2 T# q        double WCS_pt[3],center_pt[3];
* E% N9 S. F% x  V9 n& W        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
: G! |% A& o0 x        UF_CURVE_line_t Xline_coords,Yline_coords;
) }+ b$ E  y2 R8 P0 n7 _$ i& K, x6 f        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
! N, ?' O5 [$ a" A' Y        8 f4 T+ {' q  M) N2 O. q/ K8 a( Q
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;3 Y; q" t: O/ C0 C$ W$ S
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;! y3 L4 \& Q) X$ ]( k
        center_pt[2] = WCS_pt[2];- C5 U3 Z* R- \, `' O4 m1 v# z
; S& z0 X, @5 z% _0 e+ Q/ j

& U$ O* i+ E3 j2 }" e6 F, t1 Q        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
. O2 A. g( y  \* L5 [; k' k+ d6 j        Xline_coords.start_point[1] = WCS_pt[1];0 ?; x. e( t9 L* m4 J) n% k
        Xline_coords.start_point[2] = WCS_pt[2];! i! b6 j2 l5 `* [' q9 i
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
" W5 c: d* D1 w2 o- V2 m$ u//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);8 v' ^" ]$ @. o; {$ s1 c1 v, G

  l% T- m- M2 s7 B) F        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
& R* y; Q: B' [6 t2 p' e" X        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
4 G# m( a6 K, P% ?5 c        Xline_coords.end_point[2] = WCS_pt[2];! m  ~- `5 y% P# D
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
" j6 Z1 f: P1 G4 T//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
! o$ J4 M0 i8 u8 o' c
, `  Y* X6 |! {+ k$ c3 b        Yline_coords.start_point[0] = WCS_pt[0];1 h) s9 M/ k. v, f" y
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;# a$ b: v9 \# T- H2 s/ \
        Yline_coords.start_point[2] = WCS_pt[2];
  I  p( J+ k9 A* Z; d# J( u        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
# @: f8 J; f2 ~* J//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);3 ~7 u- X1 N8 u4 Z
# W% r/ ?4 l: T6 e. W, O
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小. N! K2 d! }& x. i5 E
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;2 h& s0 u1 L5 f
        Yline_coords.end_point[2] = WCS_pt[2];
" l, e8 g; ^0 U        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
4 }' U' G/ C- U- ^7 i//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
. Z6 @/ n  H% }5 d* c       
% R0 J% ]) r) _' h$ I* f0 ?        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
3 Z' z4 J8 T0 n        UF_CURVE_create_line(&Yline_coords,&Yline);3 H8 o4 x! b% _) l5 J8 u
        UF_OBJ_set_color(Xline,186);        //设置颜色
$ B: x+ J" @: n6 o1 o        UF_OBJ_set_color(Yline,186);( H3 V8 }+ v; Q
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
2 K5 ?/ o6 m( Q        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
7 Y1 C6 @# u0 I: e+ K4 v8 \% w1 q7 c- k5 V
        UF_CSYS_set_wcs(user_wcs);. `$ R6 f3 [" P$ R/ V
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)5 H- e- ]) D+ I
        goto l10;2 l( W3 I; r1 _4 P7 u; l

( G3 u+ I5 X8 z5 }7 N) i}9 F+ c! M1 {! k0 X. N

8 G: g0 y4 V1 z0 b- D$ Rextern DllExport void ufusr( char *parm, int *returnCode, int rlen )1 Z: m( i! Y2 A3 u( X) u
{
' A& X5 u2 O' g! _' F" {    /* Initialize the API environment */
; z5 {: M( N3 a% w2 m    if( UF_initialize() )" w# T; C" y. @" j% ~7 s
    {  W3 T+ n* B* p  }8 P: M
        return;& M& h/ j/ w2 l
    }3 |( {; Z+ L# V1 l; R$ z8 F& z
# j8 F" G4 [: H) q
        Create_Center();' Z* O- ~- p; m- [

; Q- m) d% `/ A( J    UF_terminate();7 W7 ~6 A7 K  W/ L# P& ?3 H
}
5 O  Y3 `' e& ^  E
2 \" ~  u8 y; r; K  D" k7 ~" {7 H$ c; t  k4 O
extern int ufusr_ask_unload( void )2 g! _6 V2 v9 r/ `0 W1 b) c
{/ v8 J2 t+ E3 t7 {$ M& _
    return( UF_UNLOAD_IMMEDIATELY );
" I; ^# c" _- [! o: S}5 B  M" C. v5 S. v3 G( t- p, J8 Q# [" P# a
, H6 _. q. w% f+ |; F

6 j. G0 `2 N0 R. K0 _
3 {, Q3 E* D% r' c5 i3 b* r" [9 j3 ~- U# P% D# }1 v
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  k, o) a$ S* q/ W* X
呵呵,终于写好啦

" W, L5 I9 u/ y) @8 F  O4 Q$ Y9 J不错啊  
上海点团信息科技有限公司,承接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: q+ K( v* Q% Z$ [
老师多多指点才行
- W/ \. A% D* U, e
后面把 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二次开发专题模块培训报名开始啦

    我知道了