找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1527|回复: 12

[编程申请]:超级scale命令

[复制链接]
发表于 2003-4-20 13:28:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
cad中的scale命令只能沿xy轴等比缩放,我想能否实现一个超级scale命令,
可以选择沿x轴、沿y轴、沿xy轴缩放。

自己想了个命令格式如下:
Command: xSCALE
Select objects: 1 found

Select objects:
缩放方向(1、沿X轴;2、沿Y轴;3、沿XY轴):1
Specify base point:
Specify scale factor or [Reference]: r

Specify reference length <1>:  Specify second point:
Specify new length:
请各位同仁指教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-4-20 22:36:53 | 显示全部楼层
等Autodesk提供解决命令吧,或者用Ctrl+X后Ctrl+V(or Ctrl+Shift+V)然后调整特性。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-23 16:21:14 | 显示全部楼层
是不是可以这样呢,正如上面说的,编程,选择对象,做成块,根据提供的参数插入该块,最后再炸开。也就是把上面说的程序化。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-26 16:33:36 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-26 17:09:59 | 显示全部楼层
其实该构思不够全面,我收集了一个lisp程序。
命令名:XSCALE  
对选择图元得X,Y,Z三个方向进行不等比例得缩放,解决了scale命令的局限问题。



  1. ;;;    XSCALE.LSP / 04JUL95 / 03MAY96
  2. ;;;   
  3. ;;;    Copyright (C) 1995, 1996 by Thomas Berger
  4. ;;;
  5. ;;;    FREEWARE:
  6. ;;;    Permission to use, copy, modify, and distribute this software
  7. ;;;    for any purpose and without fee is hereby granted, provided
  8. ;;;    that the above copyright notice appears in all copies and
  9. ;;;    that both that copyright notice and the limited warranty and
  10. ;;;    restricted rights notice below appear in all supporting
  11. ;;;    documentation.
  12. ;;;
  13. ;;;    THOMAS BERGER PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
  14. ;;;    THOMAS BERGER SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
  15. ;;;    MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  THOMAS BERGER
  16. ;;;    DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
  17. ;;;    UNINTERRUPTED OR ERROR FREE.
  18. ;;;
  19. ;;;
  20. ;;;    ****************************************************************
  21. ;;;    XSCALE: xyz scaling of selected entities
  22. ;;;
  23. ;;;    AutoCAD version: R13 only, ACIS solids need R13 C2 or higher
  24. ;;;
  25. ;;;    functions:
  26. ;;;       C:XSCALE     for use at the command prompt
  27. ;;;       (XSCALE sset basepoint xscale yscale zscale)  for API usage
  28. ;;;       (MAKEBLOCK name basepoint sset xscale yscale zscale rotation)
  29. ;;;          to entmake blocks (anonymous block if name="*")
  30. ;;;       C:MAKEBLOCK     for use at the command prompt
  31. ;;;
  32. ;;;    known bugs:
  33. ;;;       there is an AutoCAD bug still existent in R13c4 that
  34. ;;;       does not allow to explode blocks correctly with equal scaling
  35. ;;;       in X- and Y-direction and a different factor in Z-direction. In this
  36. ;;;       special case the exploded block will fall back to the 1-1-1
  37. ;;;       scaling.
  38. ;;;      Workaround:
  39. ;;;       Use slightly different scaling factors for the X- and the
  40. ;;;       Y-direction (i.e 1.00001 and 0.999999)


  41. (defun xscale (sset basp xscale yscale zscale / )
  42. (if (makeblock "*" basp sset xscale yscale zscale 0)
  43.         (command "._explode" (entlast))
  44. )
  45. )


  46. (defun c:xscale (/ oldecho olderr temp xs ys zs basp sset)
  47.         (setq oldecho (getvar "cmdecho") olderr *error*)
  48.         (command "._undo" "_group")
  49.         (defun *error* (msg)
  50.                 (setq *error* olderr)
  51.                 (princ (strcat "\nXSCALE: " msg "\n"))
  52.                 (prin1)
  53.         )
  54.         (setvar "cmdecho" 0)
  55.         (setq basp (while (not temp) (setq temp (getpoint "\nbase point: ")))
  56.                         sset (if (< 0 (sslength (setq temp (ssget)))) temp nil)
  57.                         xs (if sset (if (not (setq temp (getdist basp "\nX-scale <1>: "))) 1 temp))
  58.                         ys (if sset (if (not (setq temp (getdist basp "\nY-scale <1>: "))) 1 temp))
  59.                         zs (if sset (if (not (setq temp (getdist basp "\nZ-scale <1>: "))) 1 temp))
  60.         )
  61.         (if (and basp sset xs ys zs)
  62.                 (xscale sset basp xs ys zs)
  63.         )
  64.         (command "._undo" "_end")
  65.         (setq *error* olderr)
  66.         (setvar "cmdecho" oldecho)
  67.         (prin1)
  68. )


  69. (defun makeblock (name baspoint sset xs ys zs rot / i e en blocktype)
  70. (if sset nil (setq sset (ssadd)))
  71. (if (or (/= 'STR (type name)) (= "" name)) (setq name "*A"))
  72. (if (= (substr name 1 1) "*")
  73.         (setq blocktype 1 name "*A")
  74.         (setq blocktype 0)
  75. )
  76. (entmake (append
  77.         '((0 . "BLOCK"))
  78.         (list (cons 2  name))
  79.         (list (cons 70 blocktype))
  80.         (list (cons 10 baspoint))
  81. ))
  82. (setq i -1)
  83. (while (setq e (ssname sset (setq i (1+ i))))
  84.         (cond
  85.                 ((/= 1 (cdr (assoc 66 (entget e))))
  86.                         (if (entget e) (progn
  87.                                 (entmake (entget e '("*")))
  88.                                 (entdel e)
  89.                         ))
  90.                 )
  91.                 ((= 1 (cdr (assoc 66 (entget e))))
  92.                         (if (entget e) (progn
  93.                                 (entmake (entget e '("*")))
  94.                                 (setq en e)
  95.                                 (while (/= "SEQEND" (cdr (assoc 0 (entget en))))
  96.                                         (setq en (entnext en))
  97.                                         (entmake (entget en '("*")))
  98.                                 )
  99.                                 (entdel e)
  100.                         ))
  101.                 )
  102.         )
  103. )
  104. (setq name (entmake '((0 . "ENDBLK"))))
  105. (if name (progn
  106.         (entmake (append
  107.                 '((0 . "INSERT"))
  108.                 (list (cons 2 name))
  109.                 (list (cons 10 baspoint))
  110.                 (list (cons 41 xs))
  111.                 (list (cons 42 ys))
  112.                 (list (cons 43 zs))
  113.                 (list (cons 50 (/ (* PI rot) 180.0)))
  114.         ))

  115. ))
  116. (if name (entlast) nil)
  117. )


  118. (defun c:makeblock ()
  119. (makeblock (getstring "\nName: ") (getpoint "\nInsertionpoint: ") (ssget) 1 1 1 0 )
  120. )

  121. (princ "\nXSCALE: scales AutoCAD Entities non-uniformly in X-,Y- and Z-direction!")
  122. (prin1)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-4-26 18:54:08 | 显示全部楼层
可惜pline线变成line,宽度等还是不能保留
谢谢nmsssb 等楼上的各位高手 !顺祝各位五一节休息的好!!?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-5 23:00:17 | 显示全部楼层
最初由 lain 发布
[B]可惜pline线变成line,宽度等还是不能保留
谢谢nmsssb 等楼上的各位高手 !顺祝各位五一节休息的好!!? [/B]

那位大虾能把这个问题解决一下?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-6-5 23:37:18 | 显示全部楼层
这种方法是先将实体生成一个块,而块则可以进行X、Y或者Z方向的比例缩放,最后再将块炸开,这样块中的多段线就自然变成直线了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-5 23:52:12 | 显示全部楼层
可以当时不炸开吗?当然,如果必要的话可以自己事后在炸开.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-6-6 00:15:23 | 显示全部楼层
当然可以,将程序中的(command "._explode" (entlast))这一句去掉就不会炸开了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-6 11:28:43 | 显示全部楼层
不行.
将程序中的(command "._explode" (entlast))这一句去掉后,加载程序时提示:: (LOAD "C:/Documents and Settings/madbull1/桌面/xscale.lsp") ; 错误:
语法错误.如果去掉(defun xscale (sset basp xscale yscale zscale / )
(if (makeblock "*" basp sset xscale yscale zscale 0)
        (command "._explode" (entlast))
)
)
加载时不提示有错误了,但是缩放后物体仍被炸开.
另外我还担心:即使物体不被砸开了,如果在同一张图中缩放两个以上的物体,块名称会不会又冲突?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-23 06:48:54 | 显示全部楼层

XY可以不等比例缩放

你输入缩放比例命令后在输入X就可以了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-3-20 09:23:55 | 显示全部楼层
还是涉及到块,并炸开后都变成了直线了,能不能不用块就可以实现xyz不同比例缩放呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-21 02:13 , Processed in 0.215169 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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