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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
) e$ j. q; V1 E  T& Q
#include <uf.h>) [5 K5 W: v. _8 f4 [
#include <uf_ui.h>8 c9 ?5 C1 x- [- i( T! {) a2 R+ n, P
#include <uf_exit.h>
3 N* e$ v6 Z" p* O& [% N- a4 R/ ~. F! i. k, o% E3 @! }
#include <stdio.h>
6 l  L# _- X5 P0 k4 d* b& F# v#include <uf.h>6 l& P9 l0 f/ L- M+ m
#include <uf_ui.h>1 ]; @1 a9 [( m
#include <uf_exit.h>
; z1 r+ Q- Z  h# v6 N#include "uf_layer.h"
7 S) k) L6 `  u3 `& k#include <stdio.h>
( ]5 f% K7 k! c1 @! I#include <uf.h>& P/ Q8 t0 R, l# r- ^0 D8 d: R
#include <uf_modl.h>
, Z% D/ T5 @* }#include <uf_curve.h>! U% M# y1 T/ v, @. k; f
#include <uf_csys.h>/ Z% [" O, ]5 f9 a2 Q# v
#include <uf_object_types.h>0 ~: R5 f  {1 n/ m
#include <uf_ui.h>0 j9 }" k/ u5 v$ d4 J: ?
#include <uf_part.h>
$ v( q2 |' n2 m9 _#include "uf_obj.h"
$ G: P2 T& G5 w#include "math.h"
+ f4 T5 [9 G0 @1 \0 ^, x/ U6 v8 a& `, w6 J/ ?- @1 X/ v* h6 c1 T& {
static int init_proc(UF_UI_selection_p_t select,void* user_data), m: _; _1 z* f
{* ~2 j0 w9 p  F! x5 _
        int num_triples = 2; //只选择一种类型
" s/ z! ^# p4 o        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,. F% p! J# o8 `0 i
                UF_bounded_plane_subtype,1,0};
) |7 q3 l$ \& U# G* j4 R# U if((UF_UI_set_sel_mask(select,  x) [3 o; ]3 n' Y: Q0 N7 r* H
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
3 n. n) u2 |: J4 X/ j2 p  num_triples, mask_triples)) == 0)
* g% f4 B% {8 W3 v {
4 U  q% N: X1 P9 M) X, J& P" E. G  return (UF_UI_SEL_SUCCESS);; I. G. A" R6 E1 J5 Q2 z1 x
}
! C! H# f+ ?/ h$ x- N2 a' G8 N else
) A8 v8 M! s1 C4 Z# P, F {9 c' O* }+ y" e7 I$ o  X
  return (UF_UI_SEL_FAILURE);
