尘缘一生 发表于 2019-7-8 11:58:26

你会 stretch (拉伸)吗?

本帖最后由 尘缘一生 于 2019-7-8 12:01 编辑

    CAD拉伸命令不大好用,为此,搜遍本坛,都没有找到一个合适的代码,也许你会说,很多啊,确实,很多,但不符合我这“挑剔”的人,因为我是画图的,不是写代码的

    下面拼凑几句代码,暂时自己用吧,没办法。

   因为本坛高手如云,谁能写个反应器吗?记录键盘的输入,如果有输入,就记录存于变量,即可进一步:实现“记忆距离的拉伸”。

;;;;;;;三领-拉伸;;;;;;框选样式代码;;;;;;;;;;;;;;;;;;;;;;;;
;;:1:可以定点定距离
;;:2:可以任意拉伸;;:3:可以输入距离拉伸
;;;4:和原CAD一样,具有拖曳效果
(defun c:slstrch (/ ss oldorh oldosm basicpoint)
(vl-cmdf "select" "c" pause)
(setq ss (ssget "p"))
(setq oldorh (getvar "ORTHOMODE"))
(setq oldosm (getvar "OSMODE"))
(setvar "ORTHOMODE" 1) ;;;正交打开
(setvar "OSMODE" 16383) ;;;;;对象捕捉 开
(setq basicpoint (getpoint "\n指定基点(右键任意拉伸)或【输入距离D】:"))
(if (= nil basicpoint)
    (setq basicpoint (nth 1 (grread 5)))
)
(command "_.stretch" ss "" basicpoint pause)
(setvar "ORTHOMODE" oldorh) ;;;恢复正交
(setvar "OSMODE" oldosm) ;;;;;恢复捕捉
(princ)
)

ll_j 发表于 2019-7-9 10:30:57

感觉CAD的拉升命令原本就可以了,尤其高版本CAD,已经很智能。这么多年来,一直只是在acad.lsp中加了(defun C:S()(command "stretch""c"))一句,完全够用了。

htlaser 发表于 2019-7-8 18:57:01

(defun c:st1( / dx1dx2 )
        (setq dx2 (getstring "\n命令:请输入板厚往左拉伸): "))
        (cond
                ((= DX2 "0.8")        (setq dx1        (list        -1.25        0        )))
                ((= DX2 "1")          (setq dx1        (list        -1.6        0        )))
                ((= DX2 "1.2")        (setq dx1        (list        -2        0        )))
                ((= DX2 "1.5")        (setq dx1        (list        -2.5        0        )))
                ((= DX2 "2")          (setq dx1        (list        -3.3        0        )))
                ((= DX2 "2.5")        (setq dx1        (list        -4        0        )))
                ((= DX2 "3")          (setq dx1        (list        -5        0        )))
                ((= DX2 "4")          (setq dx1        (list        -6.8        0        )))
                ((= DX2 "5")          (setq dx1        (list        -9        0        )))
                ((= DX2 "6")          (setq dx1        (list        -10        0        )))
                (t (setq dx1 (list 0 0))))
        (princ "\n-->请框选拉伸物体到折弯位置左拉伸:")
        (command
                "stretch" "c" pause pause "" '(0 0)         dx1
                "stretch" "c" pause pause "" '(0 0)         dx1
                "stretch" "c" pause pause "" '(0 0)         dx1
                "stretch" "c" pause pause "" '(0 0)         dx1
                "stretch" "c" pause pause "" '(0 0)         dx1
                "stretch" "c" pause pause "" '(0 0)         dx1
                "stretch" "c" pause pause "" '(0 0)         dx1
                "stretch" "c" pause pause "" '(0 0)         dx1
        )        (princ))

e2002 发表于 2019-7-9 10:01:42

本帖最后由 e2002 于 2019-7-9 10:15 编辑

拖拽效果,AutoLISP目前就莫指望了。

记忆距离这个还是很简单的。
你上面代码改改就可以了,
例如if 改为while,
在循环内可以一直保存所有之前输入过的距离值,并出现在提示字符串中。
你的提示字符串修改为标准写法: 选项们用“[]”包住,各选项如果用中文,光键字母用“()”包住。

很早以前就写过这种,那时候是做多重选择集的共同stretch的。后来stretch命令改进了支持多个不同位置的对象了,就不再需要那个老程序。
就如上面沙发贴中说的,固然标准stretch命令不够好用(缺少距离值记忆等),但程序因为getpoint不支持动态,写这么个程序没什么实际意义。
如果需要重复多次操作,之前的输入距离值可以用光标键往回翻出来也就是了。

G〆h 发表于 2019-7-8 13:35:13

感觉不如原CAD命令直观!没有虚线表示位置等。

依然小小鸟 发表于 2019-7-8 16:43:44

感觉楼主的实力是有的 但是研究偏了大材小用了

琴剑江山_10184 发表于 2019-7-9 10:48:11

你想的效果是这样的吧,与原有的一样有动态效果,可以点选点,也可以输入,还可以设默输入值,记住上次的输入

panliang9 发表于 2019-7-9 16:36:16

不知道楼主要不要这样的,类似尺寸驱动,实际上也是stretch,这是我用的软件集成的功能,单独的没有。


lingduwx 发表于 2019-7-9 18:58:15

看了楼主的功能,我在使用过程中觉得拉伸也应该加强一点,除了cad自带拉伸的基本功能,如果再增加参照就好 了,例如我需要拉伸线端点1,可以参照2为起点拉长至3点

琴剑江山_10184 发表于 2019-7-9 20:12:55

琴剑江山_10184 发表于 2019-7-9 10:48
你想的效果是这样的吧,与原有的一样有动态效果,可以点选点,也可以输入,还可以设默输入值,记住上次的输 ...

别人的工具里面的功能
页: [1] 2
查看完整版本: 你会 stretch (拉伸)吗?