edm520 发表于 2019-11-23 09:50:45

网上找的源码觉得好用,希望有大神在这基础上加个可以批量偏移,感激不尽啊,本人小白

(DEFUN C:OC() (vl-cmdf "_.undo" "_group")
               (mapcar 'princ (list "Current offset dist= " (getvar "OFFSETDIST")" "))
               (setq di (getstring "\输入偏移距离:"))
               (setq o (ssget))
               (setq po (getpoint "\nSide to offset"))
               (setq LAY (getvar "CLAYER"))
               (if (/= di nil)
               (COMMAND "OFFSET" di o po "")
               (COMMAND "CHPROP" "L" "" "LA" lay "LT" "bylayer" "C" "bylayer" ""))
               (if (= di nil)
               (COMMAND "OFFSET" "" o po "")
               (COMMAND "CHPROP" "L" "" "LA" lay "LT" "bylayer" "C" "bylayer" ""))
               (vl-cmdf "_.undo" "_end")(princ))

言戲無軍 发表于 2019-11-26 15:13:47

你不会框选对象吗

edm520 发表于 2019-11-23 14:17:50

没人,自己顶顶:'(

edm520 发表于 2019-11-25 10:27:10

wyl219 发表于 2019-11-25 11:26:06

这个程序好像是选择一个对象偏移并将新生成的对象放到当前层.



;|
说明:偏移对象并将偏移后的对象设置为当前图层.
可选择是否批量偏移,如果不需要选择,可以注释掉        (setq mor (getstring "\n空格为单个偏移,其他任意字符为多个偏移:")) 行
批量偏移时按空格结束偏移.
偏移后统一修改对象图层
|;

(defun c:OC ( / oldOSMODE di_key di o mor po layss_tmp )
        (vl-load-com)
        (setvar "cmdecho" 0)
        (command "_undo" "be")
        (setq oldOSMODE (getvar "OSMODE"))
       
        ;start部分结束

        (initget "a")
        (setq di_key (getreal (strcat "\n输入偏移距离,输入a为" (vl-princ-to-string (setq di (getvar "OFFSETDIST"))) ",空格为点选位置:")))
                (cond ((not di_key);输入空格
                                        (setq di ""))
                ((equal "a" di_key);输入为a,不修改di
                )
                (t ;如果输入了偏移距离,则将di的值设为其值
                        (setq di di_key)
                )
        )
                (setq o (car (entsel "\n选择需要偏移的对象")));由于offset不适用于选择集,修改为entsel
        (setq mor (getstring "\n空格为单个偏移,其他任意字符为多个偏移:"))

        (setq po (getpoint "\n选择偏移的点"))
        (setq LAY (getvar "CLAYER"))

        (setq ss_tmp (ssadd))
        (if (/= "" mor)
                (progn
                        (COMMAND "OFFSET" di o po "")
                        (while (setq po (getpoint "\n选择下一个偏移的点"))
                                (ssadd (entlast) ss_tmp)
                                (COMMAND "OFFSET" di (setq o (entlast)) po "")
                        )
                )
                (COMMAND "OFFSET" di o po "")
        )
        (ssadd (entlast) ss_tmp)

        (COMMAND "CHPROP" ss_tmp "" "LA" lay "LT" "bylayer" "C" "bylayer" "")
       
        ;end部分开始
        (setvar "OSMODE" oldOSMODE)
        (command "_undo" "e")
        (setvar "cmdecho" 1)
)
(princ)

edm520 发表于 2019-11-26 14:32:29

wyl219 发表于 2019-11-25 11:26
这个程序好像是选择一个对象偏移并将新生成的对象放到当前层.




谢谢大神啊 ,我要不是这样的,我要那种可以窗选很多图形,然后一次性偏移,不要这种连续的

edm520 发表于 2019-11-26 14:34:36

wyl219 发表于 2019-11-25 11:26
这个程序好像是选择一个对象偏移并将新生成的对象放到当前层.




有时候图形要改间隙,一个个改特麻烦

edm520 发表于 2019-11-26 14:41:16

wyl219 发表于 2019-11-25 11:26
这个程序好像是选择一个对象偏移并将新生成的对象放到当前层.




能帮改改吗,改成窗选多个图形偏移:loveliness:

言戲無軍 发表于 2019-11-26 15:13:27

这个就可以窗选多个图形

wyl219 发表于 2019-11-26 17:24:43

edm520 发表于 2019-11-26 14:41
能帮改改吗,改成窗选多个图形偏移

本来也原程序也没实现框选偏移,因为用offset命令本来也不能操作选择集
多个对象偏移只通过一个点来判断,你确定不会出问题么.
如果是统一方向偏移,用copy不好么....
页: [1] 2
查看完整版本: 网上找的源码觉得好用,希望有大神在这基础上加个可以批量偏移,感激不尽啊,本人小白