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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
' m5 e  m* i0 N6 J; C' R
#include <uf.h>
& f4 o' e+ r4 o' g5 _( x$ c& I% F#include <uf_ui.h>  {. b5 T. Y3 Y" e/ F
#include <uf_exit.h>
9 w$ x* O1 _: j5 e' c
" ]- Y* e8 H8 m3 t8 Y! H#include <stdio.h>
# \. l% \# p7 j3 m: E+ m#include <uf.h>% h" r! b* S! F2 f; b( k
#include <uf_ui.h>
2 z9 C/ b7 P3 P3 u  a#include <uf_exit.h>3 t( s" L  ]) n. T% e: W
#include "uf_layer.h"
5 a* l6 A* M; ^9 P2 \( z& k2 a#include <stdio.h>
  W" K* ~# z0 N+ ?4 m+ W#include <uf.h>( \! v8 r, i& z/ _! |9 M! E
#include <uf_modl.h>
0 }: H" [0 u! G; P% o, @" c#include <uf_curve.h>$ |2 B& B0 f# Z# f& ?; b
#include <uf_csys.h>
' L/ a. c! l$ U/ }#include <uf_object_types.h>
! w# n. F6 p8 q% y0 E9 b' R" t4 S#include <uf_ui.h>2 W( @0 |8 D# \' s+ H$ b+ N
#include <uf_part.h>" O- v0 j* q% r' F( h/ ]
#include "uf_obj.h"2 e9 y# u8 m' b/ c
#include "math.h"3 c( `6 F  t- I7 h/ e/ N( O

2 D! |$ f1 _8 U, R5 ~static int init_proc(UF_UI_selection_p_t select,void* user_data)* ~. D" v" [8 x
{' x& ^* j  m8 c- t
        int num_triples = 2; //只选择一种类型
! r' r7 R2 O& g5 S3 A- ~8 K" f        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,# V. f* l) Y) b) `: {- y7 n% d& N
                UF_bounded_plane_subtype,1,0};" X* {( a1 a, ?( ~5 V
if((UF_UI_set_sel_mask(select,
9 N% u  }# X) R- {  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,& W4 x) W# L' `; ^* l6 ]
  num_triples, mask_triples)) == 0)
& N) m$ T  }9 G/ ?2 u9 F {
5 v; j- \5 U$ O3 l' k  return (UF_UI_SEL_SUCCESS);+ r2 Z; C3 L- u) ^% r4 }2 Z7 m
}
* ^) K* ~9 f7 h! \0 D! r5 f7 \ else
, V! ?, j" z: R+ Y# ^; O {
0 O0 ~6 b! P! e/ W7 p3 n* C  return (UF_UI_SEL_FAILURE);
4 a- h2 s+ B) K* U3 X  y }( h- F  U) E0 n7 V
}
* I7 t9 m: Y0 N
7 r/ q, E6 h5 T! {0 k  c+ A) V  `. L+ ?
static void Create_Center(void), ~9 b& U( c! @8 f1 r
{
: P* P; _5 c0 I1 t) g        tag_t user_wcs;% b. `; s/ A+ K) ?/ V' V1 e
        UF_CSYS_ask_wcs(&user_wcs);& h& G+ z7 Z* v% p! j& R4 `
        char cue[] = "简简单单:请选择单个平面";3 T/ B) @6 Y% h% L" q  u
        char title[] = "简简单单:对象选择对话框";
+ p. ]0 ^6 \1 Q, l4 A' u int response=0;
* E; |; H) ]+ V- g* X tag_t object;! d9 ?, f; _: f/ y+ V& I8 K, @  d
int count=0;$ p6 X. p* R0 V8 E6 g
double cursor[3];7 L, U# Y3 ^( \: X6 Y0 s" y
tag_t view;
6 `4 S* p8 W/ C0 }. O. f# Vl10:
/ C2 e4 u- ^! Y- Z, r6 n4 q' L UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);* b0 x4 M% q8 n( o
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
9 F: ?7 w. H1 Q6 C if(response==UF_UI_CANCEL) return; //如果点取消就退出
2 J, N+ O' k  J" v6 d* ] UF_DISP_set_highlight(object,0); //取消高亮显示4 X/ a3 X% k1 |$ W2 M

; m# J& J2 O+ v% d  int type;
' J; f! v6 [; i( j  double point[3],dir_z[3], box[6];' E# N+ B0 B, h* p$ s
  double radius,rad_data;
