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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
5 m- B" q2 L* g$ u5 d2 G2 D& ~
#include <uf.h>+ e) }& R" A3 Q, \
#include <uf_ui.h>1 @4 D3 x. o0 Q' g$ k, L5 ~' M
#include <uf_exit.h>  N! l" Y. n1 @( E% ~

, @# y) I6 {( M3 o5 A1 s1 W#include <stdio.h>7 b8 z7 X& x* S( Q9 I* ^5 B
#include <uf.h>
, I- B. {; G) u3 a- f8 L#include <uf_ui.h>3 ~0 X  D3 @) F& A8 U
#include <uf_exit.h>; O0 |# l6 v: @0 P7 V) O, i; H# ]6 U
#include "uf_layer.h"
$ M# @- N0 l* @" z( U" I  T#include <stdio.h>3 R4 ^1 i8 S% M. [$ m# A! A7 I
#include <uf.h>: z* a$ ~, q/ t3 U* u
#include <uf_modl.h>
" W  t8 l/ u2 D& ?1 r#include <uf_curve.h>
. Q( p! J. V1 z+ }#include <uf_csys.h>
) A7 s- {3 ?1 h4 V$ @5 W5 M#include <uf_object_types.h>9 u' K( j& b  f- o4 c, g( e- t
#include <uf_ui.h>' k; ^! \9 P  }, M& z
#include <uf_part.h>
+ @% d, q5 A) P#include "uf_obj.h"
/ C" w+ e  N* N2 W! {6 W+ v#include "math.h"
$ x6 l8 ^, e' J0 H+ n, k/ ~* x
, w8 {' P  m+ C4 H6 |static int init_proc(UF_UI_selection_p_t select,void* user_data)
# ?% C3 _, p/ U0 Q& z$ b{
2 o- S" H# X% N" |        int num_triples = 2; //只选择一种类型
. |* n  g6 y; w+ e0 z0 L        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,3 R' f7 z  s  x8 [6 R. y' y
                UF_bounded_plane_subtype,1,0};
8 M: T6 B4 g+ _ if((UF_UI_set_sel_mask(select,
1 a7 P  F1 z7 Q) A  K  g) `  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
7 J3 _$ Y' G1 [, Y8 _  num_triples, mask_triples)) == 0)! T1 I2 N% Y2 R
{
% }( o8 m  e" i* k  return (UF_UI_SEL_SUCCESS);7 F7 b3 C$ C# }0 j2 d
}- m# G9 a" v6 K4 z. j  O3 M0 {
else
% J4 O7 X8 q, M" W {9 f, U. S! C: A4 P, m
  return (UF_UI_SEL_FAILURE);
* L; T4 X7 n) t* s7 a, ? }
; h6 p8 }" Z' W}
& ~6 R% B1 c) l( a2 Y' n
% x( `) w+ i0 \3 n* K* l, x) |
' a7 w- [* K5 F0 k: }8 pstatic void Create_Center(void)4 }9 I  D+ f- I. J4 C+ l
{
; R/ w( [4 A* @( s6 k5 c0 j6 f        tag_t user_wcs;
- c" E) f9 j% V" g* i1 j( i        UF_CSYS_ask_wcs(&user_wcs);
# G, |4 m( w/ x2 ?. }7 q        char cue[] = "简简单单:请选择单个平面";  B! q( {. e  j8 `+ O
        char title[] = "简简单单:对象选择对话框";0 X! e. J4 S3 d: N
int response=0;
/ Y7 E& I! _* j/ G; z/ J# } tag_t object;
  o7 [! W  |- w5 b int count=0;
$ M/ ]+ k7 o* |* J double cursor[3];
3 r5 c6 ~1 `" r9 w* D7 G  X7 m tag_t view;1 a1 n& ?5 F# O, a, f
l10:7 ]6 K' W2 B5 V9 }% G4 F
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);( h% _" ^+ Y* z) g5 i  m
if(response==UF_UI_BACK) return; //如果点后退就跳转到L107 M/ }3 G0 h+ P4 x5 J+ t& f) ~
if(response==UF_UI_CANCEL) return; //如果点取消就退出$ \' ]! M, o) [% Z2 W
UF_DISP_set_highlight(object,0); //取消高亮显示
4 f# r& f9 K. m$ J- Q/ u( E( w
* r; ]3 o' V/ P2 T' d) x0 t  int type;
% o, Y% {/ W4 V: n  double point[3],dir_z[3], box[6];# J1 I4 n/ s) u1 d6 W
  double radius,rad_data;% w& O$ }: {, `% Z
  int norm_dir;
: P, z) G2 C0 ?( {  b7 F  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
5 y" E9 \4 s, j+ j, F
; i  }1 o. o3 A+ F' U, h
5 I3 \' m8 g2 T/ C9 u# ^5 @  tag_t matrix_id;
9 i0 }& i& I$ G8 M  tag_t csys_id;! M, T1 z3 p* y" P
  double matrix_values[9];' ]- R8 }( }6 }% k2 w& T0 i
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
0 }; W* o3 W5 U  l4 L/ ]4 v3 q; ]4 C  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values" U; K" R# ~% T& d- ^/ E% b
  if(norm_dir<0)        //判断面的法向是否相反( ]. @9 l- h/ w- I0 L- ~# C
  {1 U1 I$ M( b* J" m: H( ^3 v
   matrix_values[3]=-matrix_values[3];- }8 v3 h9 }* P# Q! T; F
   matrix_values[4]=-matrix_values[4];" J( j2 O3 V5 a0 J& m
   matrix_values[5]=-matrix_values[5];
8 _+ |! C' \/ a* L   matrix_values[6]=-matrix_values[6];: _6 s0 a2 M* s" {- x- H' m0 v3 n
   matrix_values[7]=-matrix_values[7];9 U) D1 ^* w/ P* i2 c5 d+ a
   matrix_values[8]=-matrix_values[8];
