xyp1964
发表于 2011-2-26 18:01:57
(defun c:tt (/ pt sc ss)
(defun ureal (bit kwd msg def / inp)
(if def
(setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")
bit (* 2 (fix (/ bit 2)))
)
(setq msg (strcat "\n" msg ": "))
)
(initget bit kwd)
(setq inp (getreal msg))
(if inp
inp
def
)
)
(setvar "CMDECHO" 0)
(setq NO1 (UREAL 7 "" "缩放值" NO1))
(princ "\n选择缩放实体<退出>: ")
(while (and (setq ss (ssget))
(setq pt (getpoint "\n指定一点<退出>: "))
)
(command ".scale" "non" ss "" pt (/ 1.0 NO1))
(princ "\n选择缩放实体<退出>: ")
)
(setvar "CMDECHO" 1)
(princ)
)
hhh454
发表于 2011-2-28 10:26:12
回复 xyp1964 的帖子
谢谢院长,感谢。
hhh454
发表于 2011-2-28 10:28:05
回复 guankuiwu 的帖子
这个代码的功能和sc一样,就是省去了每次都要输入比例值。
669423907
发表于 2011-4-7 23:17:09
都是好程序啊!
不知能否做到连续缩放呢?
daiguafan
发表于 2011-4-8 21:38:21
呵呵,学习了,谢谢
先进者
发表于 2012-4-11 23:41:57
本帖最后由 先进者 于 2012-4-11 23:43 编辑
;角度阵列程序;(2005.8.5胡晓航(Angle array routine),
(defun C:AAR ( / ss ang bp cnt dist d)
(PRINC "\n 角度阵列 ")
(cond
((setq ss (ssget))
(initget 1)
(setq bp (getpoint "\n基点: "))
(initget 1)
(setq ang
(getangle bp "\n阵列方向: "))
(initget 7)
(setq dist
(getdist "\n对象间距: "))
(initget 7)
(setq cnt (getint "\n对象个数: "))
(setq d 0.0)
(setvar "cmdecho" 0)
(command "_.undo" "_g"
"_.copy" ss "" "_m" bp)
(repeat (1- cnt)
(command
(polar bp ang (setq d (+ d dist)))))
(command "" "_.undo" "_e")
)
)
(princ)
)
能不能帮我在对象间距和对象个数那里加个记忆功能
xyp1964
发表于 2012-4-12 08:02:02
;; 角度阵列程序需要e派工具箱的支持
(defun C:tt (/ ss bp d)
(setq ang(Uangle 1 "" "阵列方向<输入或鼠标直接量取>" ang nil)
dist (Udist 1 "" "间距<输入或鼠标直接量取>" dist nil)
cnt(Uint 7 "" "次数" cnt)
)
(PRINC "\n选择实体: ")
(if (setq ss (ssget))
(progn
(setq bp '(0 0)
d0.0
)
(command "_.copy" ss "" "_m" bp)
(repeat (1- cnt)
(command
(polar bp ang (setq d (+ d dist)))
)
)
(command "")
)
)
(princ)
)
露草
发表于 2012-4-12 18:49:59
这个应该比较简单啊不过每次要按次确定 也是麻烦
xyp1964
发表于 2012-4-12 21:13:53
;; 参数相对多时,还是用对话框方式比较方便
;; 角度阵列需要e派工具箱的支持
(defun c:tt (/ ilst)
(cmdla0)
(defun main-pro (/ ss bp d)
(PRINC "\n选择实体: ")
(if (setq ss (ssget))
(progn
(setq bp '(0 0)
d0.0
)
(command "_.copy" ss "" "_m" bp)
(repeat (1- cnt)
(command
(polar bp (xyp-d2r ang) (setq d (+ d dist)))
)
)
(command "")
)
)
)
(xyp-initSet '(ang dist cnt) '(30. 1000. 6))
(setq ilst '(("" "参数" ":boxed_column{")
("ang" "阵列方向" "real" "12")
("dist" "间距" "real" "12")
("cnt" "次数" "int" "12")
"spacer;"
"}"
)
)
(if (= (xyp-Dcl-Init Ilst "【角度阵列】" t) 1)
(main-pro)
)
(cmdla1)
)
langjs
发表于 2012-4-13 01:03:46
我一般带记忆功能这样实现的,代码比较容易懂,其中 scalebak 为全局变量
(if (null scalebak)(setq scalebak 100.0))
(if (setq s (getreal (strcat "\n比例值<" (rtos scalebak 2 2) ">:")))
(setq scalebak s)
)