PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

, A  H7 B% z; h#include <uf.h>
  A& p1 J7 s' y9 z! k: f5 U#include <uf_ui.h>4 b, }( W( N) f
#include <uf_exit.h>: Z$ x# `" V8 O' v- v0 g

  |3 ]2 A: P3 i#include <stdio.h>
2 @( d% q- O. \! J#include <uf.h>
" s# j; \. z- W3 [#include <uf_ui.h>
- u1 \' L6 J- c7 `! r/ Y#include <uf_exit.h>7 Y# c+ Z- F; E, a
#include "uf_layer.h"
' u4 R7 j# v9 }& W# P" u! p#include <stdio.h>, D+ S, e' I5 t/ D
#include <uf.h>
# @5 n0 B& b% J. Z- t# o#include <uf_modl.h>; W, ^* ]" r. {8 W
#include <uf_curve.h>% B9 t5 x! {2 w! N, [
#include <uf_csys.h>
$ [4 d* U2 c: Q& Q- _1 a) o#include <uf_object_types.h>6 j+ h# h" [' q+ ~4 L
#include <uf_ui.h>
8 \/ h! w8 I( o& i#include <uf_part.h>
. Y" _8 s  y8 b! v7 h; Z: x#include "uf_obj.h"
6 w. \& p, {5 q' T6 g#include "math.h"
, U. ?5 P4 _4 e& R$ N! m" U$ W& M6 y( f* ?. o6 o5 m+ q5 s+ {. ^
static int init_proc(UF_UI_selection_p_t select,void* user_data)
9 j% v8 K/ u# k{
* b4 i4 i" [7 o- A# c. Y  ?- c( W, S        int num_triples = 2; //只选择一种类型
/ T7 R3 f( t3 {: s' N        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
) `$ F+ }3 {4 c; j/ E! L: f                UF_bounded_plane_subtype,1,0};( `9 ?5 r1 V* s1 w3 q7 Q! A
if((UF_UI_set_sel_mask(select," P% w. c' i- ]0 ]: c
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,1 B$ l- ?5 q  L6 t7 Z8 t* G4 F
  num_triples, mask_triples)) == 0)
/ Y' Q' Z% V: S$ A0 P1 c5 T2 A: O {! r" ^4 ?: R  ~" W5 ?/ f- K6 w! h
  return (UF_UI_SEL_SUCCESS);- s9 }5 R1 F$ q6 C
}. b7 Q4 m, u: A* V
else
& T+ d, \1 U4 U+ l- G {5 ?5 Y, o& B  u
  return (UF_UI_SEL_FAILURE);- \' X+ ~% B2 C$ Y  u/ S3 n: d3 b
}
( `, e2 Q# E8 O; [; V: i; x}/ A$ p; [% e4 N3 f3 `# H1 O
; M# h" Z  f4 r/ M0 [" i* ~

" ~- B+ J5 b% D* }$ u4 jstatic void Create_Center(void)
' O9 {* T/ V: P$ o8 w; i{* C8 d* a" y& j! u, b; n
        tag_t user_wcs;
, l- [( t7 p3 s        UF_CSYS_ask_wcs(&user_wcs);
8 ~9 e' b% M# l0 W# z' k* \0 g        char cue[] = "简简单单:请选择单个平面";" r: M$ ?  E2 Q1 w
        char title[] = "简简单单:对象选择对话框";
3 z& n  A9 a: K3 ~& h int response=0;
+ h1 x7 Y2 i3 O2 B# j6 K* N tag_t object;
- \2 m* V: H/ }) O int count=0;
& t4 s& r. j9 y, J# M  \ double cursor[3];0 c, l% I9 U1 ]4 H3 o* s, N. [/ [* c0 |
tag_t view;: k, X* V% k- L
l10:  z' e& g& ?0 K2 D$ Z6 j
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
5 H4 f, E" Z' m- M- E if(response==UF_UI_BACK) return; //如果点后退就跳转到L102 h1 t/ ~- U) O! ~
if(response==UF_UI_CANCEL) return; //如果点取消就退出9 j  H1 ^7 u: U( K8 q* n
UF_DISP_set_highlight(object,0); //取消高亮显示# p, K* N7 u. ~& [
' ]9 m! N4 D0 ?% E
  int type;
# C% {+ B: Q0 G! A* R  double point[3],dir_z[3], box[6];
. O0 G- v5 e7 _: T  double radius,rad_data;
3 |( J% v' J5 L- w3 o  int norm_dir;( t+ g( |4 c$ w" A0 A( @
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向) Y- O$ J# i( ^4 ]/ c& v
. Y  y, ^. q4 o; a/ ^
8 x% U7 R3 r; q
  tag_t matrix_id;
# q2 k. r8 O8 k9 n% O  J  tag_t csys_id;
7 q* E6 b3 {0 T  |, x& m+ u3 p, Z  double matrix_values[9];; P  L7 c9 l/ J  A3 x# H
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
: n$ N' b- W$ {. q' [" L3 M  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
; P2 Y6 [: [) A  if(norm_dir<0)        //判断面的法向是否相反
* m' f3 L+ b9 Z& X! i  {
" R4 R( e. [* ^   matrix_values[3]=-matrix_values[3];
4 q4 ]  C/ Z1 o( P2 b   matrix_values[4]=-matrix_values[4];$ x. \: x1 `" {, i: d" x# O# a! M
   matrix_values[5]=-matrix_values[5];
6 M/ g; ]! O3 ?# z* {   matrix_values[6]=-matrix_values[6];7 P6 L+ [0 ~/ z) ?5 A, I) w8 {
   matrix_values[7]=-matrix_values[7];* A# J& l- ~7 P
   matrix_values[8]=-matrix_values[8];/ W2 B8 z! k8 A3 L
   UF_CSYS_create_matrix(matrix_values,&matrix_id);+ f/ A+ K, r/ f- \) E: D
  }
2 d9 n0 [* H5 i% g9 h$ {. Y  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
9 z3 h1 K& U9 o% b: |( u- ^0 Y  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)4 ]$ i5 n: t4 @6 j+ u( F; Q7 V4 F+ S! U
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)7 r+ R1 u+ B7 r% V0 p6 e
* a$ z' ]8 D' b( r2 u/ j
        double boundingbox[6];; F& M: q2 }; y' O9 M8 W
        double boundingbox2[3][3];. E( l# P  u" I" M
        double boundingbox3[6];4 V5 {/ w+ e7 N- e
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
+ j, H- B* ?+ o. Z. H0 |7 M, h
! N6 _0 v4 q; K) q# s5 E        if(type ==UF_cylinder_subtype)" x7 s8 z& v; ~) n, C
        {
& Q9 N% G  t8 c) w. }* r  w1 I                double cyl1_pt[3];
( \1 }, v3 v- N; i0 M- w                tag_t cyl_line,cyl_pt;
5 J& _5 [/ L& a; J; ?                UF_CURVE_line_t cyl1_line_coords;+ ~$ s8 f. q) w  r2 ?# V' L
                double WCS_pt[3];8 h) k: e3 F9 F3 ~
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs8 r6 ^# _% b$ b6 S- b4 A, z
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
" l0 H% ~" t. W. y9 Y- w                cyl1_pt[2] = WCS_pt[2];
" t5 E' C# |( ]+ U' `. A5 q
" D. _. r7 t- m' V                cyl1_line_coords.start_point[0] = cyl1_pt[0];$ G. F) @4 C$ b* p5 |& T
                cyl1_line_coords.start_point[1] = cyl1_pt[1];
- ?0 p2 Q- ^( r8 j# a                cyl1_line_coords.start_point[2] = cyl1_pt[2];5 r' F  I) D% o; E( J3 ^
: x% H$ q( m) R: a& V
                cyl1_line_coords.end_point[0] = cyl1_pt[0];
/ R4 X, m4 C) @                cyl1_line_coords.end_point[1] = cyl1_pt[1];; d: ]0 P: T  Z9 u$ e( x
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];$ Y; |( s2 e: m9 d
; ?) x1 T, C( P& R1 v
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
- m  t4 [6 J% A! _+ @                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
# E- s$ w' o4 Z* g1 h$ [* q               
: f5 R6 x$ q9 I+ n1 y7 {4 o                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
1 L& x: g4 t7 L3 l9 C, X% v                UF_OBJ_set_color(cyl_line,186);9 H- k  D$ L( T5 M0 M! b0 X
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型  _* ]" L2 O# N4 F
1 |+ |" \/ a1 y' v& J
                UF_CSYS_set_wcs(user_wcs);+ M* x- f: T6 W2 ]8 f, c) j
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)) F1 \; y; v& Z, C

, m% ^6 w& @, o5 |' d- R  K                goto l10;' j; j, A! a# @* f. S
        }( P; N( H/ O& Q# Q8 [

( r6 }6 e$ {( b$ \8 U  ]
1 J: m" y- ~: ^  P& \; H4 L% N        double WCS_pt[3],center_pt[3];
) U- i+ |- ?1 C& B% L) t2 n        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
9 s* `! L" {" u+ H) y" R        UF_CURVE_line_t Xline_coords,Yline_coords;
5 K; L) n: b0 q* [( V0 [9 o        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
1 }$ Z+ W5 \2 S       
  }: S' K+ A6 r; d3 r6 p0 N        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;/ q, S6 {" K6 H$ j
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
* @6 c# h' b6 v+ t        center_pt[2] = WCS_pt[2];
, g1 J' P3 v2 O3 W- x1 H- o  K
* A+ U% p. ~. Z! R' V) S
% ~$ @1 [+ P2 B1 M' M0 C8 ^. u        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
3 V% z6 a& O# }: c        Xline_coords.start_point[1] = WCS_pt[1];! b1 g: Z, [& \
        Xline_coords.start_point[2] = WCS_pt[2];0 E# C. o: R- q0 K
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
6 V# ?, `0 s) c# ~; E+ a1 \//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
" a' r$ H, g8 M  G, y
* ?, m. f6 A+ U        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/21 U* \6 @( b9 H6 m4 @, t1 \  ~
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小9 K- v$ m  s( w% L7 P5 J
        Xline_coords.end_point[2] = WCS_pt[2];/ j6 M# `* c7 ~
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标" |9 \# t/ f% T- |0 a9 `. U
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
3 e9 J" R' @( \6 w) o  s- r$ |. b* C) a7 G( D( l: g9 {$ H6 o
        Yline_coords.start_point[0] = WCS_pt[0];
# P. ~+ |) m. n        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
" h" D1 }# \: Q* O# V: K        Yline_coords.start_point[2] = WCS_pt[2];
4 p, Y) x0 b4 U  R/ i        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标9 o2 C# T6 i- P  H" H* q$ ^8 K
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);; L2 H9 x+ S3 u" L$ q, |# a3 ^7 W9 U

; w4 G" h* a/ Q  {5 e        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
9 K- ~' o0 Q" u: `        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
, ~4 V% ?$ V' F; k1 Q: ~; B8 J) ^! v  W        Yline_coords.end_point[2] = WCS_pt[2];8 ~4 \0 u% m4 j7 H% B4 M
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
1 E) Z+ e' B$ q3 x//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
" \6 i# X! U: I        2 `/ k8 }: P. {: i, R
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线) Q1 x3 |# J* N1 D6 i3 W
        UF_CURVE_create_line(&Yline_coords,&Yline);
9 W5 g! m3 o& @; Q" a* k9 [        UF_OBJ_set_color(Xline,186);        //设置颜色4 E9 o$ l! k( I+ a4 m: O+ |9 _3 }
        UF_OBJ_set_color(Yline,186);; n9 ~# _" g- f2 I. z, O
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
9 o8 T1 I4 _( z" _3 V        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型3 c6 Z- f4 p$ }+ x3 v6 @
8 T7 g) q* C# \! p
        UF_CSYS_set_wcs(user_wcs);! {' G0 {# X4 @, [$ m* v! w4 G
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动); N8 b0 `% v5 o( e) e/ T1 w
        goto l10;
( s, z) r5 t; b% [7 p" I
; l7 H4 g  O2 j! ?7 C" u}
3 ~5 n2 L8 s$ X6 _' d: v2 Y3 R
  I" A5 }5 ~& N% R; S# b- g1 oextern DllExport void ufusr( char *parm, int *returnCode, int rlen ); b% x2 P( n2 P1 y. Y; Q7 }
{
& Y* x/ a% j$ N! M6 N7 S% \    /* Initialize the API environment */
! D* P& M* i* W    if( UF_initialize() )$ D1 g" B4 z2 w  P2 |
    {  C; I6 j6 @& r1 F2 X$ p
        return;
5 ~) w( u" e% X& D) W% H5 \    }7 E# q2 F) R. Q. t
4 o9 G  e: K( ]" X1 f% l
        Create_Center();
$ @- n5 b4 y: y. l8 Y8 `' E! B" c0 {
    UF_terminate();; N: M- T' a: @' J& `( g: N
}$ X2 R5 W5 @( A% a  Q! M4 K8 Y( ~9 w

' i' C; h. c6 n6 u2 G8 L$ n. m3 |3 b' o/ r+ Z0 z$ `8 S/ z# _' d
extern int ufusr_ask_unload( void )
) z7 N- W0 q6 N( ]& s{
% j1 m) S6 y3 C    return( UF_UNLOAD_IMMEDIATELY );7 N& m0 z1 X; s0 W$ S: l/ K
}
9 v5 t0 v# ^4 h3 u2 T, T: O3 l1 O) E
3 C2 Y1 k4 v2 M4 p* H0 w" P/ W- w$ N5 R7 z. [" q5 X: i( \- V
: D3 ^; ?8 p. N& E, k4 q, B( R+ ?

3 v6 t7 z3 L) j' C4 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:44
7 r- E/ A5 o$ ^; x9 Q呵呵,终于写好啦
3 u5 H. T$ ^# D) ?
不错啊  
上海点团信息科技有限公司,承接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
* B. j+ f7 @4 X老师多多指点才行
. p( U6 o( t, K! w4 `' L1 V# x
后面把 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二次开发专题模块培训报名开始啦

    我知道了