( f3 r6 X  b8 ^# e, U" k9 f$ d  int norm_dir;2 S- U; E( k/ ~3 i9 l
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向3 U0 X! a$ w' Z" ?% D- e: T: e

+ r) m8 _$ Z, a4 u# j1 A/ X. X  B& \% Q& s, U
  tag_t matrix_id;2 F9 V; Z) g0 B. b) Q, \( r& R6 H; `
  tag_t csys_id;
/ g' X  g4 ]+ _$ M, |( I  double matrix_values[9];
& r, v1 y- m) i$ m# W7 h  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
+ D) T9 d' o- {" [' ^- F  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values& j4 D0 Q3 w  t5 Y# k8 c4 A
  if(norm_dir<0)        //判断面的法向是否相反
' T3 x$ x4 {' L! }  {
/ w# x& K! d4 B+ Q# f! u) v/ G; L   matrix_values[3]=-matrix_values[3];
  D% Y- p* V7 p! M& i/ a   matrix_values[4]=-matrix_values[4];; a; k! z3 x- h0 p
   matrix_values[5]=-matrix_values[5];5 e, b  y* b4 q$ k
   matrix_values[6]=-matrix_values[6];
) N. o* a+ h: _' ]* W   matrix_values[7]=-matrix_values[7];7 `( z8 P# L5 j" K7 S
   matrix_values[8]=-matrix_values[8];- G' Y$ o1 h% l7 K  Y/ J) {
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
# Q- F( X% o: j5 p. ?0 q  }. F9 D5 x0 C# x! N! T3 B0 @+ I# s
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
+ |0 H  i8 y; b$ U6 Z  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
% _) Z4 j2 T4 S+ i. Z  A UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)7 l+ w3 p. D+ u& t
& j# R, W" r+ r$ H: T
        double boundingbox[6];) V' {' o9 c) ?) _: x% |
        double boundingbox2[3][3];
