明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2382|回复: 20

[源码] 你会 stretch (拉伸)吗?

[复制链接]
发表于 2019-7-8 11:58 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 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)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-7-9 10:30 | 显示全部楼层
感觉CAD的拉升命令原本就可以了,尤其高版本CAD,已经很智能。这么多年来,一直只是在acad.lsp中加了(defun C:S()(command "stretch""c"))一句,完全够用了。
回复 支持 1 反对 0

使用道具 举报

发表于 2019-7-8 18:57 | 显示全部楼层
(defun c:st1( / dx1  dx2 )
        (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))
发表于 2019-7-9 10:01 | 显示全部楼层
本帖最后由 e2002 于 2019-7-9 10:15 编辑

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

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

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

发表于 2019-7-8 13:35 | 显示全部楼层
感觉不如原CAD命令直观!没有虚线表示位置等。
发表于 2019-7-8 16:43 | 显示全部楼层
感觉楼主的实力是有的 但是研究偏了  大材小用了

点评

你知道我为何用 SELECT吗?我要选择的“蚂路”,这个你能看出吗?我真的和挑剔。  发表于 2019-7-8 19:07
嗯?可不偏啊,只要画图快的代码,再好不快,入不了我得眼。  发表于 2019-7-8 17:41
发表于 2019-7-9 10:48 | 显示全部楼层
你想的效果是这样的吧,与原有的一样有动态效果,可以点选点,也可以输入,还可以设默输入值,记住上次的输入

本帖子中包含更多资源

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

x

点评

源码啊?大家研究研究,学习学习。。。。。  发表于 2019-7-9 19:03
发表于 2019-7-9 16:36 | 显示全部楼层
不知道楼主要不要这样的,类似尺寸驱动,实际上也是stretch,这是我用的软件集成的功能,单独的没有。


本帖子中包含更多资源

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

x

点评

嗯,算属于标注类的功能吧,也不错。  发表于 2019-7-9 19:08
发表于 2019-7-9 18:58 | 显示全部楼层
看了楼主的功能,我在使用过程中觉得拉伸也应该加强一点,除了cad自带拉伸的基本功能,如果再增加参照就好 了,例如我需要拉伸线端点1,可以参照2为起点拉长至3点

本帖子中包含更多资源

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

x

点评

stretch命令本来就可以这么选点操作呀。  发表于 2019-7-9 21:53
你说的对,目前,我对块,参照什么的不感冒,我第一步,全部炸开、绑定,清理整图,纯CAD实体画图。。。。  发表于 2019-7-9 19:05
发表于 2019-7-9 20:12 | 显示全部楼层
琴剑江山_10184 发表于 2019-7-9 10:48
你想的效果是这样的吧,与原有的一样有动态效果,可以点选点,也可以输入,还可以设默输入值,记住上次的输 ...

别人的工具里面的功能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 03:51 , Processed in 0.869161 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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