QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 694865935 于 2011-8-2 11:18 编辑 & J, l7 Z" ~( v% s8 u+ V1 S
; F4 R% i! T- _) ^, Y9 w* v
求助:CAD中怎么能缩放到合适的尺寸?一直让这个问题伤着了……
/ ?! T# c7 \. _* j# x  求助,客户经常给一些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 编辑
* j% a- P  L) k* F* r( _; x1 C* e3 {  p2 t, B
楼主,你把图形做成块,然后插入块,就可以按照X/Y方向进行缩放了,给你截个图。4 [! P1 s' ^% N$ C. R/ O
" k) I8 f8 D& `; o% O

4 x* i; v' l+ k# j$ V 1.jpg
发表于 2011-8-3 11:27:30 | 显示全部楼层 来自: 中国江苏苏州
X,Y 向,缩放只有用对齐命令了
发表于 2011-8-4 03:25:36 | 显示全部楼层 来自: 中国辽宁
  1. ;;;主程序
    ; y& E/ q7 A0 {1 `
  2. (defun c:SXY (/ mydoc ss sp bn br s)
    0 S* ~0 m/ g; ?$ Q$ ~6 k
  3. (vl-load-com) ;加载VLISP扩展功能
    ' E) I2 }" R1 S% U0 d$ @
  4. (setvar "CMDECHO" 0) ;关闭命令回显
    * v/ Y3 K. e. Q( Z
  5. (setq mydoc (vla-get-activedocument (vlax-get-acad-object)))! J1 O! A9 c. Z$ o5 b
  6. ;用vla-get前缀函数获取当前CAD进程的活动文档对象( o/ O1 t6 \% {% p3 L5 l" O4 x
  7. (setq ss (ssget)) ;创建选择集并由用户在屏幕上选取图元对象* D/ N% |! F# S2 e: k# F
  8. (if ss ;检查用户是否有效选择了图元7 O  u3 ]- C; K1 T* f) A
  9. (progn ;当用户有效选择了图元时,执行下面的代码/ t- O% s3 u5 W' x6 ]2 G/ A& g' k
  10. (setq sp (getpoint "\n指定基点:" ) ;指定缩放(块)基点
    4 ]9 S. o: h* \
  11. bn (strcat "temp" (rtos (getvar "cdate" ))) ;临时块名称
    + L7 ]/ O, a  e  R3 S; y& U
  12. )
    5 N/ ]- m: @. T+ q2 C! }/ }
  13. (command "-block" bn sp ss "" ) ;创建临时块并删除被选择的图元
    4 ?9 }$ w/ k- a- t! H
  14. (setq br ;在原位置按原尺寸插入临时块参照
    * @. `, |9 k: w* R+ K( X0 n5 w' h
  15. (vla-insertblock ;用vla-前缀函数调用当前空间的insertblock方法3 j5 f: E) f* z! o" U9 Z* ]
  16. (if (= (vla-get-activespace mydoc) acmodelspace)
    0 v/ j3 u! ~5 G  l
  17. (vla-get-modelspace mydoc)4 B$ G( I1 q' q8 j& @# s' J
  18. (vla-get-paperspace mydoc)
    ) `  d  M) |, D8 C( \
  19. ) ;获取活动文档的当前空间
    ( n$ N; Q7 D2 G8 l! J% s9 g/ b: c
  20. (vlax-3d-point sp) ;块参照插入点
    # S2 k. A7 t( b! n
  21. bn ;块名称
    3 a; I6 a% X. \1 r
  22. 1 ;X比例( H' B8 k' n! ?7 K
  23. 1 ;Y比例
    ) ?8 P6 d: q9 B
  24. 1 ;Z比例, G" s6 e0 S! D- ~7 U
  25. 0 ;旋转角度
    & e$ W5 i+ ?% m+ z! L1 |  F( b
  26. )
    , |' J4 E( t: |4 K( \3 b( c
  27. )
    . m0 D- _; @! L, f, C
  28. (setq s (getscale "X" )) ;调用子程序获取X比例因子  z% c$ z6 n% R: _4 z# p4 X7 J
  29. (if s ;检查子程序返回值的有效性
    # o  u( ~2 @+ p( W7 K, k
  30. (progn ;当返回值有效时继续进行
    5 T! Z6 O" @9 @/ p* M" |
  31. (vla-put-xscalefactor br s) ;修改临时块参照的X比例属性
      I" h5 t7 S* K) a1 q
  32. (setq s (getscale "Y" )) ;调用子程序获取Y比例因子
    $ L. y- `: t5 H4 q- Z8 I% e$ f
  33. (if s ;检查子程序返回值的有效性* t2 N# c# d$ B. M% t+ o
  34. (vla-put-yscalefactor br s) ;修改临时块参照的Y比例属性! k9 X5 B; c' `3 z
  35. )! O+ n9 `* x& G; A
  36. )
    ( a9 _2 g( t& O7 D
  37. )
    ( ~" Y, l) Q- w  ]  p) x9 l$ w
  38. (vla-explode br) ;分解临时块参照2 i: l" w' O" Y  Y) r
  39. (vla-delete br) ;删除临时块参照" s& v9 W6 X% G) K6 _9 u
  40. (vla-delete ;删除临时块定义
    * ?  z; F9 \2 u& Y) H! l
  41. (vla-item (vla-get-blocks$ \- u( v# R( d) A0 c
  42. mydoc
    : ?" k- p) n7 Q3 C! O" ?
  43. )
    $ b+ k: _: s6 L7 l8 Q
  44. bn/ X$ G& X% }- L2 ?& B7 U* p* r
  45. )
    3 L2 D7 H3 H6 q* p) X
  46. )0 r/ N( Y; U2 x% T7 j
  47. )
    1 a7 L' B: a5 x& X1 G6 N1 p' Z2 |
  48. )& @# }: ~/ g" |
  49. (setvar "CMDECHO" 1) ;打开命令回显
    # Y! I5 J- E; r- _
  50. (princ) ;静默退出/ f( |) n) v" {* p! s
  51. )
    ( D3 s$ E  V( R1 y& b1 a
  52. ;;;=====================================================================
    : w2 d9 [/ N, F$ t. G9 _: E1 Y0 H/ p
  53. ;;;子程序
    ) A  m8 n# u' M# _/ e+ q
  54. (defun getscale (s / ut sc l1 l2)
    + h1 r. v! ^3 S+ _0 o. N* J% Q( f
  55. (initget 2 "R" ) ;定义用户输入选项(禁止输入0)和关键字
      w8 B8 y3 `# r+ B5 d  z
  56. (setq sc ;用户指定距离做为比例因子
    % v. k7 z# t0 m  P1 j
  57. (vl-catch-all-apply ;捕获用户输入时的错误* C2 Y3 U) ?# K3 I
  58. 'getdist
    % `' _& N) ?5 M/ U) ~. t
  59. (list (strcat "\n指定 " s " 比例因子 或[参照(R)] <1.0000>:" )
    - r/ f, ?6 I* B: d* v
  60. )
    ' p6 O" W' {& \* w3 A3 L
  61. )$ s8 t: N3 u6 ^7 l2 ]" c
  62. )
    ( R" e/ t. V; n5 E) E3 O' I/ f
  63. (if (vl-catch-all-error-p sc) ;检查用户输入时是否出错8 i% {$ ~5 b+ s  f/ A. P9 Q
  64. nil ;当用户输入出错时,子程序返回值为nil
    7 i% s5 H! v! S. _7 M1 y* i2 j! p7 {
  65. (if sc ;用户输入正确时,检查是否直接回车0 ?( ]% a# R9 K& K) W8 b1 [3 |7 y; {
  66. (if (= sc "R" ) ;检查用户是否输入关键字
    2 w. d0 t3 f* z( z$ N+ H
  67. (progn ;用户输入的是关键字(选择参照选项)+ y% z& t6 n, F; c$ M. p
  68. (initget 3) ;定义用户输入选项(禁止直接回车或输入0)
    4 L0 Q; \9 r2 h6 U
  69. (setq l1 ;用户指定参照长度5 C$ [3 s, Z' ]/ o, s* b
  70. (vl-catch-all-apply ;捕获用户输入时的错误) m2 a0 i. G+ v  T$ L
  71. 'getdist; n" z# u$ `, c8 ?* `8 U0 r
  72. (list "\n指定参照长度:" )
    / m8 ~; w4 t0 f5 f1 b1 o$ L
  73. )- t' O8 O7 g7 S4 o- J1 k# R
  74. )
    , |! y5 `( t1 y2 P2 J5 o/ ^$ b1 y
  75. (if (vl-catch-all-error-p l1) ;检查用户输入时是否出错3 D, v5 M# S- ]3 l$ }/ a; l
  76. nil ;当用户输入出错时,子程序返回值为nil. H9 g, l* E: n. i4 e6 e2 Z
  77. (progn ;用户输入正确时继续
    + V5 C. D+ p/ T: V! M' p
  78. (initget 3) ;定义用户输入选项(禁止直接回车或输入0)  k+ ?' d% r; |* F/ ~
  79. (setq l2 ;用户指定新长度
    " W- I1 U+ L+ v
  80. (vl-catch-all-apply ;捕获用户输入时的错误
    4 T- x. D  h0 U6 M, ~7 `, A
  81. 'getdist4 r2 a1 v0 A8 e6 Y
  82. (list "\n指定新长度:" ) , C0 m% [0 t: s9 f; v8 s0 }
  83. )3 v% L" h6 I7 J
  84. )
    6 S) D3 Z! r: X, s8 u
  85. (if (vl-catch-all-error-p l2) ;检查用户输入时是否出错
    ' l1 w7 E$ ?! d7 q6 V
  86. nil ;当用户输入出错时,子程序返回值为nil4 {0 k2 K2 F) ?' K
  87. (/ l2 l1) ;用户输入正确时计算两个长度的比值做为子程序返回值6 b) [- M( w5 c  u% P
  88. )
    5 |; U- }$ V9 y, F4 |- k5 v
  89. )$ g+ f) ?( u. A9 J3 @* P" c
  90. )
    5 {; O% Z7 m6 E  Y2 B/ ]1 ?
  91. ): J9 {+ p) f# P  ^
  92. sc ;用户输入的是长度值,以此做为子程序返回值. n2 ^/ r3 R3 d6 z8 @* w
  93. )
    8 `$ ~# c. B4 k& F4 b
  94. 1 ;用户直接按回车,用默认的1.0000做为子程序返回值2 a0 V) _9 d6 M  q- U% i2 Y! k
  95. )
    , y( b' E- Y7 b) A- X
  96. )- U# O1 N2 D) t) G2 k
  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 )

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