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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
1 {) ]% j* {9 ~3 j8 {$ O9 p
#include <uf.h>9 a6 [4 J( b6 p
#include <uf_ui.h>
* a. Z2 F5 }5 |#include <uf_exit.h>
5 F: M9 l0 }: p7 [) V9 z* |
  N- J  U- `4 o6 H#include <stdio.h>  b- [  _5 x% U
#include <uf.h>) I- B3 t) p/ A+ x4 f
#include <uf_ui.h>% q- p& V: P1 R6 X* Y! {
#include <uf_exit.h>
8 L, {( o, [, S- j' n$ [' p% o#include "uf_layer.h"
9 H" ~# g3 d8 i& q8 T#include <stdio.h>
) i! y" G9 _7 E# G" t; m) Z#include <uf.h>
6 P9 o9 s$ n8 _& R6 P6 C' F! U1 P#include <uf_modl.h>$ Z' e0 B8 z/ F/ V. j' L+ [
#include <uf_curve.h>
' _+ x; V/ j6 |#include <uf_csys.h>: \7 B6 {( e; n. p: w/ H- Y- f
#include <uf_object_types.h>
( ~4 ~) s) Q8 W% R: u#include <uf_ui.h>& j" Y( l7 J# M' l
#include <uf_part.h>6 Z+ \& s# `; p% n; m' I3 y
#include "uf_obj.h"% g  m7 ?4 ~3 J9 q3 q5 M
#include "math.h"
& Q- M- h2 r! K% s# }: V4 R' u1 N/ _) ~2 _6 M9 _  o' `
static int init_proc(UF_UI_selection_p_t select,void* user_data)" i) h, `5 n$ N2 `
{$ O7 r$ L7 z7 R8 ^0 E2 M" U! h
        int num_triples = 2; //只选择一种类型
" U) o# C. S! u1 D$ U2 Y3 R        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,+ K% {" F, F% P2 o: P: ]0 p
                UF_bounded_plane_subtype,1,0};
! b2 \+ M7 }  U8 ] if((UF_UI_set_sel_mask(select,
4 `( Y0 q7 P: n6 o1 h  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,2 l( F! G% a- W- h6 g- ~  c+ _
  num_triples, mask_triples)) == 0)$ L3 ~- h/ [  c  ~6 [
{/ s( L+ p1 W2 Y! n8 a0 d6 r5 ~- o
  return (UF_UI_SEL_SUCCESS);9 n+ d* Y( h. Z' P5 U
}
% V7 z/ u1 o% e) ~ else& e/ |; \$ ~, O% H- A( R" j
{
  l* w( @- q& e' |4 t* @  return (UF_UI_SEL_FAILURE);
* f, w" C; O# M, z- M }
; b. }1 a3 c2 Q6 J& W}
! O" n+ ]  s1 \9 c; A- ^' G1 t% V! ]
( C  j% ~& F2 h/ ^2 y. v
static void Create_Center(void)+ c2 Z" h' C2 F( F( F: \
{2 t" Y9 e7 ?" y- x
        tag_t user_wcs;0 P' w# g  i, A: \1 n
        UF_CSYS_ask_wcs(&user_wcs);5 I; K1 Z9 }2 k
        char cue[] = "简简单单:请选择单个平面";4 w) U- [4 e6 H/ n/ X
        char title[] = "简简单单:对象选择对话框";+ U1 s% d, G. _- p7 h" x% @
int response=0;
! a1 `4 h5 b+ }" t% A! _3 D7 _ tag_t object;
. y. V6 o) Q( V5 t int count=0;
7 f5 {# @" K# {" M" h* n6 d double cursor[3];
* E2 M& W. @. L: L tag_t view;
: S8 N+ u8 S% i2 K3 n/ Y0 cl10:
  S* {# p" }2 }8 | UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);! j) g, g6 [5 e  V& y
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10! w. k9 C, b/ h
if(response==UF_UI_CANCEL) return; //如果点取消就退出9 a, F5 _! E+ t0 m" f9 {. g
UF_DISP_set_highlight(object,0); //取消高亮显示
! ]8 j3 E7 @% h) H* a
* ~2 q3 f' Z; o3 ~; a  int type;' _  Q0 O" z. p3 }" Z  m* T- G
  double point[3],dir_z[3], box[6];' h1 R, d2 r& T( U) p  |) P
  double radius,rad_data;5 ]& }! `: g: l5 a8 w8 h) \
  int norm_dir;, m: b) [3 c# \& j
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
5 E; J5 F) c2 d/ {/ k
! p( {7 d! Z+ u& N3 L: ~+ w4 C
* W: z% `! {- c+ b" m" Z! m  tag_t matrix_id;
  q. ~) r6 B7 N8 v  tag_t csys_id;