2 Z$ h& p1 c2 e. h; Q   UF_CSYS_create_matrix(matrix_values,&matrix_id);
9 b8 N7 O! k- v% e" Y8 V  }
3 i9 K- O' L5 m  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);7 E; u+ j0 _" K. p  o
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)' I# u8 Q) ?% ~+ Q, t/ H1 U6 l0 ^
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
7 l5 I8 b* [8 ]' u# a& O2 \
1 [2 j* R- _* j8 H        double boundingbox[6];' `$ _3 p4 C; n( G" ]/ O# x2 A1 C" |0 d
        double boundingbox2[3][3];+ @6 i+ S; B+ L" P" y
        double boundingbox3[6];0 k' B. C0 K% A/ F" g5 L
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
) c. W" u: `1 K1 S6 e$ N2 C. S, a; O" ~; n+ R3 t1 J# y% k+ k
        if(type ==UF_cylinder_subtype)
  z" m0 e! h4 E$ y6 i, A1 p5 f        {! I; ~# C. A- [  Y/ O! z3 v9 Q
                double cyl1_pt[3];# W" A, V6 Z# A0 S
                tag_t cyl_line,cyl_pt;* Y5 B" `) F8 e5 c, z9 v
                UF_CURVE_line_t cyl1_line_coords;3 H0 {; N, S$ L) f- E" S
                double WCS_pt[3];
4 R( d$ ?; r) Y  |                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
$ G4 l' n8 p. u" K; o( b( s7 E% R3 G                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
% }2 Y; L$ m( r9 a0 ]                cyl1_pt[2] = WCS_pt[2];
% L. G4 e' P8 |) s; p! m% B
+ `* n4 |2 ?9 ]% k$ O, w$ R                cyl1_line_coords.start_point[0] = cyl1_pt[0];
4 B0 {; O! E4 l                cyl1_line_coords.start_point[1] = cyl1_pt[1];* k1 o3 b0 ?1 J& e
                cyl1_line_coords.start_point[2] = cyl1_pt[2];2 J# T6 F/ X" y3 B

. B: I" K- H1 _& \* Q                cyl1_line_coords.end_point[0] = cyl1_pt[0];
, x+ W8 }. C5 T% F                cyl1_line_coords.end_point[1] = cyl1_pt[1];# m. A/ {. F/ }9 w
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];6 Z) b3 ^3 \/ n
3 e$ D6 D" z2 S0 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转绝对坐标* m9 T# L1 @$ N" _8 e! \
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标7 s3 w+ b- K* z( v  G
               
9 v2 I6 W1 `" m- y                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
! E+ U9 V3 M0 B, R( `1 o                UF_OBJ_set_color(cyl_line,186);
- }8 Y& [% q2 G2 P7 }5 b/ p; J9 M                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型1 p3 R! d" ~2 R' ?" V; \8 f8 p

- R) n7 i/ u: R) _4 Q                UF_CSYS_set_wcs(user_wcs);# |3 o5 ?4 S( p
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
9 C5 Z/ l+ C1 X6 r" b' d" ]( g2 c& ?2 v
                goto l10;
# v- l; C' A" B/ |" b        }( M. F4 s! A; A% v. T0 n

  S# M' g. ~6 l7 L2 x0 ?# \( }& `2 Q$ h& a2 d7 E% c
        double WCS_pt[3],center_pt[3];
6 w+ q1 x8 [  _1 a( O+ m        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;) q% q. l3 b, }+ ~0 ^& a
        UF_CURVE_line_t Xline_coords,Yline_coords;
2 P& e1 t, `4 S        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
- b) T6 i6 {* A  p        : ]3 G; p9 S" h$ m
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
  S, U3 a4 d9 h, L2 O. ?; G        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
- Z( ?; U' h* d( h# Y        center_pt[2] = WCS_pt[2];4 J8 D5 e- B# f/ B0 s
0 X4 U' j# Z4 M" [) {
" F3 K3 U/ D* H5 z- D+ l. `6 [
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
8 X2 `4 v8 N9 s& g; {        Xline_coords.start_point[1] = WCS_pt[1];% n2 |: ~4 t1 E! X. y
        Xline_coords.start_point[2] = WCS_pt[2];6 Y' n. e& c8 O7 i% }. k3 `
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
. g5 P6 |) @" ?, i) c/ g; G//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
% \$ `& c  N" b/ e9 y
6 ?" f7 S9 G6 y6 k" O        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/21 K0 f7 _5 a' b
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小2 }! m- l5 |( ^9 v3 Z3 |
        Xline_coords.end_point[2] = WCS_pt[2];
+ p: I0 Y, I' n5 _9 ~4 Y1 P. w        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
5 p# Z7 u4 f! c- C9 F//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
) ?, f1 l  u: V
! V, m) c7 w0 l/ Q9 }: _        Yline_coords.start_point[0] = WCS_pt[0];
2 T" e. c2 ]3 N( T        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;+ y' L- u/ ?# w( o! k. t
        Yline_coords.start_point[2] = WCS_pt[2];
! @% y' ]/ L$ Y5 s9 Z; X3 V- ]        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标1 b1 @/ \" N* h2 K$ {" I3 ^
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);' L, q+ G5 x  V' ~, ?  g5 v
; z% f" z2 k% I/ V
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小& ~# P6 A* u6 R2 `- @
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
; e; g2 k2 C) q$ D6 e0 R& D4 b# V8 ]        Yline_coords.end_point[2] = WCS_pt[2];
& \" \' \! k# w0 @3 i) ]# h  ]        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
' M5 T: V* ~$ p& H! T( L//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);% E) \8 K; \7 ?0 P" C; X5 \
       
