明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1583|回复: 4

请帮忙改一下这个程序

[复制链接]
发表于 2012-2-23 17:01:25 | 显示全部楼层 |阅读模式
这个程序是以前在论坛里面下载的,忘记是哪位大虾写的了,这段时间经常用到,可是发现有个不是很方便的地方,所以请高手帮忙改一下,把偏移后的线段变成目前层。比如原封闭线图层是PH层,当前层是D层,偏移出来的线段就是D层,原来的的封闭线不变;如果当前层是1层,偏移出来的线段就是1层,原来的的封闭线不变;就这样。
源码如下
;;;;封闭线单段偏移
(defun c:oo (/ od ss_1 s1 s3 s2 sa sa1 ssK3 e)
  (Setvar "cmdecho" 0)
  (command "_undo" "g")
  (setq od (getvar 'offsetdist))
  (princ "\n 请输入偏移复制距离<")
  (princ od)
  (princ ">")
  (setq od (getreal))
  (if od
    (setvar 'offsetdist od)
  )
  (prompt "\n 请选择要偏移复制的图元")
  (SETQ ss_1 NIL)
  (WHILE (null ss_1)
    (setq ss_1 (entsel))
  )
  (SETQ S1 (CaR SS_1))
  (redraw s1 3)
  (prompt "\n 请选择偏移复制方向")
  (setq s3 (getpoint))
  (IF (= (cdr (assoc 0 (entget s1))) "LWPOLYLINE")
    (PROGN
      (setq s2 (CAR (cdr ss_1)))
      (setq sa (entlast))
      (command "_explode" s1)
      (setq sa1 (ssnamex (ssget s2)))
      (setq ssk3 (ssadd))
      (setq e (entnext sa))
      (ssadd e ssk3)
      (while e
        (setq e (entnext e))
        (if e
          (ssadd e ssk3)
        )
      )
      (SETQ s1 (nth 1 (car sa1)))
      (command "_offset" "" s1 s3 "")
      (command "_pedit" s1 "" "j" ssk3 "")
    )
    (command "_offset" "" s1 s3 "")
  )
  (command)
  (command "_undo" "e")
  (princ)
)

发表于 2012-2-23 19:16:17 | 显示全部楼层
在 (command "_offset" "" s1 s3 "")
之后加
(setq en (entlast))
  (command"change" en "" "p" "la" (getvar"clayer") "" )
即可
发表于 2012-2-23 19:30:08 | 显示全部楼层
本帖最后由 yjr111 于 2012-2-23 23:25 编辑

也可以这样
  1. ;;;;封闭线单段偏移
  2. (defun c:oo (/ od ss_1 s1 s3 s2 sa sa1 ssK3 e)
  3.   (vl-load-com)
  4.   (setq mycad(vlax-get-acad-object)
  5.         mydoc(vla-get-ActiveDocument mycad)
  6.         myms(vla-get-ModelSpace mydoc)
  7.         )
  8. (setq nowLayer(vla-get-name (vla-get-ActiveLayer mydoc)))
  9. (setvar "clayer" nowLayer)
  10.   (Setvar "cmdecho" 0)
  11.   (command "_undo" "g")
  12.   (setq od (getvar 'offsetdist))
  13.   (princ "\n 请输入偏移复制距离<")
  14.   (princ od)
  15.   (princ ">")
  16.   (setq od (getreal))
  17.   (if od
  18.     (setvar 'offsetdist od)
  19.   )
  20.   (prompt "\n 请选择要偏移复制的图元")
  21.   (SETQ ss_1 NIL)
  22.   (WHILE (null ss_1)
  23.     (setq ss_1 (entsel))
  24.   )
  25.   (SETQ S1 (CaR SS_1))
  26.   (redraw s1 3)
  27.   (prompt "\n 请选择偏移复制方向")
  28.   (setq s3 (getpoint))
  29.   (IF (= (cdr (assoc 0 (entget s1))) "LWPOLYLINE")
  30.     (PROGN
  31.       (setq s2 (CAR (cdr ss_1)))
  32.       (setq sa (entlast))
  33.       (command "_explode" s1)
  34.       (setq sa1 (ssnamex (ssget s2)))
  35.       (setq ssk3 (ssadd))
  36.       (setq e (entnext sa))
  37.       (ssadd e ssk3)
  38.       (while e
  39.         (setq e (entnext e))
  40.         (if e
  41.           (ssadd e ssk3)
  42.         )
  43.       )
  44.       (SETQ s1 (nth 1 (car sa1)))
  45.       (command "_offset" "" s1 s3 "")
  46.       (vla-put-Layer (setq vla_e1(vlax-ename->vla-object (entlast))) nowlayer)
  47.       (vla-put-Color vla_e1 acbylayer)
  48.       (command "_pedit" s1 "" "j" ssk3 "")
  49.     )
  50.     (progn
  51.     (command "_offset" "" s1 s3 "")
  52.     (vla-put-Layer (setq vla_e1(vlax-ename->vla-object (entlast))) nowlayer)
  53.     (vla-put-Color vla_e1 acbylayer)
  54.     )
  55.     )
  56.   (command)
  57.   (command "_undo" "e")
  58.   (princ)
  59. )
发表于 2012-2-23 19:44:29 | 显示全部楼层
AUTOCAD自带的偏移命令就有更改到当前层的选项
 楼主| 发表于 2012-2-24 08:11:13 | 显示全部楼层
谢谢两位大虾了。如果要连续操作偏移的动作呢?有应该在哪里改呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-25 02:38 , Processed in 0.151177 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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