yaokui25 发表于 2012-12-20 22:47:15

这样的框选 偏移如何实现

本帖最后由 yaokui25 于 2012-12-25 11:26 编辑

最近迷上了lisp
但是了解甚少
很多基础的东西还不是很了解,试着自己变了一些代码
下面的代码该如何实现,请大家指点迷津
框选 A 图层的多段线,同时偏移3mm(数值可输入最好),框选的对象归到 B 层
还有一个就是偏移之后的多段线,放到一个指定的图层C
上面的想法已经超过了我能力范围
恳请大家帮忙

(DEFUN C:J_TT ( / )
(command "layer" "make" "B" "Color""251" "" "l" "Continuous" "" "P" "N" """")
(command "layer" "make" "C" "Color""1" "" "l" "Continuous" "" "P" "P" """")
(setq ss (ssget'((0 . "LWPOLYLINE")(8 . "A" ))))
(command "_offset" "3" SS "0,0,0"    "Chprop" SS "" "layer" "B "_color" "_bylayer"
    "")
)

hahap 发表于 2016-10-7 00:15:59

c961806787 发表于 2012-12-25 15:02
(defun c:off()
    (setq chklay (tblsearch "layer" "B"))
    (if (null chklay)(command "-layer" "n ...

很好的解决我当前的问题,谢谢了

yaokui25 发表于 2012-12-21 07:25:37

为什么那么多人看,没人回复啊

杨如迁 发表于 2012-12-21 08:53:50

yaokui25 发表于 2012-12-21 10:06:11

杨如迁 发表于 2012-12-21 08:53 static/image/common/back.gif


老杨,不许笑

yaokui25 发表于 2012-12-21 11:51:44

大家过来看看,帮帮忙吧

yaokui25 发表于 2012-12-23 20:14:45

大家过来看看,帮帮忙吧

c961806787 发表于 2012-12-24 23:04:35

本帖最后由 c961806787 于 2012-12-24 23:04 编辑

给你一个思路。先用offset偏移,然后修改两个多段线的属性。

yaokui25 发表于 2012-12-25 11:27:43

c961806787 发表于 2012-12-24 23:04 static/image/common/back.gif
给你一个思路。先用offset偏移,然后修改两个多段线的属性。

嘿嘿~我也想这么弄,可是自己掌握的水平有限啊
等待高手相助

c961806787 发表于 2012-12-25 15:02:40

本帖最后由 c961806787 于 2012-12-25 15:04 编辑

(defun c:off()
    (setq chklay (tblsearch "layer" "B"))
    (if (null chklay)(command "-layer" "n" "B" "c" 4 "B" ""))
    (setq chklay (tblsearch "layer" "C"))
    (if (null chklay)(command "-layer" "n" "C" "c" 5 "C" ""))
    (princ "\n选择多段线:")
    (setq ss (ssget))
    (initget "左 右")
    (setq sd (getkword "\n选择偏移方向<左/右>"))
    (setq dd (getreal "\n输入偏移距离<3mm>"))
    (if (null dd) (setq dd 3))
    (setq nn 0)
    (repeat (sslength ss)
      (setq en (ssname ss nn))
      (setq en_data (entget en))
      (setq entype (cdr (assoc 0 en_data)))
      (if (= entype "LWPOLYLINE")
          (chg_en)
        )
      (setq nn (1+ nn))
    )
    (prin1)
)
(defun chg_en()
    (setq old_pt (cdr (assoc 10 en_data)))
    (setq pt_x (car old_pt))
    (setq pt_y (cadr old_pt))
    (cond ((= sd "左") (setq new_pt (list (1- pt_x) pt_y)))
          ((= sd "右") (setq new_pt (list (1+ pt_x) pt_y)))
    )
    (command "offset" dd en new_pt "")
    (setq en1 (entlast))
    (setq en1_data (entget en1))
    (setq layer_list (assoc 8 en_data))
    (setq layer (cdr layer_list))
    (setq layer1_list (assoc 8 en1_data))
    (setq layer1 (cdr layer1_list))
    (princ (strcat "\n原图层为[" layer "]"))
    (setq new_layer_list (cons 8 "B"))
    (setq new_layer1_list (cons 8 "C"))
    (setq en_data (subst new_layer_list layer_list en_data))
    (setq en1_data (subst new_layer1_list layer1_list en1_data))
    (entmod en_data)
    (entmod en1_data)
)
;查找一下,把“B”、“C”图层改成你需要的图层。快捷键off

CTC 发表于 2012-12-25 23:30:55

c961806787 发表于 2012-12-25 15:02
(defun c:off()
    (setq chklay (tblsearch "layer" "B"))
    (if (null chklay)(command "-layer" "n ...

偏移方向还是通过点击在哪边就偏哪边好一点
页: [1] 2
查看完整版本: 这样的框选 偏移如何实现