PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

1 ^; o6 |" s3 R5 t8 j#include <uf.h>& w5 w/ A% _; ]- O" K! V* X" a
#include <uf_ui.h>
; o  x  N& J! K% `- X#include <uf_exit.h>
; t# `  |* B+ Y; Z; P
8 A2 c9 V" A3 s+ }: z" y' |' U* R#include <stdio.h>
- B! v' B5 h! J$ _- O2 V+ A0 O#include <uf.h>7 |  g, M/ C. f; r
#include <uf_ui.h>
+ h  H) T, ?0 \2 q6 D0 H6 p$ M#include <uf_exit.h>
3 z. D0 g% Z$ q#include "uf_layer.h"
$ t  z0 H4 v* [% b#include <stdio.h>1 @4 Y' T, X; l
#include <uf.h>
- H$ Q1 v' l3 u/ @+ C3 b#include <uf_modl.h>$ I- z- H' c  z! b
#include <uf_curve.h>
+ ^+ t& G! j$ E/ t! j; f- F- f+ t* ^( [#include <uf_csys.h>+ T# W; `+ o0 I( N: r" z3 c
#include <uf_object_types.h>6 z  \. e7 K8 }, ~
#include <uf_ui.h>
4 |/ o( R  J8 }; y& i#include <uf_part.h>  L$ }  k% z/ @6 F
#include "uf_obj.h": J1 k2 _$ ~$ L* S1 h) @
#include "math.h"
4 S$ h/ o" t3 ~) @, D3 q/ D9 ?: }% G$ G5 \' B
static int init_proc(UF_UI_selection_p_t select,void* user_data)+ I5 q1 o1 J# n; y- C% O$ Z* N
{' q# K/ E9 N# ~; \9 o
        int num_triples = 2; //只选择一种类型! b* H8 J  I- [* |; y, @8 x; u
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,. @" Y# r& E+ ~/ I5 B7 l" i
                UF_bounded_plane_subtype,1,0};
- i  b  E4 G/ G if((UF_UI_set_sel_mask(select,/ G/ w$ I$ P4 M' e; X
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
4 l0 X* W+ ^) T# }1 m  num_triples, mask_triples)) == 0)
* ^' i# A% f' ^ {$ E$ f/ w1 r1 d0 P
  return (UF_UI_SEL_SUCCESS);
" V  e8 i0 a8 i1 p }
5 y5 }( p7 U" P) z! j6 { else2 |. \' u7 Q5 o" u; g4 x( w
{
* F1 s( }7 E; N  return (UF_UI_SEL_FAILURE);. S/ e+ l: H  X5 _3 B
}
' W3 ~) g4 S6 P& X* S4 Q  l" i}- P9 }1 o: c2 K% m; f# ^
5 t, W3 d6 L; v1 I, C/ z

7 n# [- |# H/ }' L3 N. dstatic void Create_Center(void)
5 ?9 [# k/ t) K7 m2 `{
5 \7 r' j  W. S* F        tag_t user_wcs;
2 n9 _4 q4 Z6 z( w3 Q) R- b        UF_CSYS_ask_wcs(&user_wcs);4 V$ x' u: |2 R/ p4 }: |
        char cue[] = "简简单单:请选择单个平面";2 S7 j. T2 f( i% F
        char title[] = "简简单单:对象选择对话框";( M" W6 \: G! J/ P
int response=0;+ R  w# t* R! |/ F: `1 W' z4 O
tag_t object;
0 {: v3 a, T# c+ D$ n. h int count=0;7 k+ v2 ^, z# g  r. s) Y
double cursor[3];7 [- R( D8 q0 E
tag_t view;* _, }5 F$ B( P9 A
l10:
- z8 h6 {* ?5 f. Y, j UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);" t4 c0 x- m+ C5 x' N5 X; J) ?
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
& J% T' _3 Z* O! F$ ? if(response==UF_UI_CANCEL) return; //如果点取消就退出9 D! ^2 U  P, z* R; q0 @) `( c& y
UF_DISP_set_highlight(object,0); //取消高亮显示
' L/ V5 }8 b/ B- B2 @6 Q: [& [7 v9 Y2 {. o6 I/ p, N
  int type;
# K- w. Q8 q# O" ]  double point[3],dir_z[3], box[6];% q) \5 F# w: b) i( N
  double radius,rad_data;
3 R$ k8 q5 f' n7 Q' y  int norm_dir;
" C) d* ~: ~9 x# m  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
& o& ^8 a6 q+ k7 t5 E& \0 L6 _5 p' ?

6 a" b  M1 f. H  tag_t matrix_id;& f( W1 ]/ }$ `- G: u
  tag_t csys_id;
( N3 R$ k. m. g' W0 x& L  double matrix_values[9];" N+ }3 O! d5 R) Y  h
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
( G' L+ v3 A3 ]! D! R( C  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values* U: x4 [" s: k( Y
  if(norm_dir<0)        //判断面的法向是否相反
) [( @( B0 ]: [" G  o! t0 f% C  {9 T0 S- q( Z; j2 y5 k
   matrix_values[3]=-matrix_values[3];0 _  w. o. T5 w+ e$ f
   matrix_values[4]=-matrix_values[4];
0 v4 O9 `8 [& p/ V& j   matrix_values[5]=-matrix_values[5];
# C9 W0 v7 ~9 m: a   matrix_values[6]=-matrix_values[6];# ]6 v* p$ @( n% G
   matrix_values[7]=-matrix_values[7];
4 ^. s* K0 R. h, C7 R+ P   matrix_values[8]=-matrix_values[8];) J* D* _$ V# h& c: e( k
   UF_CSYS_create_matrix(matrix_values,&matrix_id);0 F5 S& m! W- ?) D2 ]: E8 u% N
  }) b3 F$ v2 E8 L, L* O, q% g4 Q
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);) ]  S, [! g0 c# @4 U
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)" O+ s; N* K$ G1 U
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
8 X2 z4 a. N5 ~1 {8 F. z3 d# Y' p2 O: A9 x
        double boundingbox[6];
2 Y/ l; O) r( [2 @$ s        double boundingbox2[3][3];* F4 z# ]- ?% t' I9 _) {
        double boundingbox3[6];
1 p. }" L6 F9 Q9 E) Q! z        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
- u; ?6 l; e: w$ J; J& N# U1 Q+ D& q
        if(type ==UF_cylinder_subtype)1 }: X7 G! U6 |* t
        {' d. |6 h0 N6 b" Z- I0 v
                double cyl1_pt[3];
' N& N7 n0 v; T                tag_t cyl_line,cyl_pt;  h2 x5 h9 n' r! q% c
                UF_CURVE_line_t cyl1_line_coords;
: t- P) I# S# m' b* P" Y. B  G                double WCS_pt[3];9 G7 A# R4 j& u7 I' o
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs5 w' Z( x, [: F# i; ?& H# ]: p6 R
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
6 ]" R( _2 Z; _, F: c3 r- p                cyl1_pt[2] = WCS_pt[2];% O7 c, h$ y8 s; K, g
/ ]" f  y( E, Y" V
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
- m( K2 V5 X# C. {+ s" m; N: {                cyl1_line_coords.start_point[1] = cyl1_pt[1];4 L: [8 x7 X. s% [1 V; h9 ~% O) |
                cyl1_line_coords.start_point[2] = cyl1_pt[2];
6 R1 Y" a$ A( W7 _$ t
& m- W9 t# E' b- g  J                cyl1_line_coords.end_point[0] = cyl1_pt[0];
$ m& U/ ^  i% k. J2 {* a                cyl1_line_coords.end_point[1] = cyl1_pt[1];
! u6 w8 P3 W. g5 `# Q) J+ E8 ^                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
. m  e0 r! r4 [' O( d; N
9 ^- Z& P% E7 ]8 V6 t1 A, C                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标3 k6 u- B  k' u) ~8 l) r0 l$ x
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标) x  ~: x3 X9 A  Y
                5 t1 `1 d0 g; U0 c0 [% V9 T" \, `5 Q! ]
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);8 T& o  l" P& B: d3 t
                UF_OBJ_set_color(cyl_line,186);
6 b9 c3 \) q* T7 V                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型! C$ \2 B7 K+ r% {7 m0 f& s1 z
$ K  N9 o$ O1 k1 n& g* a/ Q/ l: V
                UF_CSYS_set_wcs(user_wcs);
$ A# H. l0 {' m, R                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)8 ?% p  K- K4 w/ R2 H

/ ]( C, x. W" {$ n+ a, y                goto l10;
' k6 \9 ^6 W, [; I0 t5 U3 W        }+ D5 V$ J$ e) W: {

& g6 l/ K9 F5 K3 S4 T1 R$ D2 p
        double WCS_pt[3],center_pt[3];
3 ^) Y" }, `9 W0 J        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
# J9 m  d! l. b" }. W1 r+ C        UF_CURVE_line_t Xline_coords,Yline_coords;
$ \; k: Y& ]6 i7 @        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
! ?6 g' C) g6 l: i# `        + o  _3 i$ b7 z3 W& ~
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;4 A; {5 w7 x' N( \( g
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;9 b- c7 x$ K$ Z2 T, h
        center_pt[2] = WCS_pt[2];
( Z  ~1 r# C) O
( H4 U7 T6 i* G+ V2 k
6 e) @, ^) R8 @. U& G* \        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
; w$ V# X4 Q& d9 z/ m: m; c8 \        Xline_coords.start_point[1] = WCS_pt[1];! A# q# W4 e6 B& {5 G: v3 j4 W
        Xline_coords.start_point[2] = WCS_pt[2];
/ n  t3 o3 V* D# b0 q- }        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
; x( ?- d5 R! E7 k! O5 v//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);% L7 s  r7 X* `! Q6 c0 q* s' K% p

% B! ^* g( H7 A3 @; z# O. ~2 d        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/29 \" L. R+ i5 `1 Q& s4 J
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小1 }3 [7 U, M3 I" Q' F( a$ ~
        Xline_coords.end_point[2] = WCS_pt[2];
% K$ y, q% H. _. L- }        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标2 L6 r0 _- _2 h7 {( j
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
; [/ ^8 N; i! ?  B- @% h" S( }" f3 @2 D8 [5 k" e% M  j
        Yline_coords.start_point[0] = WCS_pt[0];# X. v$ A5 K" i, D) ?3 ^
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;' y: |5 t4 N9 ?7 V& j
        Yline_coords.start_point[2] = WCS_pt[2];
0 E1 q9 l/ h8 ?  v0 j        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标: M  u, H$ f; W: u) b  U8 g
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
6 _3 I& C7 S5 c7 U6 ^5 F- N
# h( {5 O; Q! r9 t7 m        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小) b# q' s3 i0 @  m7 F
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
  X. i" L( m. r4 C- B7 Q6 H/ }1 Q: H        Yline_coords.end_point[2] = WCS_pt[2];, @4 h7 d5 g) g8 S& p+ E9 `6 [4 j
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
: W. x; l$ D  T3 I$ |* k* k. \//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);$ U! O& U& C- \0 {1 Y' X
        , N; W6 ^# b: h, C! m$ \6 w. s
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线( z. g6 }& Z4 h6 ~' ~
        UF_CURVE_create_line(&Yline_coords,&Yline);8 }  ?# p) O1 z
        UF_OBJ_set_color(Xline,186);        //设置颜色
! l& F: v! A: j" N: c% {+ z- o, k: M        UF_OBJ_set_color(Yline,186);" D0 ^0 z/ n+ O/ I2 [
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型* j* i7 a7 W5 G, [6 T
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型; r, z" B  }% W* H: b7 A3 J

* r: H1 j5 ^8 t5 A2 m        UF_CSYS_set_wcs(user_wcs);6 B7 P0 k. x) q; |" v: R5 f6 B" ]
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
* ~. l5 [( T8 q0 X3 F( r8 E, \        goto l10;! u- S; \. z/ A9 }- A( t# W  n

# C4 i9 ?. g1 ^' M. r. x}! a( S5 d6 S8 ~# ?4 ~9 g: o, K, P

1 p7 Y8 ]" W' k  X8 q& aextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
" g) A# {1 m' W/ w7 Y{
- k; }7 b/ u0 a  I5 {. |    /* Initialize the API environment */
5 k4 v0 w& E$ t6 l6 i6 j0 \; r1 F    if( UF_initialize() )  D- y( c) g) N
    {
( _6 A1 Q2 y7 X& H; W        return;+ ^2 O9 V  N& C
    }' Z! q( l. d, a7 ~7 G4 E; E. H
+ F; y% f( \6 r3 R
        Create_Center();# p( l( Z5 f# j* u4 L
3 |0 L% b* r4 z9 Z  Q" t! z
    UF_terminate();
8 ^  Q) n0 K- \}
$ A# I8 Q( D% h! E2 \& S+ j+ a& N2 C3 ]9 v
  E: w- {# S) V7 b( v( @. W
extern int ufusr_ask_unload( void )3 {1 P& |: U0 H
{
/ R: W. F# h) u& R0 T    return( UF_UNLOAD_IMMEDIATELY );$ ^# B# m& U  \0 H, S' A
}
" w7 _3 Z" ]4 I% J8 V2 L
; V: r9 i* l( [# s/ _, c5 x3 ?8 b" n6 V

( n- f' s9 t9 u% H, ?# E/ i. b; f! P4 r* U
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* P- L5 S5 y3 O/ N
呵呵,终于写好啦
& p6 |- H( W: s6 z
不错啊  
上海点团信息科技有限公司,承接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, ~' |# Y# |" ?: O: ^- {( D) ]0 A
老师多多指点才行

7 @$ R. M# g* b后面把 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二次开发专题模块培训报名开始啦

    我知道了