8 S. N9 Q" z# u. r% y6 b }/ `: Y0 j, X+ Q8 e+ @) t
}4 v( b! n* j' R
8 S2 {0 [* O6 h6 O* o2 T, w( G

+ a4 \* h% Q, G2 [- B5 d) e  c" Ostatic void Create_Center(void)6 ^) v/ ^/ [7 S) n$ T
{
# W, A4 j7 K6 C        tag_t user_wcs;
  d4 K' k3 k1 X7 E  A        UF_CSYS_ask_wcs(&user_wcs);- ]4 M% `8 |+ I3 ~' j
        char cue[] = "简简单单:请选择单个平面";( Y4 U1 {! r% @7 V+ c
        char title[] = "简简单单:对象选择对话框";* U" c2 e+ s9 p0 U
int response=0;
' H9 j5 @1 G# \, J, f; \ tag_t object;
6 g0 [9 S: `# {. C- ?7 J9 b5 Y int count=0;
! ^! ^8 K) H9 s& S# C# v# R double cursor[3];
5 a3 m3 f; u# o6 I8 l: i tag_t view;
' V! ~) o& m% u* t! y' z9 F  `l10:
) Z. u5 p/ h0 \/ ]7 ^ UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
+ o6 k% w8 y( J. |+ m0 L, h! D if(response==UF_UI_BACK) return; //如果点后退就跳转到L106 ~+ d3 t9 H; A  h) G! @
if(response==UF_UI_CANCEL) return; //如果点取消就退出
3 A% [3 i0 N& G UF_DISP_set_highlight(object,0); //取消高亮显示
" u0 D1 f3 z  N) L; b, U0 b- R: B
: R3 M' T  ?# M3 G  int type;
6 z/ I9 v. @, K: G- C% q5 ^  double point[3],dir_z[3], box[6];' G: T. I5 R% n2 e2 f& I3 T
  double radius,rad_data;/ p8 [; P) @2 x" n% x
  int norm_dir;  N2 ^* Z8 F+ b1 V
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向3 P5 X1 ]; g6 k/ A! M3 y' s

% l+ @( T+ z0 f0 R- E- T9 [
/ x6 Q3 W$ I, m- d) V9 D' h  tag_t matrix_id;; s! X4 q- T- I8 H. V( B' o! I
  tag_t csys_id;  O7 e! t. y, ~& N: P& e
  double matrix_values[9];, v- Y; S& p; N' E% C! ?
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID; @/ }: s7 v; T% K" o; N5 S! q- y
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
- H/ t2 Z2 Z) R, m0 V& K7 @  if(norm_dir<0)        //判断面的法向是否相反
7 }4 [* e* v( k7 ^5 d  {. d% E2 u' ~9 K* k- E: S* d0 F! `2 v
   matrix_values[3]=-matrix_values[3];
# N. |) F! s9 n   matrix_values[4]=-matrix_values[4];7 j( q5 e' g) V' j  m( N
   matrix_values[5]=-matrix_values[5];( O" [0 B7 c2 o
   matrix_values[6]=-matrix_values[6];
* {5 C9 N$ _# T3 O2 \   matrix_values[7]=-matrix_values[7];
  \. k+ X: F* j- q7 }   matrix_values[8]=-matrix_values[8];
7 w! f, k2 p6 D. N! z& p$ a; }   UF_CSYS_create_matrix(matrix_values,&matrix_id);& S% w: C* f3 S8 E) ^: ^( @- H
  }
1 X9 k! p2 H0 l. Y  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
1 `8 E2 I5 ^: h: F- N2 N  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
5 @( K: U4 K0 F9 _. z6 ~" l UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
: B& ]% U6 m$ A
5 u5 h% y8 F" |. U+ c        double boundingbox[6];" h2 u, K. n. b: T0 g4 a) M) d; {
        double boundingbox2[3][3];; p( p( O/ w# R
        double boundingbox3[6];
% ]) y! \1 o+ @5 x; t' Q" X9 |        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
2 `3 p( E0 f$ z$ J% R- B2 |* F
" |' g  s2 I/ r3 ?) J        if(type ==UF_cylinder_subtype)* }; E9 s! F. h$ ~7 [4 E
        {
, R) O: C3 Z8 c! _& m$ I9 V/ O$ Z                double cyl1_pt[3];
' g1 E  w. E5 k1 e. z                tag_t cyl_line,cyl_pt;3 Z- _. _+ [; _4 o. T% S$ b
                UF_CURVE_line_t cyl1_line_coords;
7 a; y& a5 z8 r+ ]% k4 F; a                double WCS_pt[3];! d) }+ I& d- C+ m+ `2 F2 J
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
- D1 n. ?5 v3 E0 p                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs5 a3 a3 ^; c" N- i. W
                cyl1_pt[2] = WCS_pt[2];7 D) }5 J$ G; f& \

0 v% e+ e: r9 A                cyl1_line_coords.start_point[0] = cyl1_pt[0];8 q. U: _' R9 N# y6 \  `6 s
                cyl1_line_coords.start_point[1] = cyl1_pt[1];
* j4 z# Z) T3 W# [. I4 q- o                cyl1_line_coords.start_point[2] = cyl1_pt[2];
/ U9 K+ e2 m- ?3 t
& L8 O1 O" f% T- H6 O$ E                cyl1_line_coords.end_point[0] = cyl1_pt[0];
# {% F; b' ~1 o                cyl1_line_coords.end_point[1] = cyl1_pt[1];
2 v+ z, y0 x* P                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];. G  t( V2 `6 H; C

2 _  d, D, B* K                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
) l  e( k; I1 Z6 I                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标) R- t! g" i6 p/ U2 {1 L) C$ x0 N
                6 ]9 C6 `/ b. j2 p) m
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
$ G( [, J. ]  L+ g, Q4 S' v, J                UF_OBJ_set_color(cyl_line,186);
. p/ x( l2 I! c! u- Q% m                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型" ?+ {/ m; @7 `+ H( F
7 y$ z) k- q! |' u5 ^
                UF_CSYS_set_wcs(user_wcs);+ L# a+ V/ u5 J6 j! d, r6 Q
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
$ ?* x, G! A% V2 L+ S% ]  _# b" F) X8 R; w
                goto l10;
2 K, n3 j0 K  U3 w) j9 p# e        }" C) i6 Z* D9 s5 y/ h% W; _. v
, k3 G+ p2 c  M  T

' D) r* O# b. w8 b/ P6 @, D9 e* ]        double WCS_pt[3],center_pt[3];
1 I. E" @2 o: Y4 A2 u        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;" h8 d1 F4 V/ e) [7 M
        UF_CURVE_line_t Xline_coords,Yline_coords;7 O! G& n2 C4 Q  j5 A
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs+ {  i% }* X. i, @
        7 w3 R: s; [& z
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;) V0 Q' L6 U& j+ H
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;0 Q7 P. g" _* m( H, [
        center_pt[2] = WCS_pt[2];; Y8 o0 k  F' I
4 S6 ~9 r% {& ?1 K+ Z# h7 ~
* e6 B# w* U$ h7 X# V  W
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
% a  |( d2 b: i( ]        Xline_coords.start_point[1] = WCS_pt[1];
& o4 v, K( u2 A9 {        Xline_coords.start_point[2] = WCS_pt[2];
6 v% D: _7 [9 U/ L( a1 W        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标! Z/ y3 C' A, F# ^
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
6 J7 _- T4 W) c3 K1 f$ a4 M: v1 x
( [3 k3 }8 ~# [# f4 b6 k# o2 E        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
- p( e: J. l2 L7 f+ G        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
/ A6 z# l7 w  \) k        Xline_coords.end_point[2] = WCS_pt[2];
$ w6 n" c( V2 o8 Y3 p6 ~( {" j( x. t, d        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标4 i1 x2 n: \( D# S  ?
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);3 m, F4 U4 r* ]

$ ^" O8 B3 v0 _5 T. ?$ p! |4 I        Yline_coords.start_point[0] = WCS_pt[0];7 h. ]; A+ |! D* B, _; B( V
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
+ F2 K) E5 S- m- k2 @        Yline_coords.start_point[2] = WCS_pt[2];8 @& r: x# e. y, }+ u) A, e5 }+ o
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
& ^: }. V( |, O8 |: j% Y//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);* W0 }% V" l% Q" p7 o9 F- }& |

/ s. M; U' A( L        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小) o& B) X, \& e. c
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;" ?( l. r* e  Z1 Y
        Yline_coords.end_point[2] = WCS_pt[2];  M( h& D3 M% p
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标/ I5 F& a# b- x' I$ F6 p
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
  L1 t3 \5 N0 h; v: S       
# d+ J) j, a& C0 ]        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
2 Y2 G7 |/ `6 ?5 I7 Q        UF_CURVE_create_line(&Yline_coords,&Yline);
7 {( A$ V8 I1 i- e9 b        UF_OBJ_set_color(Xline,186);        //设置颜色
. ~: O' J! P. g# U% ^! V3 E        UF_OBJ_set_color(Yline,186);! e  c$ T$ p: l6 C5 }
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
3 Q! i, `, _, M/ Z2 i        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型5 H9 L' v2 Z& v9 t) y/ K% s
, ]# q* {* D; \2 \; n9 |2 b, A# a
        UF_CSYS_set_wcs(user_wcs);
# K1 @6 ]" D- n) m" g        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
" |$ P2 \- ^; ~( a$ C& E        goto l10;  E; _( j, ?# H, M6 v, G  n* t

) p: Z! y! |0 h: D6 ?/ {}
4 [9 l6 e* U& [/ r3 R5 n& R* S# `- F! N5 X: C7 q
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
$ c) _  j, k; D" U2 t: S{
$ B1 o0 [) {7 G% K3 _. y    /* Initialize the API environment */. U+ w+ f5 }7 z5 q$ {' f
    if( UF_initialize() )
5 ]7 O+ s( {" @5 f    {
* ^) G8 A6 e# \( \- X' p$ ?        return;
' {2 h2 O1 g' }    }: o8 |% k9 Q, P# t5 o! Z

% E# O  e% \9 {        Create_Center();
( m9 j9 G- ~* p8 m4 D
7 d2 @0 W* ~, L+ z4 d6 F  O  J    UF_terminate();" [. i8 x  ~: L& _! O8 g
}- m- g) D( p/ p

/ l8 d0 Y" Q/ Z6 ]6 v( q# k6 v
+ e, e1 C# _2 Eextern int ufusr_ask_unload( void )
0 r1 ~8 ]6 A- P* I{- n2 K- [' z, {7 u2 \& K0 G$ t, {
    return( UF_UNLOAD_IMMEDIATELY );- J2 V/ B* f. L4 T
}+ e8 C& T: X7 ]  M

( v, g/ x- `3 X) n" ~
7 i% `# X; c' I; ~0 h. J  B. z2 D" D6 m

6 B% N2 [: r$ x- _) Z/ I
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
5 }: l( i8 x* {, ?$ T2 h呵呵,终于写好啦

  K/ o* e8 X/ S/ W不错啊  
上海点团信息科技有限公司,承接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! c7 M1 k% x2 ?3 `# P( X9 b; t, ~% |
老师多多指点才行
5 P( L0 y) Q: F9 \% M
后面把 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二次开发专题模块培训报名开始啦

    我知道了