1 i! P0 g  j8 n: F5 g        double boundingbox3[6];
' }; F8 I' g  V/ h' G8 B        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
) L$ Q; [  r8 x
) [; d; R& c* u( U- n! f        if(type ==UF_cylinder_subtype)) S- l* x9 C0 {* W
        {
# c" P$ T: P% k1 E                double cyl1_pt[3];2 v5 y: e. n9 v
                tag_t cyl_line,cyl_pt;
# U/ O+ _: p* d( d, B                UF_CURVE_line_t cyl1_line_coords;
. t" m/ |4 B# Q$ L' \* H9 A) y1 N                double WCS_pt[3];: p" d! m1 b' r  ^
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs& J9 P% G" P! R8 S
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
& y. v" g: k; I                cyl1_pt[2] = WCS_pt[2];8 n. I& `0 X* y( K1 U3 E

( c* |) J+ d6 X( f                cyl1_line_coords.start_point[0] = cyl1_pt[0];
, Y* p2 @) }1 [6 p: }8 W                cyl1_line_coords.start_point[1] = cyl1_pt[1];/ [" Y5 ^2 N( ?4 I, k
                cyl1_line_coords.start_point[2] = cyl1_pt[2];, E0 x$ t1 f% o* |
6 E! |& R" q1 F. c, H' X' @! `
                cyl1_line_coords.end_point[0] = cyl1_pt[0];  v- q4 l) r: [0 K% R+ w# h1 \8 n% j& F
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
" u% w8 r9 X/ D! d( _: y8 e) [* Q5 C. G                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];: A6 ]5 E9 |# L" W8 @: c

6 N, ^5 m/ `0 I6 m* G! Q4 g                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标% t; I$ N  @; _6 |) 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转绝对坐标4 E' D  T' v" E4 ^3 |2 O
                4 E' l, O4 T- z/ K. U' R" b
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);- m& T# R4 L8 Y0 B
                UF_OBJ_set_color(cyl_line,186);* v# H" t4 j+ p
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
/ C' W; P& D. {* G( D# q
: y! K6 @3 G/ H2 _' v                UF_CSYS_set_wcs(user_wcs);; O6 c: E; {' Q+ {) ~; o4 ~
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)2 A) C& S  Z( v8 g/ x( t0 x4 i9 O
, z  {. c6 a% X. l4 n1 n
                goto l10;/ _/ k8 V7 C( y! u- Z" S
        }
  w# D7 E; l2 G4 X6 q6 ?: J
: v' N; u- _3 Y1 e# W; ?- i
7 l4 n! E* ~4 T2 v        double WCS_pt[3],center_pt[3];; ?1 I; F" e+ n+ u$ v9 h
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;# W, Z2 I7 l( e0 A
        UF_CURVE_line_t Xline_coords,Yline_coords;. o4 [: f6 @8 d2 |( _
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs( |# N; J2 _7 p1 g" T( l
        2 L; @2 N- j, h: r+ M
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;9 F7 Y( c/ m& X" a* p( W5 b$ }: |
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
* D/ D! g* ^$ \0 i* S( B: E; w+ q        center_pt[2] = WCS_pt[2];
5 F5 u/ V/ P& a; k! W- _/ ]. f
# x8 I" S4 d+ d) U
* @) k( Z) B: c( W% t7 ~7 f        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/25 d/ l- n: }: q; U8 T! d, q
        Xline_coords.start_point[1] = WCS_pt[1];
& z1 Z9 M+ w3 P1 }, {        Xline_coords.start_point[2] = WCS_pt[2];" M: R6 D7 \' c1 i- M3 [2 q
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标$ @3 j" K) c2 X# H2 _3 Y! g
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
. X# B3 y" P1 W3 V) {& }* _% M. l9 d- c
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2+ i! I  C0 d3 b/ p
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
/ }) s1 z0 W" W8 `3 _8 E) O# `        Xline_coords.end_point[2] = WCS_pt[2];2 K, Z1 Y; v0 c
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
# ^# r& K" g2 G2 j  a//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
! Q% z' C: x* O4 z1 z' f' a: h6 ]5 t2 {9 T- ~3 x( U* ?1 J
        Yline_coords.start_point[0] = WCS_pt[0];
$ S. B, j) z* F  }" q5 D. h7 ]        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
8 a3 W$ l/ x' N3 R1 {        Yline_coords.start_point[2] = WCS_pt[2];
3 `: r* e* I+ N) z: p        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标. N4 ~7 }9 ]5 a/ p0 D
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);7 J  ?+ X1 b, S6 C* G% ]" B+ l( O4 D

# \! y- y$ z8 H4 \( N6 D& B# C        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小( `5 ]( u! ?# b
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;; x. G% [2 N9 w+ y
        Yline_coords.end_point[2] = WCS_pt[2];/ |5 @, J$ r# o
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标0 R  d- `+ Y( w
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);" `& ^5 j3 k# l( s/ o+ E8 `
       
1 ^. f* @; w( U- l9 u3 H        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线- w! |: l7 B/ V' q% }
        UF_CURVE_create_line(&Yline_coords,&Yline);& Z$ M& _- Z" n! h6 n7 k) J% A
        UF_OBJ_set_color(Xline,186);        //设置颜色1 t: e+ N+ r5 ^# l- u8 |
        UF_OBJ_set_color(Yline,186);
$ K1 k5 L! C& K* U4 s( \7 ]( Y        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
. P0 t! S% I# l; l# S; J  S        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型+ s0 Y9 o0 }: G$ N# B
9 S- o3 x6 @% N8 `
        UF_CSYS_set_wcs(user_wcs);3 X/ M3 `% X7 V+ t
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)- R" j0 r3 l! E- u" g
        goto l10;
0 L! ]5 W5 [0 V. R8 S
4 _9 S" I) s9 z) u9 R* o* [}
5 x( H  l! \3 C9 D! a; ~9 `1 ^; W5 b: f/ p
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
; b5 l* k/ t& }& [{" |: d% H6 z5 G+ Y3 p' z
    /* Initialize the API environment */& s0 q5 m. ]- p
    if( UF_initialize() )/ ]+ T+ |  U/ }' E
    {& t! i4 l; h1 ~, e' l/ g4 R
        return;
8 ^# @! A( q. i    }# Q0 \  d3 i, h' j

7 g# ^# d5 N* \/ F1 q        Create_Center();; a  g+ |& K+ \! e' j8 h# j8 O
- p+ ~8 b" k$ r- G0 w5 E
    UF_terminate();
- o. S  n  I  O; V: Y5 o}
! c7 r. @. l- |2 ~& i4 q# S# ^

5 {0 _& w  V5 O4 a, H" L+ qextern int ufusr_ask_unload( void )& n: {% q0 J6 I
{" ]7 {; h7 d6 |1 j
    return( UF_UNLOAD_IMMEDIATELY );
4 Q% y6 ~' c5 a}
, _/ `1 \3 p7 z
/ G( Z7 E7 s( F. L* ~' }3 \  P! e% k6 x1 T9 @
  d. z6 J7 g& H( u

$ c; q/ w  J$ U% t
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; I2 S+ p2 C- }
呵呵,终于写好啦
2 {6 w' W3 T8 n  p& N/ T' w& c
不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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
, v4 H( L$ d9 f" G- U$ I( k老师多多指点才行
( K8 e% v2 H  X, v( I5 B2 V% ~- V
后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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二次开发专题模块培训报名开始啦

    我知道了