QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 694865935 于 2011-8-2 11:18 编辑 4 f5 \! b7 Q# g% N' P  K

# e* y% y  Q# s+ u$ F* J求助:CAD中怎么能缩放到合适的尺寸?一直让这个问题伤着了……
9 o' |3 k) ^+ K- r1 C! a  求助,客户经常给一些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 编辑
: {8 j: ]$ c( J: _9 Z& J) G* M0 e
! [# h8 M( e4 n# ~# N楼主,你把图形做成块,然后插入块,就可以按照X/Y方向进行缩放了,给你截个图。. I& r! j" T( D. X9 q2 U8 p

2 ~  w/ ?9 X: s# m( R% D: l2 h  p( `3 @- ]& z/ ^" G* Z
1.jpg
发表于 2011-8-3 11:27:30 | 显示全部楼层 来自: 中国江苏苏州
X,Y 向,缩放只有用对齐命令了
发表于 2011-8-4 03:25:36 | 显示全部楼层 来自: 中国辽宁
  1. ;;;主程序
    ! [4 d! J" U5 }( {
  2. (defun c:SXY (/ mydoc ss sp bn br s)3 C1 b% R6 V3 {4 w" y  r/ c
  3. (vl-load-com) ;加载VLISP扩展功能+ }  X$ x5 g. I
  4. (setvar "CMDECHO" 0) ;关闭命令回显
    & U0 y7 j: X/ h7 W0 C
  5. (setq mydoc (vla-get-activedocument (vlax-get-acad-object)))
    0 j( O& }' s- Y+ Z& t  l
  6. ;用vla-get前缀函数获取当前CAD进程的活动文档对象
    : n# G1 \- C- d
  7. (setq ss (ssget)) ;创建选择集并由用户在屏幕上选取图元对象- ?! s3 [! U2 D7 X+ x% Y( V
  8. (if ss ;检查用户是否有效选择了图元
    ) J. I; [1 m0 |
  9. (progn ;当用户有效选择了图元时,执行下面的代码
    : n! N  s9 r: ^  B' s6 t  K) Y2 G
  10. (setq sp (getpoint "\n指定基点:" ) ;指定缩放(块)基点
    2 W. g9 B+ s, }5 u  m/ L. S( h
  11. bn (strcat "temp" (rtos (getvar "cdate" ))) ;临时块名称
    $ d3 n, p2 v( S7 W2 }
  12. )' Q) i' k. O7 J7 c' {
  13. (command "-block" bn sp ss "" ) ;创建临时块并删除被选择的图元! U6 N& @3 H+ U# U5 n* h
  14. (setq br ;在原位置按原尺寸插入临时块参照
    ; m7 O# `3 x8 d; d- G; |7 r
  15. (vla-insertblock ;用vla-前缀函数调用当前空间的insertblock方法! ?9 T- G4 {- U
  16. (if (= (vla-get-activespace mydoc) acmodelspace)
    8 |+ \4 p9 S7 P6 U) @( e  K2 e
  17. (vla-get-modelspace mydoc), Q3 M* @1 y+ n. e  U+ E
  18. (vla-get-paperspace mydoc)9 }  ~9 r* P4 E
  19. ) ;获取活动文档的当前空间+ r" i0 J4 \9 S' z/ }- w# F0 k
  20. (vlax-3d-point sp) ;块参照插入点% l# d; ~( w* ~
  21. bn ;块名称. K! \# ?3 C4 z0 V+ l* Y/ v8 a
  22. 1 ;X比例
    7 `1 j+ R- ^$ w! v$ f: }( A
  23. 1 ;Y比例
    / ?/ d* R2 O6 U% Z5 ?3 `
  24. 1 ;Z比例% {+ j! ^% ]1 {: e( o) L
  25. 0 ;旋转角度7 g9 |! E# _- ~
  26. )
    ( N$ N6 }# g' O) P& O: [
  27. )
    $ @6 z6 ]1 L& H+ i* Z7 ]0 j0 P
  28. (setq s (getscale "X" )) ;调用子程序获取X比例因子
    2 ~! k+ R! l+ S3 J
  29. (if s ;检查子程序返回值的有效性, R' Y1 I' n8 A7 o5 c8 C4 p0 W( r
  30. (progn ;当返回值有效时继续进行
      z5 J: K% U  G7 ^: K
  31. (vla-put-xscalefactor br s) ;修改临时块参照的X比例属性4 F4 \7 n7 W! N$ ?1 s" B
  32. (setq s (getscale "Y" )) ;调用子程序获取Y比例因子9 G! P- M1 Q7 }% U5 y
  33. (if s ;检查子程序返回值的有效性8 o8 d  U5 Z/ N8 O+ o/ N$ K4 F
  34. (vla-put-yscalefactor br s) ;修改临时块参照的Y比例属性
    " G, J- }' ^% w. g" i  i& J
  35. )
    ( F5 u+ Q3 z; W4 R' w/ `' E
  36. )  C) [! ~7 b1 t4 W  M1 U6 H/ z
  37. )/ r$ R1 Y; @! [. q$ J1 N  i& O
  38. (vla-explode br) ;分解临时块参照& M$ y9 x! ?6 n5 p1 ~
  39. (vla-delete br) ;删除临时块参照
    ; K! g1 ?- N! Q, @* z0 A& O! C
  40. (vla-delete ;删除临时块定义! T1 {7 J) w- ]3 t0 N3 x3 _
  41. (vla-item (vla-get-blocks
    $ K5 c5 y, d5 z' |1 y
  42. mydoc
    6 _, R( o5 g0 N5 H8 P
  43. )
    ; _5 T; i8 B' _
  44. bn
    - n; F6 c. g4 K
  45. )
    , G6 Q3 [, @8 v* N: y6 Z5 p* F
  46. )3 h0 {1 }) }9 D
  47. )
    ! c& m* Y: ]9 y% L4 D5 B
  48. )
    ( N0 x+ m. K: h$ O' X0 L
  49. (setvar "CMDECHO" 1) ;打开命令回显
    0 G5 m* O1 W* o! F
  50. (princ) ;静默退出8 [1 P2 U  Y/ e- i& U: U
  51. )! F: f( ?: e8 v/ c1 h
  52. ;;;=====================================================================1 E& r: k  p. j/ I% [+ U
  53. ;;;子程序
    % W- p# g8 q  G* Q2 ~2 }7 B; F6 `
  54. (defun getscale (s / ut sc l1 l2)
    ' x4 ^$ \, `3 _. n4 z
  55. (initget 2 "R" ) ;定义用户输入选项(禁止输入0)和关键字: |7 V4 k3 d0 ?9 F# O; s  v+ }. ~
  56. (setq sc ;用户指定距离做为比例因子1 ^: U2 W/ ?* ?3 t, E
  57. (vl-catch-all-apply ;捕获用户输入时的错误2 e4 y9 G! [! E' c
  58. 'getdist
    ; ~2 n6 L% ]$ ^$ Q/ i
  59. (list (strcat "\n指定 " s " 比例因子 或[参照(R)] <1.0000>:" ); o) k* |  @0 h. ~. u5 B
  60. )
    4 `; H8 [0 m0 `8 k
  61. )
    : `% Y' ?) Z- K5 m% L
  62. )2 I- [* S! p1 Q: B8 I! u8 Y, d# f
  63. (if (vl-catch-all-error-p sc) ;检查用户输入时是否出错$ N1 U9 P+ l, _, R( `8 |: a
  64. nil ;当用户输入出错时,子程序返回值为nil
    % L/ \0 H9 Z9 k9 A
  65. (if sc ;用户输入正确时,检查是否直接回车2 x/ T* ]7 X) o" V6 y+ O
  66. (if (= sc "R" ) ;检查用户是否输入关键字
    . I' U; w5 M3 J7 z7 u4 X0 k
  67. (progn ;用户输入的是关键字(选择参照选项)
      i* Z" v/ Z$ ^9 c
  68. (initget 3) ;定义用户输入选项(禁止直接回车或输入0)
    9 r1 @8 z, W' z0 X4 Z4 e
  69. (setq l1 ;用户指定参照长度" d/ U8 o! g  H( Q! z
  70. (vl-catch-all-apply ;捕获用户输入时的错误
    8 }: n% A7 i+ m  }4 I" S
  71. 'getdist
    ! c1 Q+ h* N* P6 t- J0 ?1 g! H9 b) Q
  72. (list "\n指定参照长度:" )! X6 L, l. c) y- v" K$ e
  73. )
    5 W3 h; A# d# A5 c' N
  74. )
    . C& `0 k" _7 L
  75. (if (vl-catch-all-error-p l1) ;检查用户输入时是否出错& B, X$ Z5 \8 F8 c, Q/ [/ h
  76. nil ;当用户输入出错时,子程序返回值为nil) S5 ?  S( u1 Z- Q* I8 r
  77. (progn ;用户输入正确时继续
    ' X4 L. \. }( [% ?( V
  78. (initget 3) ;定义用户输入选项(禁止直接回车或输入0)
    ' i3 z) c1 q5 p. Y
  79. (setq l2 ;用户指定新长度
    " H* u5 p0 F# o/ M/ X9 J3 ?
  80. (vl-catch-all-apply ;捕获用户输入时的错误
    ) @, x& m3 b5 b" }2 ^1 G
  81. 'getdist
    ; ~; S6 g$ y  h8 K* j3 {7 Q
  82. (list "\n指定新长度:" )
    6 a9 B! k% i6 t2 T: r
  83. )9 M+ U0 z; f) `  ?- ^; h
  84. )
    3 K3 P$ `# J5 Z2 E) Q
  85. (if (vl-catch-all-error-p l2) ;检查用户输入时是否出错
    : T# ^9 u% i" _8 n3 B0 E4 f3 [
  86. nil ;当用户输入出错时,子程序返回值为nil" A) Q$ O' u: V: Z3 D' ~4 a
  87. (/ l2 l1) ;用户输入正确时计算两个长度的比值做为子程序返回值
    6 G( V* g; s) ]! o
  88. )
    ! j& L7 U0 Y4 |4 M& N  o
  89. )- `. _; ~" ^0 E; b' @/ k
  90. )/ b* z9 `% H7 t6 y$ U$ W
  91. )" j( N& r8 I) v0 u
  92. sc ;用户输入的是长度值,以此做为子程序返回值# k' K; c/ p& n5 w& D
  93. )
    " @3 }( x+ Q$ ]# _  s9 O: O
  94. 1 ;用户直接按回车,用默认的1.0000做为子程序返回值
    & Y0 H& O, T9 B1 Y+ ?( @' `; l
  95. )
    & `1 Z1 x- [3 C8 q
  96. )" ?: N2 @# J2 o3 `
  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 )

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