QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 9987|回复: 8
收起左侧

[已解决] 求助:CAD中怎么能缩放到合适的尺寸?一直让这个问题伤着了……

[复制链接]
发表于 2011-8-2 09:52:32 | 显示全部楼层 |阅读模式 来自: 中国山东青岛

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
本帖最后由 694865935 于 2011-8-2 11:18 编辑 % C$ e. y/ ]- e6 _
  o5 x8 j3 Q5 b$ E8 `
求助:CAD中怎么能缩放到合适的尺寸?一直让这个问题伤着了……
0 r3 f( K2 d5 ^  求助,客户经常给一些PDF档改图(PDF档是用CAD转进去的),我使用PDF转CAD的软件转回CAD来,却发现图纸的尺寸变了,形装都和原来一样没问题,我试着改标注样式,但算不好比例因子,只好放弃。改用缩放命令,但这样又出现一个问题,就是X方向我缩放好了,可以发现Y方向又差了,套上没改以前的图纸,就能发现这个问题。试着用块来解决要放不同比例缩放因子的问题,能做出来但效果不好,主要是比较因子常常不是个整数,只有用比例缩放里的参照方式来收缩,才是最准的,可是比例缩放里的参照好像不能参照XY两个方向了,想在XY方向参照不同的尺寸进行缩放,不知哪位高人有好办法了,先谢谢了!
发表于 2011-8-2 10:17:52 | 显示全部楼层 来自: 中国山东
未命名1.jpg 如图不是可以全图缩放么,不知道你是不是说的这个
 楼主| 发表于 2011-8-2 11:16:09 | 显示全部楼层 来自: 中国山东青岛
谢谢楼上兄弟的回答,我要的不是同时缩放,是X和Y方向能不能都参照不同的尺寸进行缩放
发表于 2011-8-2 12:46:36 | 显示全部楼层 来自: 中国辽宁鞍山
可以考虑X、Y方向拉伸解决。
发表于 2011-8-2 14:01:57 | 显示全部楼层 来自: 中国北京
本帖最后由 @fly@ 于 2011-8-2 14:12 编辑
- N6 b) @# E- o: o9 \, m( h' l. V+ l& w( Z0 o& x6 |5 s: D
楼主,你把图形做成块,然后插入块,就可以按照X/Y方向进行缩放了,给你截个图。
3 q" {2 K% ~; f) G3 T5 V
# |; p8 P( D8 Y  K+ M/ v
! N( \" j$ q! [" Z' C- } 1.jpg
发表于 2011-8-3 11:27:30 | 显示全部楼层 来自: 中国江苏苏州
X,Y 向,缩放只有用对齐命令了
发表于 2011-8-4 03:25:36 | 显示全部楼层 来自: 中国辽宁
  1. ;;;主程序
    6 [2 T0 k8 o  f% j4 a
  2. (defun c:SXY (/ mydoc ss sp bn br s)
    ) {! h/ E6 P2 B& g) o) ]2 V/ S9 ]0 }
  3. (vl-load-com) ;加载VLISP扩展功能
    : T4 ^/ d/ f1 J( h' E; i
  4. (setvar "CMDECHO" 0) ;关闭命令回显
    0 X0 p' Q7 D& I% X$ ]" P
  5. (setq mydoc (vla-get-activedocument (vlax-get-acad-object)))- Y' Z$ I2 @& P& I3 j+ U" D
  6. ;用vla-get前缀函数获取当前CAD进程的活动文档对象
    ) }& a3 M3 X8 f, _4 a6 z) F* ~
  7. (setq ss (ssget)) ;创建选择集并由用户在屏幕上选取图元对象
    : s' p$ M4 i% Q+ ?; A
  8. (if ss ;检查用户是否有效选择了图元* a+ j0 S1 Q! M5 h( ?
  9. (progn ;当用户有效选择了图元时,执行下面的代码, q! d( K, V/ i7 p
  10. (setq sp (getpoint "\n指定基点:" ) ;指定缩放(块)基点
    ! k. V/ M( l" ~4 l4 `; o
  11. bn (strcat "temp" (rtos (getvar "cdate" ))) ;临时块名称  {. o* Q: P) T! `- Z: d; J7 A
  12. )
    ' |; S1 y8 U9 o$ m0 ]- q
  13. (command "-block" bn sp ss "" ) ;创建临时块并删除被选择的图元8 b. r$ ^) x) z" A' R, u
  14. (setq br ;在原位置按原尺寸插入临时块参照; \( O5 m# C( Y5 H# `+ t
  15. (vla-insertblock ;用vla-前缀函数调用当前空间的insertblock方法
    $ Q( w& ]: d% Y
  16. (if (= (vla-get-activespace mydoc) acmodelspace)
    ! i+ K6 E6 E4 K7 \' R: q9 t' g
  17. (vla-get-modelspace mydoc)/ K7 i6 J/ P: m3 h% a& l0 k
  18. (vla-get-paperspace mydoc)
    9 }) B0 H# t* u) |2 g3 e
  19. ) ;获取活动文档的当前空间
    $ O4 x. u: ~: `: j' G3 d
  20. (vlax-3d-point sp) ;块参照插入点
    6 ?" l0 `6 m+ H# f6 @8 p
  21. bn ;块名称& v4 B8 s' {7 W- U# [0 I6 V5 [3 R
  22. 1 ;X比例. q" E) v/ T8 D5 [. m
  23. 1 ;Y比例
    . P; B( h7 F' S( P- H
  24. 1 ;Z比例3 L6 s! l$ J+ r  M; e
  25. 0 ;旋转角度
    5 T% u8 \8 c. g
  26. )# j" K3 {7 c4 L3 H& Q/ J0 e3 V
  27. )
    # t' ~- a# L) B: S/ N# L
  28. (setq s (getscale "X" )) ;调用子程序获取X比例因子& h  ]& c1 u1 G
  29. (if s ;检查子程序返回值的有效性
    6 q  D3 a4 l6 ^" o3 U% K5 W3 W
  30. (progn ;当返回值有效时继续进行
    + h7 W7 ?2 I4 e5 I0 z7 U
  31. (vla-put-xscalefactor br s) ;修改临时块参照的X比例属性
    * q8 w5 ^, r' L* X4 ^
  32. (setq s (getscale "Y" )) ;调用子程序获取Y比例因子6 e# }; v& ~( l) l
  33. (if s ;检查子程序返回值的有效性
    4 c) D4 y. t& U' V2 C2 s" V4 Y
  34. (vla-put-yscalefactor br s) ;修改临时块参照的Y比例属性( |) ^  a: n& ^- Q
  35. )
    $ ]9 j5 }$ z& h% _
  36. )
    # A+ H4 i6 K1 K1 q. }
  37. )
    * l; E1 ?) n7 |4 ~! L. X; e
  38. (vla-explode br) ;分解临时块参照6 Z' m5 `" B! J5 W4 _
  39. (vla-delete br) ;删除临时块参照
    % X* b. i- g$ I! v" B
  40. (vla-delete ;删除临时块定义& A) H% B: t7 n( [% I
  41. (vla-item (vla-get-blocks& o# c! O" D: |! i: ~
  42. mydoc! N/ U+ t  v* Z9 ^
  43. )9 h, x% r% A7 K7 t6 e* @/ ~7 C8 P
  44. bn! {# i1 |: I' Z0 |" ~: P! R/ x" v
  45. ): ]& I4 I8 K5 H3 D% M3 y
  46. )
    - h" C: Q% Q+ V; p% l4 h- ^( \
  47. )
    ( Q$ L* R: X+ B- [( w2 k
  48. )( U0 l: t9 j  d3 A; O8 [3 V
  49. (setvar "CMDECHO" 1) ;打开命令回显) O: @3 x6 `  C) ]
  50. (princ) ;静默退出
    , f' x& w; g* a. b  ]
  51. )6 ]/ ^0 \5 Z  V) p4 A0 Y
  52. ;;;=====================================================================- x  ^( X' ~/ K: c3 ~
  53. ;;;子程序: |- M. h. k' r; j! H/ d7 N
  54. (defun getscale (s / ut sc l1 l2)
    / S0 T- l, P% \7 A. a) r- ?) j  F
  55. (initget 2 "R" ) ;定义用户输入选项(禁止输入0)和关键字) e7 t- o* ]# r3 F% Z
  56. (setq sc ;用户指定距离做为比例因子
    : s* X" h- v6 Y/ y- S& m
  57. (vl-catch-all-apply ;捕获用户输入时的错误, U+ Z8 X# `5 J- Q4 F
  58. 'getdist& X0 r$ ^  b+ G
  59. (list (strcat "\n指定 " s " 比例因子 或[参照(R)] <1.0000>:" )! Y4 H( h1 _% k
  60. )3 \& a/ l/ x7 ^% z! O4 l2 j3 o
  61. )9 N+ e2 C1 U  N% `* B
  62. ): E8 J  U1 i( Z. j. f
  63. (if (vl-catch-all-error-p sc) ;检查用户输入时是否出错8 c& Q- M* R, N1 G- c% q, d; u; O
  64. nil ;当用户输入出错时,子程序返回值为nil( e; ?4 H. |, }4 r7 U( Q& i" m
  65. (if sc ;用户输入正确时,检查是否直接回车7 F( T/ e" ], W! O
  66. (if (= sc "R" ) ;检查用户是否输入关键字8 u2 R3 r  K7 i& T3 L4 {
  67. (progn ;用户输入的是关键字(选择参照选项)2 K/ F0 C; n8 o6 y2 c" F/ Z/ D
  68. (initget 3) ;定义用户输入选项(禁止直接回车或输入0)4 [* g3 T8 |) ?. R
  69. (setq l1 ;用户指定参照长度
    ; |5 D2 }! T6 N
  70. (vl-catch-all-apply ;捕获用户输入时的错误- S) L. ^# R  E3 F
  71. 'getdist, t# ~% @7 Y. E1 `! _- O
  72. (list "\n指定参照长度:" )6 y7 W0 J3 e% o
  73. )+ [1 g+ Y7 Q* W, x' D: i& q! D
  74. )
    7 m6 I1 D' X4 W
  75. (if (vl-catch-all-error-p l1) ;检查用户输入时是否出错( B8 Q2 h, Q1 Y: N( ~
  76. nil ;当用户输入出错时,子程序返回值为nil
    ( u) n3 g* ]) ^+ G
  77. (progn ;用户输入正确时继续5 T. M7 d) d5 I5 M* X
  78. (initget 3) ;定义用户输入选项(禁止直接回车或输入0)" Z$ @" ~: z+ `1 B& K* y& a7 g
  79. (setq l2 ;用户指定新长度9 G) O5 u3 }% c6 Z* Z( n
  80. (vl-catch-all-apply ;捕获用户输入时的错误
    ; m3 j  G0 X2 K  i) [' a
  81. 'getdist- o- J5 _% i4 u% }9 i; q
  82. (list "\n指定新长度:" ) 6 R4 j$ D! u/ Y1 I$ G( v; y
  83. )4 Q1 K6 `2 w7 E/ U& b
  84. )
    + u5 G* D6 J$ Z" r6 G! T
  85. (if (vl-catch-all-error-p l2) ;检查用户输入时是否出错
    ' m) O$ F5 T4 }6 x( ]
  86. nil ;当用户输入出错时,子程序返回值为nil
    6 \- n) y  T. j( Q
  87. (/ l2 l1) ;用户输入正确时计算两个长度的比值做为子程序返回值
    ; r3 @! s( i0 ^5 h% B& X' v
  88. )
    . _( ]' k8 o2 J& c, w/ y; p
  89. )
    % J3 N4 M8 s( \; ^( w# U
  90. )
    ' n' s* [( Q% x( c+ c
  91. )
    - W7 u& ]* M9 {. q( G  ~" k
  92. sc ;用户输入的是长度值,以此做为子程序返回值8 g& H) C" d- B4 U( b& D
  93. ): D+ Y. [# v& L  L2 J4 o/ Z
  94. 1 ;用户直接按回车,用默认的1.0000做为子程序返回值/ |: p4 M. ~' B; z
  95. ): u& ~- s/ w+ h$ V% @7 t
  96. )
      `1 b. f2 M' ]% Y6 ]0 i9 w
  97. )
复制代码
发表于 2011-8-4 14:18:23 | 显示全部楼层 来自: 中国广东惠州
7 楼的方法应该不错。
 楼主| 发表于 2011-8-4 14:23:01 | 显示全部楼层 来自: 中国山东青岛
谢谢七楼的版大,我一时还没消化,先看学习以后,再来回贴
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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