+ t" Y; m" z7 W$ K) ?  double matrix_values[9];6 m; i4 ^4 J0 V$ {$ n8 D  ]+ R
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID( n6 U/ ?* B  U' }- t1 f9 _& [
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
" t. O5 y; f$ I' u4 {7 L% N, E( Z. F  if(norm_dir<0)        //判断面的法向是否相反4 m% E$ S) t  [, k+ D" S3 K/ D
  {3 z" g4 {- J6 \* @* g' K
   matrix_values[3]=-matrix_values[3];
. d" A0 a7 h3 d/ S   matrix_values[4]=-matrix_values[4];
' O$ H# i% G: K$ R& e4 r7 U   matrix_values[5]=-matrix_values[5];
4 ?" }# Y& `3 x4 `3 Y1 r: N$ `  g   matrix_values[6]=-matrix_values[6];
0 Q  E# P; }, B. o( t2 @   matrix_values[7]=-matrix_values[7];3 W& D( }, x4 g9 @8 Y+ v
   matrix_values[8]=-matrix_values[8];
8 T# s' N1 u1 r" C* y   UF_CSYS_create_matrix(matrix_values,&matrix_id);  `6 _% V( o) A
  }+ S" k6 m# L3 d. `/ ]; t, m
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
% ?2 z7 R$ A5 [- D( |; ^8 m  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
, {: l5 s) H0 d UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动). F, C* y: A2 y# _1 F3 |2 Z

" X- {, n. k( T. ^/ F        double boundingbox[6];( X" }" ?: ~8 d' w/ ~  t
        double boundingbox2[3][3];9 d9 c  n8 p- q+ k* E
        double boundingbox3[6];
- v7 M, h/ _( t: t9 ]        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
4 Q- O5 J! k% j9 }( l" G
0 \( w7 W: c" O9 \4 Y  A        if(type ==UF_cylinder_subtype)1 A3 \3 t( h. M% c- K
        {, j1 H8 S$ I% l( x' l5 H
                double cyl1_pt[3];
9 A: D+ @% t2 m$ Z  ~& A                tag_t cyl_line,cyl_pt;
, T" O* H; i% B- y) N                UF_CURVE_line_t cyl1_line_coords;. `- f2 Q- H$ h5 O2 j% t8 y3 g
                double WCS_pt[3];& V: C6 Q' |( w7 E) s) ?
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs4 H( h% T, E& q! K$ m/ n2 _
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs/ _: t4 Z: P: C1 Z. v1 G
                cyl1_pt[2] = WCS_pt[2];) ^" f2 s, j) w2 _( a- z
3 D3 O  Z* z2 Y6 m. ~% U, z
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
* w$ k- F3 l5 U- Y4 ~: J6 N                cyl1_line_coords.start_point[1] = cyl1_pt[1];9 w) k: o4 }$ e  x- c
                cyl1_line_coords.start_point[2] = cyl1_pt[2];& g1 k) E$ O+ w# `/ h6 i
2 I5 @5 j& P8 z2 O/ l
                cyl1_line_coords.end_point[0] = cyl1_pt[0];
+ t" N. {( |5 i' M                cyl1_line_coords.end_point[1] = cyl1_pt[1];$ W5 ]& J3 `" r, }. l+ P$ j
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];( X2 K, m" M( m4 ^+ u1 y# O
# k6 F. s. e. j
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
2 m+ \' Q1 C, Z& _                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标9 d! q- W4 }( C) K& r7 h
                5 d$ _' l" G# U$ A
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);; y& a4 n0 c/ C
                UF_OBJ_set_color(cyl_line,186);
  a0 P, v% s$ h7 V! V2 N6 A3 O$ A* F( o                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
& G; Y) k- B7 {* M" _7 K: e3 t) j" k3 c6 [9 i: G! P" A
                UF_CSYS_set_wcs(user_wcs);# v8 H1 A1 A3 V. }8 W9 y% B, [
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
3 o1 P# \4 O5 B8 t
9 ?: n( Q: ~9 R5 g: a3 Q1 |$ {                goto l10;
' O3 X3 O: b- l5 @        }
) p  y0 K) r+ o  T  {- T  D7 ]3 ~7 c- H: D( ~1 K
; i: y* J0 S- y  w. x3 O
        double WCS_pt[3],center_pt[3];
) R$ `! P5 H1 x* t" `& L        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;: n3 s; [7 \" X( k4 L, c& m  p+ X
        UF_CURVE_line_t Xline_coords,Yline_coords;  R: N( J4 Z( g, _/ A3 r) n
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
2 t+ k0 U! c+ |6 ~! r+ Z  `* O       
1 V; M6 C( F) H, F0 a7 x* o/ V        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
. i1 s% f, d0 C( Q& E. O  m        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;2 P0 ^' y1 M4 @1 p) \) [1 f% R
        center_pt[2] = WCS_pt[2];
9 E) l0 x4 w( N& ^4 d1 Y/ z3 U4 k0 _0 S: |( M! k

6 d) [% F$ v7 q/ o& b4 C        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
; X2 O. k. C0 Q' D# n/ [8 s8 i0 n        Xline_coords.start_point[1] = WCS_pt[1];
! e' ^3 t1 m! f& W7 w0 b        Xline_coords.start_point[2] = WCS_pt[2];
1 I  v( K5 M' {' H: q- X        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标% \/ k3 \1 J! _/ N% i
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
& Q. Z0 Y5 T9 U" d; \6 w/ `! c& t9 \
6 D7 _; i. e$ E' |5 Q  E        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/23 h& Y/ @4 D" w
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
# l  ?( X* j/ g; P" J# I( O: X        Xline_coords.end_point[2] = WCS_pt[2];  q5 ]& S5 v4 h) B
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标3 F2 c* K# K2 g+ v* S6 v) J
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);+ D8 y. H" }  ^% Z9 b

3 l2 R4 X# Q0 P3 D        Yline_coords.start_point[0] = WCS_pt[0];
" H/ z1 {/ X& a, G) u        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;+ I4 O6 v: @7 K  \2 U# r
        Yline_coords.start_point[2] = WCS_pt[2];9 O. c$ M3 T" p/ S4 t) w* r/ H
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
& {4 e, I; E, T5 P! Z$ b9 N5 F//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);2 b1 O1 C' b( ~* I* R! A

0 `: q& B: {% C5 v        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小" H' ]6 Q! [! z; o5 l' Y$ S/ s
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
5 P# a2 y& i0 E, I  }8 _4 Q        Yline_coords.end_point[2] = WCS_pt[2];- H/ C5 }2 s  e9 D" @- s( `/ Q
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标' C* i, M6 G% b; e$ s
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);5 g1 U# n0 ~$ R5 K# I) e; t
       
2 w( V; A6 b5 A" U1 ?        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线" O( q. H$ l: x
        UF_CURVE_create_line(&Yline_coords,&Yline);
3 T- J% o% L1 T1 g6 _+ n9 K" w        UF_OBJ_set_color(Xline,186);        //设置颜色
! Z9 L. b5 m6 d" d4 j        UF_OBJ_set_color(Yline,186);
; u5 y7 q) E. s' C        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
9 v5 L3 ?6 K/ I% d! b        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
. Z3 a) x; }( O& j
* g) F& q" A! H( J; _. o) S        UF_CSYS_set_wcs(user_wcs);+ ~$ @( O8 X& G6 w$ o% y! y* ?
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动). c+ [% o6 O- f2 A- D2 Z/ @
        goto l10;% s, V  s5 i9 C" R
$ F2 ~9 n, s# I6 h" b' d. d/ m
}# e" t, U' I. `# ]- C, O

) T1 @% h( k7 M, I! X; o9 Wextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
( Z6 V7 C% L% o6 z' ^{9 B6 X% [8 }. C# T6 b. [2 i  Q$ Q  R
    /* Initialize the API environment */: ]3 Y' ^: `( u
    if( UF_initialize() )) G: j# x3 T1 ~8 B, b& j% p! M6 b% r
    {
' j6 U. o4 J1 t' K' F  q        return;  D* u. t/ ~) |; v) }( n5 y" {
    }
) y, a9 }  E9 |' H3 Q' i/ v( }
3 _  N8 Y# ^$ z: F5 \8 p3 M        Create_Center();
. a+ ]6 r: H- A# x
# ]9 v! l  i7 |0 ?    UF_terminate();
$ {( t$ X( b- ?( }0 C}
) C5 Z: x# s  U" t" a
" ^$ x7 p$ I& Z; o; G% z. W8 L* i) ^3 B; I
extern int ufusr_ask_unload( void )2 g! v, n) R4 A8 c( g
{
4 N. S3 n! y& D: D2 ]8 S    return( UF_UNLOAD_IMMEDIATELY );
# Z) d. M2 o0 Z' F* J$ q5 Z7 P}% B5 o! W, _! V; J2 u# @

7 g1 ]  E) @; p: P5 r* Q- n$ H
. d* O) O3 c4 `2 Y$ i8 m
: V  v3 v( z& k2 ~: y6 q1 ^/ g0 @% N0 y! N9 ~/ M' h
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:443 @6 Q; E# s) t; P( I0 F
呵呵,终于写好啦
# K. B" U8 _6 O% P
不错啊  
上海点团信息科技有限公司,承接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
$ I# n: S: q: k% X  U- s. H$ @. {  x老师多多指点才行

1 O1 U# [2 Z+ n# W, a/ K0 C2 g后面把 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二次开发专题模块培训报名开始啦

    我知道了