PLM之家PLMHome

 找回密码
 
查看: 2930|回复: 1

[资料] 使用UFUN进行UG NX二次开发: 装配设计技巧及步骤

[复制链接]
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤" L& q  O( [$ c- u

& v% H5 {6 U) v+ _

; j  \6 {$ y( h5 \. j1、装入部件1 ~8 ^3 V1 O, }
通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;& Y) F$ t5 ]4 J+ |' s9 s
+ K' W5 G& I* M5 J/ m. C
2、创建配合关系4 i% Z5 g" o* z& o/ n
a.通过函数UF_ASSEM_init_mc()初始化约束;3 w0 y7 L: A$ d* K& c- d
b.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;
" G4 R& @3 P0 U0 q) ~4 o' g1 c8 [装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
) [9 P+ R$ G( Y. V+ U1 D6 @  Z7 m/ dc.通过函数UF_ASSEM_solve_mc()求解约束;
% j, Q- G+ F+ J" ?* q3 h  ^$ kd.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;! b8 z# ^; n3 y4 B3 a; T
e.通过函数UF_MODL_update更新模型。& x; b  a! r  R1 l5 `

9 R# y$ Y1 `5 C3 j' u5 O
  1. #include <stdio.h>
    " h! t/ u# R# ^7 ^. n4 I" h

  2. / I1 l2 d9 l! C2 c3 D: t
  3. #include <uf.h>7 H6 d: m# ^5 C- r
  4. #include <uf_ui.h>
    3 m0 |* A( @; u% h
  5. #include <uf_obj.h>2 x" C' X4 J& b; q+ s$ D3 M
  6. #include <uf_disp.h>' w$ m/ {+ x; t' l: }- R, n1 Z1 i
  7. #include <uf_modl.h>
    & l/ P: }6 m/ P& l' F& O# ?! o
  8. #include <uf_part.h>
    1 }- r, M' Y0 E
  9. #include <uf_assem.h>
    & ^1 M( V  V0 V& v5 a

  10. / r; _7 j5 e( d& v- o, K# s$ Y# _
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )
    ! u6 G3 l" q  p. Z& b
  12. # E# @9 |( t; I! p% C% y
  13. int report( char *file, int line, char *call, int irc );
    & n4 ~3 S& z% _8 W/ h8 P! y
  14. void DoAssembly( void );
    1 `8 I( d: t, R6 C/ I7 D

  15. $ x0 J% a5 H( b9 E. l/ T( T' @; g
  16. int report( char *file, int line, char *call, int irc )' @9 ]* S4 F* x$ ^
  17. {$ @, G. J: U' H4 U6 L# n
  18.     if ( irc )
    ( L& I0 q5 E0 ]0 |4 K0 v
  19.     {$ ~) S  ~7 K0 G+ ]
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];
    0 x* j+ [9 `: y" a- |) x9 ~
  21.         char msg[ 133 ];: P1 t% L! a2 Y/ d% W
  22.         char fail_message[ 133 ];
    9 {& ?& i% |' x* e/ H" w/ ^
  23.         int  len;6 N1 E1 x  ^+ N/ a

  24. " O! p# l+ F7 s7 Y, x
  25.         UF_get_fail_message( irc, fail_message );
    , O6 F; L! m( H+ t7 B

  26. * a5 `3 V: A& S9 n8 F/ Y
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );% [6 F9 z/ e( V: G

  28. ( g2 T$ g, g3 f- D: j
  29.         len = strlen( err_msg );
    9 {% T9 }. Y$ o
  30.         len = ( len < 131 ) ? len : 131;
    4 w6 ?3 M2 {7 I- d0 M5 d
  31.         strncpy ( msg, err_msg, len );
    % x! `6 m+ }: `5 H
  32.         msg[ len + 1 ] = '\000';. W0 V, [8 U$ q: q. t

  33. $ `4 }9 Q* O' p
  34.         uc1601( err_msg, TRUE );0 r% y1 X1 R+ {1 N: ]. ~2 P
  35.     }" S; a$ N/ ~) V) U! s. l5 q
  36.     return( irc );, s0 K. a, l: C4 Y, H
  37. }
    0 f3 Z' D. L  N" ~4 Q8 d

  38. / `$ G- n. h1 M) x0 j+ u: d
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )1 b- p9 B" z1 W1 J( |
  40. {! O  G& E2 y- y+ s  ?! G- B1 b
  41.     if ( UF_initialize() ) return;
    ' C+ a- J9 b7 }( w( F6 y6 M! j
  42.         DoAssembly();% d1 M. ]( y6 J* Y0 O
  43.         UF_terminate();( [7 _) ?, I$ |" S3 g3 V
  44. }
    0 T7 U# ~, W; g: J" F
  45. 8 b# x. f, A0 Y
  46. void DoAssembly( void )% m7 d, H. m6 c0 P$ z/ m4 `
  47. {  ^1 B, _& q  ~
  48.         if ( NULL_TAG == UF_PART_ask_display_part() ), S% r# w$ x& Y* p+ q
  49.         {
    5 h2 y' Z( ^; s, B4 N7 f
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );
    % k; b3 p+ \) U5 J0 X! K& u
  51.                 return;/ h- J7 }7 z7 F9 `: C+ n9 j7 [
  52.         }0 p, C9 R  Y; t8 H. R4 b
  53. / j% b2 m. ?5 J1 T( _- p# A
  54.         tag_t tagInsCyl        = NULL_TAG;# J9 Y+ ]$ j8 x  C
  55.         tag_t tagInsVBlk= NULL_TAG;! C) t6 E" m" h" x' d1 H5 m
  56.         tag_t tagOccCyl        = NULL_TAG;
    8 x. a- c; `( d& x
  57.         tag_t tagOccVBlk= NULL_TAG;- [, @1 E: [) o9 Y$ X: X/ r; E( U' d
  58.         UF_PART_load_status_t ErrorStatus;9 x" h: T! d7 Z8 _" b" f: S4 _' g
  59. 1 c/ a/ W7 }: m$ i" E6 ^# l1 P
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };& s- K6 T; ]) n: k$ T* e( a
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };
    1 r0 `& @! i8 W& j

  62. 5 o4 P( ^: O) S: b! u8 w
  63.         /* 装入部件GB2208_80_Vblock.prt */
    8 y+ f# A) t; N8 o: x, ~
  64.         UF_ASSEM_add_part_to_assembly(
    ! n( D2 b& u. ~/ b# I0 i$ E# K
  65.                 UF_PART_ask_display_part(),+ Y2 U) |6 w+ }. l, P9 W
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",) @( |1 V9 }7 O2 e7 L) k
  67.                 NULL,# G' T8 F7 q# p9 ]. Q
  68.                 "VBLOCK",
    7 Y! k: s; B  C( V8 g6 [  F3 q
  69.                 dblzOrigin,, ^+ {3 L! |- E# [; Y7 R
  70.                 dblzCsysMatrix,
    - f; i7 e) s1 v: Y6 M
  71.                 -1,
    2 |1 `' G5 B# d! l
  72.                 &tagInsVBlk,* }- E# [- h; t
  73.                 &ErrorStatus );# J5 ]1 m3 D5 [9 F
  74.         /* 装入部件Cylinder.prt */
    . p! s6 i/ U# l& P8 l" J
  75.         dblzOrigin[ 1 ] = 50;
    - s/ [* D+ {( b9 R# R" a
  76.         UF_ASSEM_add_part_to_assembly(6 S" J8 {7 F( z. V: e
  77.                 UF_PART_ask_display_part(),  w% y$ E5 ?7 \4 G, {/ o; u- O
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",, E# l/ i# Y/ p, S
  79.                 NULL,- p! [5 W2 i1 d: k& r( r. ^$ N7 {( P
  80.                 "CYLINDER",
    0 n& @* O% S7 q: q" b
  81.                 dblzOrigin," {+ f& o5 X6 `8 w+ T
  82.                 dblzCsysMatrix,; R# _) C' k/ c
  83.                 -1,
    ; [% j$ Q: K! F! {
  84.                 &tagInsCyl,
    1 E  `4 Y- t+ C, k3 b8 F
  85.                 &ErrorStatus );7 H# M' n6 `, b0 C: y
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );* O2 T; ]& g/ z' s* u
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );
    1 f. o/ J( B+ L! g
  88. 9 h4 j$ u0 }+ @  W
  89.         /* 创建配合关系 */
    % N1 B9 X, b' p2 F- l( j. y4 Z" l
  90.         UF_ASSEM_mating_condition_t McData;
    2 T- k# b3 @1 o# h/ I2 P, m
  91.         tag_t tagObjectFrom                = NULL_TAG;
    ( F+ Z" a4 [1 |$ s* A0 Q
  92.         tag_t tagObjectTo                = NULL_TAG;3 A8 W  @  Z$ b
  93.         tag_t tagPrototypeFrom        = NULL_TAG;
    % R: N$ v* x) a! A
  94.         tag_t tagPrototypeTo        = NULL_TAG;
    3 U0 Z9 a6 x0 i# {3 D4 x% j
  95.        
    1 v& f2 Q+ _( j0 G  L4 o( b
  96.         /* 初始化约束*/8 [. A4 b1 b  ?( @/ e( f; X0 s$ n
  97.         UF_ASSEM_init_mc( &McData );: z& j2 |- C0 _6 }  ]/ P

  98. 9 x  Q& M/ X% y* I
  99.     /* 定义约束,构造配合关系*/
    / Y3 W8 V. K0 i4 F3 [0 E
  100.         McData.mated_object = tagInsCyl;% _7 Q& b  {+ [; Y. B$ ^4 V
  101.        
    " v5 U, f$ p6 t; B7 C8 d. v: o
  102.         McData.num_constraints = 3;
    ; ^2 H1 a# n# ]& p) n! T9 d! I1 {
  103.         McData.name = NULL;$ F" {" J: f: {1 ^1 [
  104.         McData.user_name = false;7 a3 T. T! f8 e" V8 H! |2 _( B8 [  `5 v
  105.         McData.override = false;7 v7 S6 Q; W4 h0 p! J
  106.         McData.suppressed = false;
    : k& D) q/ z  b
  107.         McData.implicit = false;% q2 c& r+ I9 t+ M4 N) J

  108. ' `* A, X. ^3 k7 l  A8 F$ C( g
  109.         tagObjectFrom        = NULL_TAG;/ D: M; u: _  L; l& l9 q
  110.         tagObjectTo                = NULL_TAG;9 Q3 Z8 I7 a1 h5 s6 }; L" \
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );* E3 r. o3 M& r7 G) n  s7 v! K8 l( T
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );
    4 [) B1 e% R8 P
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    * _1 D! I& E  r. T) m/ a; f- h
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    . s' s( \% ~/ u$ q/ ?% C0 W5 `8 E3 N
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;
    " R) Y: u( L6 [' V: w* l
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;0 f2 O$ l7 i: |; h9 n1 |1 V
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;
    8 v( A: E  N8 k% A! o
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;
    8 J1 d4 J# p2 m# t8 ], w7 d* D- \
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;8 w; v+ _% g$ o& W* i8 O. @
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;" ~1 C9 n4 N& l1 i  u$ [  X7 {+ @
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;5 g' k2 y7 ?" p$ b) V$ Q0 b7 m+ p
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;% T5 A1 s0 b6 u/ _- C7 p* W
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;
    5 T! h6 `; i4 ~6 M
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;9 F# Y8 P- r# I7 ~  E. X0 m& A  ]
  125.         McData.constraints[ 0 ].name                        = NULL;4 c2 f" d! l) m3 D9 x( |2 d
  126.         McData.constraints[ 0 ].user_name                = false;
    0 \+ Q- b2 i6 y8 K
  127.         McData.constraints[ 0 ].inherited                = false;
    1 B' a/ ]9 _6 h
  128.         McData.constraints[ 0 ].suppressed                = false;! X3 D* A4 o" H2 J9 S
  129.         McData.constraints[ 0 ].has_help_point        = false;* e) X+ `0 ]) f
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );6 V+ u) C$ ?9 X. u: B& j
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );2 l/ ]9 `1 j. F8 B, i
  132.         uc1601( "这两个面进行相切操作", 1 );
    # z# y" i% y3 P' p" S6 r
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );+ W9 T! T1 z, N- X
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );
    7 Y! N  a" u$ y8 q, Y
  135. 3 {3 t/ o3 B2 V
  136.         tagObjectFrom        = NULL_TAG;
    6 q4 l. F- q$ C& u
  137.         tagObjectTo                = NULL_TAG;! H9 D: ^1 h; ]% n. y6 L2 s
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );2 f  \, M, q+ K. c, Q1 z
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );
    1 z7 L- y* [) s' |6 }4 }
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );" `/ O- R( @8 p' A3 \; ~6 f8 s
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );% ~1 Z! Q; }# ~$ u0 m6 V
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;
    ' e& ]+ {/ B, D) E% S5 G0 Z# C
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;
    ( N: J; Y) w4 Z) A0 j7 W
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;* A4 i# c! q: e) j
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;
    6 w  h& Z: x4 ^$ G, @4 ?/ l
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;
    ; j! }0 }2 e0 n) e3 ^5 R+ Y& Z9 V5 R
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;/ J6 {' Q( `: ?5 {8 O2 _3 q
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;3 h9 T2 b. @4 N! |
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;
    : r6 C! J7 ]) T1 m5 H
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;' b4 m9 F# i2 H% w6 l% U
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;
    3 r0 F2 j9 n( Q/ X- Y) [5 p7 d
  152.         McData.constraints[ 1 ].name                        = NULL;) _: B3 M8 a0 B* I& B5 E$ S) H4 [) S
  153.         McData.constraints[ 1 ].user_name                = false;
    & a4 ?3 V' u3 F- W% n) y7 x
  154.         McData.constraints[ 1 ].inherited                = false;
    ! N4 u% a6 d) X* M9 f4 h2 G
  155.         McData.constraints[ 1 ].suppressed                = false;
    0 i. y  v) n7 h& W, q8 C4 w+ X' b
  156.         McData.constraints[ 1 ].has_help_point        = false;/ B) S5 G9 u& v6 M
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );, `7 |/ B1 ]+ z4 S+ p  l
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );3 c" H+ c% U( u
  159.         uc1601( "这两个面进行相切操作", 1 );3 u( p$ j4 _, P4 t* i
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    & ?- H+ ?7 g+ S$ g# R
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );$ f* ~) [' f6 Y0 O" `
  162. % P1 {  v) Z% K& d8 B7 W, D: r
  163.         tagObjectFrom        = NULL_TAG;& C/ e5 L2 R: E% {( E6 o9 f( b8 `
  164.         tagObjectTo                = NULL_TAG;
    - ^; Y$ v9 {: L" P0 a
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );
    / H# s- l& j$ s; Q  I/ |# Q( S+ Y8 s
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );
    4 j% _4 M9 E( R
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    3 X! e# N6 A) J' N6 I
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );* _8 R- B" b% q; v/ ]" r
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;
    % |3 [3 J' C) A
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;* d. t3 q- s7 Q: W. j6 i9 Z  ~  y
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;, U) G6 K/ W6 W+ m* _
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;2 W: {0 S: b- X0 q0 |  h
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;
    7 f$ `  K+ P$ U% U, z( y
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;7 _- b( ?. c( U' G
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;" m, P+ h/ ~: B2 y: n  W0 i
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;! I( T8 ~* S: m6 I8 L
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;1 S0 A/ c7 }' J2 d/ J5 t
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;
    % t( J9 a& W% v" |# t; g+ P
  179.         McData.constraints[ 2 ].name                        = NULL;
    6 d+ D. T- K  A5 x: c
  180.         McData.constraints[ 2 ].user_name                = false;8 `, G0 u3 w/ H' c
  181.         McData.constraints[ 2 ].inherited                = false;4 M, T2 W" V! J" y' z) y* V" a
  182.         McData.constraints[ 2 ].suppressed                = false;
    7 A* u4 y9 ~" T" |
  183.         McData.constraints[ 2 ].has_help_point        = false;
    / O, s- ~7 o/ H5 v+ H/ r& f
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    + R; {& A! ], W$ c, ~3 E+ E
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );, x: P, r, i, @" A
  186.         uc1601( "这两个面进行对齐操作", 1 );
    ; [  z, M# f" f6 G& ~( c: {# Z
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );# R# U% c& U1 F5 Z( m& d' N3 m0 x
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );
    2 E: ?. Z0 n6 O5 h! a

  189. ( o2 R( ?. F7 C) J
  190.         double dblzTransform[ 4 ][ 4 ];7 u( P+ Z% N$ W+ c- Y( V
  191.         UF_ASSEM_dof_t Dof;
    ; R! ], C- Q" {  b, Z+ W
  192.         UF_ASSEM_mc_status_t Status;" t: _/ C- B# S4 n9 r% F

  193. 3 b# a9 u* e: I
  194.   |9 ^' f8 X( _$ X
  195.         /* 求解约束*/" k; Z7 V9 d- z0 E$ V* h: W
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );
    ; R8 ~% ]$ S- T. C
  197.         if ( UF_ASSEM_mc_solved == Status )+ z2 S/ k( p$ N- C2 O+ s% F
  198.         {4 {; q% y+ z/ |( i; U( F
  199.                 uc1601( "求解约束成功!", 1 );
    ; \- |+ `  Q- Z7 e4 R" U
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;
    - s8 W- U, b: Y5 o
  201. ( G" \0 e* ~) z8 E, _
  202.                 /* 将约束应用到装配体上*/9 W2 L3 ~8 g+ W. e$ b5 c
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );) X% i2 p4 Y9 J- y
  204.                 if ( UF_ASSEM_structure_ok == StructStatus ) # A* f2 f6 g7 l) [' c5 F6 X
  205.                 {+ _9 @0 p# K3 m, d
  206.                         uc1601( "应用装配成功!", 1 );* e: Z( \3 |  L/ B" U
  207.                         & C( N: L9 h; i0 N' V* ^' t
  208.                         /* 更新模型*/8 j" w& f% C  @: [+ M3 v
  209.                         UF_MODL_update();/ y% P3 k+ \4 O
  210.             UF_DISP_refresh();% I& i2 U' I/ M2 v/ `: o
  211.                 }
    ) V+ w* I; c+ x8 @/ D0 O
  212.                 else uc1601( "应用装配失败!", 1 );
    . D$ h) k0 b; j/ A5 U. ?
  213.         }
    " @, b  ?6 T9 m" h
  214.         else uc1601( "求解约束失败!", 1 );
    * T4 e' o5 c6 h$ H6 Z5 O
  215.         }  `2 {/ v: |. k$ W4 T  Y" V8 D
  216. }
    . e4 w9 p* c+ y" d* a
复制代码

  M0 b$ ], l6 I. f' h$ A) E4 [
9 [/ ?* r7 {  [, X* Z; x" e# A% |+ v& X1 `% Y" s8 q: V5 ?" G" k

( w/ ^, O# E0 T/ ], H  Z: n
0 {7 d7 g1 C2 Z( z3 K4 c
" G6 e3 N" y. h+ j
7 X, S& w' D6 P% @
没人顶啊

GMT,

Powered by Discuz!

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表