QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 694865935 于 2011-8-2 11:18 编辑 - k( O' j: i1 k0 q
$ r; J/ H/ p9 @" p4 f8 L
求助:CAD中怎么能缩放到合适的尺寸?一直让这个问题伤着了……
2 y! o$ G4 Y9 O3 T7 x& l  求助,客户经常给一些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 编辑 % m( f2 {' Q& E$ T9 p# p/ B

9 A6 j* r# w  z$ U- G- ]( `( o# O) P* h楼主,你把图形做成块,然后插入块,就可以按照X/Y方向进行缩放了,给你截个图。" Q& y- Y+ p1 {1 {# t& E
1 ^- V& L3 C7 \9 }* \3 @1 q2 d% _

) W* {% _0 r" u# K4 i* _ 1.jpg
发表于 2011-8-3 11:27:30 | 显示全部楼层 来自: 中国江苏苏州
X,Y 向,缩放只有用对齐命令了
发表于 2011-8-4 03:25:36 | 显示全部楼层 来自: 中国辽宁
  1. ;;;主程序# b2 X/ O* ]' ^
  2. (defun c:SXY (/ mydoc ss sp bn br s)4 x/ P- O6 R2 O, W
  3. (vl-load-com) ;加载VLISP扩展功能7 ~3 N' @! c$ a- ]5 c$ w, y. G
  4. (setvar "CMDECHO" 0) ;关闭命令回显
    - a$ }( H; F8 O4 ]* p5 ~) P* z
  5. (setq mydoc (vla-get-activedocument (vlax-get-acad-object)))
    ) H: E+ A& }1 S
  6. ;用vla-get前缀函数获取当前CAD进程的活动文档对象
    / B% c' O! H% A7 k, t5 `
  7. (setq ss (ssget)) ;创建选择集并由用户在屏幕上选取图元对象
    7 P/ m( s+ ^' ?
  8. (if ss ;检查用户是否有效选择了图元
    1 B0 J0 o; O; s0 ~2 @- u4 s1 u
  9. (progn ;当用户有效选择了图元时,执行下面的代码
    + \* k, W) ]2 [* l. i( e
  10. (setq sp (getpoint "\n指定基点:" ) ;指定缩放(块)基点5 {1 _; s6 P' i0 Y) Y, V  z
  11. bn (strcat "temp" (rtos (getvar "cdate" ))) ;临时块名称1 _6 r/ S/ d, n* g
  12. ), K# I- z* V) d* U) w
  13. (command "-block" bn sp ss "" ) ;创建临时块并删除被选择的图元
    , e  B* [! |, v/ |5 v) B# z" \4 ]
  14. (setq br ;在原位置按原尺寸插入临时块参照
    : p# i  ^9 A* n; ]' p
  15. (vla-insertblock ;用vla-前缀函数调用当前空间的insertblock方法
    $ P5 g5 s! l9 R6 V
  16. (if (= (vla-get-activespace mydoc) acmodelspace)9 d6 i# j& H8 x" I- k
  17. (vla-get-modelspace mydoc)
    ! Z* Z( K  j8 i3 K: B- j
  18. (vla-get-paperspace mydoc); A0 {1 O( ]& C1 }4 h7 X" J
  19. ) ;获取活动文档的当前空间: `6 T6 T8 {  U/ K7 p+ ?5 p
  20. (vlax-3d-point sp) ;块参照插入点6 i! N6 E: D4 W1 {
  21. bn ;块名称
    - c: W* J2 b& Q) ?7 w, f$ x
  22. 1 ;X比例( L# C0 D0 Y$ @; p
  23. 1 ;Y比例7 g/ E% \; N- `- h9 D0 V
  24. 1 ;Z比例2 @* ~8 o8 M  s# U: L$ s9 H  G
  25. 0 ;旋转角度
    $ i/ s9 l6 U% P8 w8 U: n
  26. )
    $ H' ^+ `: H: k& M* T/ n1 W; L+ u
  27. )! x+ c" `4 @. `+ }- Y
  28. (setq s (getscale "X" )) ;调用子程序获取X比例因子$ t% F2 |! C8 N
  29. (if s ;检查子程序返回值的有效性
    , U8 b+ ^3 A/ a6 r: Z5 d5 S  U, R
  30. (progn ;当返回值有效时继续进行; E. @$ i8 H( w% X: T4 n/ k
  31. (vla-put-xscalefactor br s) ;修改临时块参照的X比例属性
    1 d, D! [  i1 T+ G
  32. (setq s (getscale "Y" )) ;调用子程序获取Y比例因子
    ) ?. [/ A, ~. e; _0 H: r; j# B
  33. (if s ;检查子程序返回值的有效性& B7 P5 }) K! y) V$ e2 A/ j6 Y0 P
  34. (vla-put-yscalefactor br s) ;修改临时块参照的Y比例属性! S; O7 P. Z/ o; m
  35. )
    5 k  b, }$ y8 L" S! v  u* w
  36. )- ^/ i& b/ ^+ w; k* r# X6 s
  37. )
    3 B8 B3 M6 d2 V$ c9 `1 G+ @7 I
  38. (vla-explode br) ;分解临时块参照* e% b" Q9 m0 Y0 E- H+ Q) J5 i9 P
  39. (vla-delete br) ;删除临时块参照
    3 K& w/ U; R2 X% L$ ?- F7 E2 t
  40. (vla-delete ;删除临时块定义
    - S& }1 d% g: x. N& D1 t: A
  41. (vla-item (vla-get-blocks
    6 v0 k4 {% k+ F5 k0 W4 z
  42. mydoc- S4 i& y* E  ^4 e# X1 ?
  43. )" c! g) H  T' ?5 Q; ~2 \+ D. K' K
  44. bn/ W, \5 c: D: |9 ^1 y6 m) V
  45. )
    ! M# j0 P* v" V) R+ L& Z9 n
  46. )
    ' M7 u8 g1 M$ t' S
  47. )4 k: b; j( u" H6 }" b$ c
  48. )4 D" q" i) Z8 e9 J3 S* v' p2 O3 x
  49. (setvar "CMDECHO" 1) ;打开命令回显: Q, H# w* S3 w7 p  q
  50. (princ) ;静默退出8 x2 [1 Y( c( j$ d9 q  C. C
  51. )* W$ f1 W6 V( r" P3 ]: k) y
  52. ;;;=====================================================================
    $ e2 G) I! |' R8 V6 O
  53. ;;;子程序3 i8 e, u1 X! {
  54. (defun getscale (s / ut sc l1 l2)
    2 Z% B+ v% k% d  M6 j8 B. O
  55. (initget 2 "R" ) ;定义用户输入选项(禁止输入0)和关键字9 q/ B* v5 Z% x
  56. (setq sc ;用户指定距离做为比例因子( S+ [2 e" O8 N% H
  57. (vl-catch-all-apply ;捕获用户输入时的错误
    9 a, Z( ]1 k" I' k9 i" W
  58. 'getdist
    4 |% b1 @& n# f& y+ t2 N
  59. (list (strcat "\n指定 " s " 比例因子 或[参照(R)] <1.0000>:" )
    7 I; J8 e5 T1 s3 \3 p/ K2 |
  60. )% j' f; K" m. K( D4 b. G
  61. )
    & f% M5 D* s  a$ ^- _  s
  62. )
    5 p# I4 q; Y- ]6 T0 k- \) z3 t
  63. (if (vl-catch-all-error-p sc) ;检查用户输入时是否出错
    : V. E2 G2 A$ ^8 W: q* ]" S
  64. nil ;当用户输入出错时,子程序返回值为nil
    9 t' L" I1 s1 u* ~# E9 k; Y
  65. (if sc ;用户输入正确时,检查是否直接回车
    9 R' p6 h2 a% b. l
  66. (if (= sc "R" ) ;检查用户是否输入关键字
    * j4 D; j: A  x' G4 e$ T" S) i
  67. (progn ;用户输入的是关键字(选择参照选项)) y1 z; c) ]0 ?+ @1 r% X
  68. (initget 3) ;定义用户输入选项(禁止直接回车或输入0)
    ' S4 `7 V; L" c& m# v1 r
  69. (setq l1 ;用户指定参照长度
    + [( o+ ^, o, {; P
  70. (vl-catch-all-apply ;捕获用户输入时的错误0 {% P9 n" y1 O6 e  M
  71. 'getdist0 u  |5 H' B' e9 b
  72. (list "\n指定参照长度:" )6 i. t6 k& n- F2 a$ F
  73. )
    * b& c' V7 y+ N& `; K' y
  74. )$ Q5 K) t9 i2 R
  75. (if (vl-catch-all-error-p l1) ;检查用户输入时是否出错: u1 z, I: j, H: C3 y
  76. nil ;当用户输入出错时,子程序返回值为nil
    ! T) t/ t9 \+ ^! j
  77. (progn ;用户输入正确时继续! Q2 P9 R( W! \
  78. (initget 3) ;定义用户输入选项(禁止直接回车或输入0)
    0 q: ~' i+ }6 a) V/ s
  79. (setq l2 ;用户指定新长度
    9 U6 v' n; a2 F7 N
  80. (vl-catch-all-apply ;捕获用户输入时的错误' i. ^. W' r0 k
  81. 'getdist
    1 e& f. d3 j0 _5 E
  82. (list "\n指定新长度:" ) 3 T5 S$ _2 R) R
  83. )7 T& ~$ A; n2 U8 `
  84. )
    ! \6 i2 C" S2 z% D( Y% x6 f
  85. (if (vl-catch-all-error-p l2) ;检查用户输入时是否出错
    6 D8 `; y  P' t+ V8 J4 q
  86. nil ;当用户输入出错时,子程序返回值为nil; C) ]9 u/ Q) S3 ]; a' A
  87. (/ l2 l1) ;用户输入正确时计算两个长度的比值做为子程序返回值
    7 b# L! _: f' K) U9 g! ~
  88. )
    : \/ L/ c  R1 M
  89. )) P" }/ q# I4 Y
  90. )
    % m8 o5 W& ^8 g* u$ c5 L
  91. ): ]' g: C1 Z3 O+ @& T! e
  92. sc ;用户输入的是长度值,以此做为子程序返回值. Q1 T9 _% X; T
  93. )
    ! S! h; ^  c& T
  94. 1 ;用户直接按回车,用默认的1.0000做为子程序返回值7 {2 j4 i5 w1 F7 B8 y! o
  95. )
    / C) |, w% b; m9 V" Q
  96. )
    ; _  Y) C6 {$ n; }7 a" V4 A/ b
  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 )

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