/ v2 o0 N; r: ]% Q" \" u( X$ F0 k        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线! |1 v1 k" V0 r8 V
        UF_CURVE_create_line(&Yline_coords,&Yline);! E4 Z3 D4 V! g3 c1 ?5 G+ e
        UF_OBJ_set_color(Xline,186);        //设置颜色8 r2 o, O1 P1 f6 s9 M2 T7 ?
        UF_OBJ_set_color(Yline,186);
9 Z6 _, A* Y9 v1 l6 \  w5 F        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型4 ?9 Q5 L& |" K+ Y! u4 c: d3 }/ W
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型" S! D' q3 J6 A8 H# R; _2 f

8 _! G& d, \+ I8 `        UF_CSYS_set_wcs(user_wcs);8 S7 N( @! |9 @
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
; ^% c1 k: w7 q, R        goto l10;' b8 k5 F' E- R
7 s' u: M" k$ v. M9 y; A
}
- T) b) ?" a6 A% C- Y3 M% M; E' {" {7 L9 j( R9 B
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )0 l& V7 x4 B# O, Q" F
{5 u* C3 ?; W+ Z3 V$ [6 i& `
    /* Initialize the API environment */
. _0 \( ]* q2 @    if( UF_initialize() )
3 o  p6 t& ~% d6 K    {
) t& ]# a1 _2 `: k( e' r        return;
' y, O; [+ G3 Y7 X    }  b' _0 n, A6 E. ^) O- K4 K2 v

4 N* m2 g2 Q. F. Q$ m" ^        Create_Center();3 `8 s) J: G% g$ {+ ]
& ^# ?7 x/ @! ~8 D' a
    UF_terminate();
2 Y2 X! P! F( c}* ~) j" D- m) Y: L& b0 @) h
9 m3 g( V, V! m3 c
0 n% _2 Z0 w  E) t  `3 P
extern int ufusr_ask_unload( void )0 c6 D* `. b5 Z  r. }. Z5 X
{+ x6 C  H4 N" @, {2 m. l
    return( UF_UNLOAD_IMMEDIATELY );4 x; K7 M/ J0 i& F
}4 s4 z% g9 k- b* U9 k3 ^9 \
! Q9 W9 K; [, L/ L
0 L& e: g# k* Q
) p2 u+ y4 }" M9 Z/ |

2 E1 k1 U$ b$ f, 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
4 r, X. z, j  b; C( J呵呵,终于写好啦

7 ~/ x) b  s; q不错啊  
上海点团信息科技有限公司,承接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
# _7 f+ i$ k2 K: y1 q3 _( Q7 w老师多多指点才行

2 r# [& N% k& c后面把 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二次开发专题模块培训报名开始啦

    我知道了