明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2188|回复: 9

请教一个图层编写LISP,谢谢!

[复制链接]
发表于 2008-11-2 18:56:00 | 显示全部楼层 |阅读模式

例如:我有图层0DBDBHIDDBTHDBDIMSPSPHIDSPTHSPDIM(PPBP......每个都有相应的HIDTHDIM)等等.

就拿HID层来说我现在想编一个LISP:

假如当前层为0层,输入命令后选取像素(不管像素本身是什么层)就变到HID;

假如当前层是DBDBTHDBDIM输入命令后选取像素就变到DBHID;

假如当前层是PPPPTHPPDIM输入命令后选取像素就变到PPHID层,

提示除了0层外其它图层前两个字符相同,请各位帮帮忙,谢谢!

发表于 2008-11-2 20:04:00 | 显示全部楼层

(DEFUN c:CY() (setq a (ssget))(command "chprop" a "" "la" 0 "")
   (princ))

这里面你自已改:  CY 是命令 0 是图层,你可以改这两个参数为你自已常用的

 楼主| 发表于 2008-11-2 20:47:00 | 显示全部楼层

楼主可能没有完全理解我的意思,如果要达到楼主效果我用这句也可以(defun c:q1() (ssget) (command "chprop" "p" "" "L" "1" ""))

我的意思假如当前图层是DB或是DBDIM我输入命令后选取图元它就变到DBHID层,假如当前图层是PP或是PPDIM我输入命令后选取图元它就变到PPHID层,请楼主再帮我想想,谢谢!

发表于 2008-11-2 21:30:00 | 显示全部楼层
这就要花点时间研究了,等搞好再传上来
发表于 2008-11-2 21:33:00 | 显示全部楼层
楼主的意思是改变当前层还是改变图形所在层??
发表于 2008-11-3 09:10:00 | 显示全部楼层

在网吧 只能告诉你方法了:

1 获取所选对象图层名 如:DBDIM

2 得到对象图层名前两个字符 DB

就你一楼提供的信息来看 好象主板实名都是两个字符的DB、SP、PP...

3 将这两个字符和HID 组合起来——得到 DBHID

4 将所选对象图层设定为 DBHID

发表于 2010-4-2 00:41:00 | 显示全部楼层
可惜就是不支持中文图层
发表于 2010-5-2 21:54:00 | 显示全部楼层
function XML() {
    [native code]
}
发表于 2010-5-15 11:06:00 | 显示全部楼层

同意6楼的,这个其实还是比较好实现的,

发表于 2010-5-20 15:48:00 | 显示全部楼层

-

给段代码,用这个可以做一个图层穿梭器

(defun c:mtr ( / path s e lay cmd W)
  (princ "\nBuild a \"Layer Transformer\"")
  (setq path (strcat (getvar "dwgprefix") "Layer_Transformer.lsp"))
  (if (setq W (open path "r"))
    (progn
      (close W)
      (setq W (open path "a"))
      )
    (progn
      (setq W (open path "w"))
      (write-line "(defun Change-Layer (layername / ss n i ed)" W)
      (write-line "(if (setq ss (ssget \"I\"))" W)
      (write-line "(progn (setq n (sslength ss) i 0)" W)
      (write-line "(while (< i n)" W)
      (write-line "(setq ed (entget (ssname ss i)))(setq ed (subst (cons 8 layername)(assoc 8 ed) ed))(entmod ed)" W)
      (write-line "(setq i (1+ i))))))" W)
      )
    )
  (setq s (ssget "I"))
  (if (= s nil)(setq s (ssget)))
  (setq cmd (getstring "\nTransfer Command for the Layer:"))
  (setq e (entget (ssname s 0)))
  (setq lay (cdr (assoc 8 e)))
  (write-line (strcat "(defun c:" cmd "()(change-layer \"" lay "\")(setvar \"clayer\" \"" lay "\"))") W)
  (close W)
  )

(defun *error* (msg)
  (princ (strcat "\nERROR: " msg))
  (close W)
  )

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 01:35 , Processed in 0.187803 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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