乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 33|回复: 10

[编程交流] 创建新的当前层

[复制链接]

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 20:19:26 | 显示全部楼层 |阅读模式
 
我从中找到这个Lisp程序(http://autolispgs.blogspot.com/2013/02/create-new-layer.html),我希望新创建的层成为当前层。
 

 
(defun c:新层(/层名称颜色)
;;作者:Ganesh Shetty,版权所有©2013-http://autolispgs.blogspot.in
(setq Layername(getstring“\n输入新层名称:”))
(如果(不是(Tblsearch“LAYER”Layername))
(程序
(setq color(getint“\n输入新层的颜色类型:”))
(命令“_Layer”“New”layername“c”color layername“”)
(princ(strcat“layer\”layername“Created.”)
)
(princ“\n层名称已存在。”)
)
(普林斯)
);结束defun
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 20:26:25 | 显示全部楼层
 
我在autolispgs上找到了这个lisp。blogspot。com,我想知道是否有人可以添加到它。我希望创建的新层成为当前层。
 
(defun c:新层(/层名称颜色)
;;作者:Ganesh Shetty,版权所有©2013-http://autolispgs.blogspot.in
(setq Layername(getstring“\n输入新层名称:”))
(如果(不是(Tblsearch“LAYER”Layername))
(程序
(setq color(getint“\n输入新层的颜色类型:”))
(命令“_Layer”“New”layername“c”color layername“”)
(princ(strcat“layer”“layername”“Created.”)
)
(princ“\n层名称已存在。”)
)
(普林斯)
);结束defun
 
泰。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 20:34:12 | 显示全部楼层
欢迎来到CADTutor。
 
也许这对你有用?
 
  1. (defun c:NewLayer () (command "._-layer" "_m" pause "_c" pause "" "") (princ))

 
 
 
干杯
 
 
 
P、 请使用[代码]标签。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:38:38 | 显示全部楼层
检查新图层名是否有效是这方面的重要问题之一。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 20:45:45 | 显示全部楼层
 
你还没有测试代码,是吗?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:53:29 | 显示全部楼层
对不起,我正在关注OP来考虑这个问题
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 20:58:32 | 显示全部楼层
太好了,谢谢
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 21:06:21 | 显示全部楼层
 
LAYER命令的Make(_m)关键字利用LayerTable对象的Add()方法(也称为vla Add),该方法将获取或创建相应的LAYERTABLECORD,给定作为字符串提供的名称参数。
 
举个简单的例子:
 
  1. (defun _GetOrCreateLayer (doc layerName)
  2. (vlax-invoke
  3.    (vla-get-layers doc)
  4.    (if (tblsearch "layer" layerName)
  5.      'item
  6.      'add
  7.    )
  8.    layerName
  9. )
  10. )

 
 
... 可以替换为:
 
  1. (defun _GetOrCreateLayer2 (doc layerName)
  2. (vla-add (vla-get-layers doc) layerName)
  3. )

 
 
... 这不仅更简洁,而且在性能方面更高效。
 
 
 
 
不客气,巴帕特里;我很乐意帮忙。
 
干杯
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 21:11:17 | 显示全部楼层
设置电流
 
  1. (command "_Layer" "New" layername "c" color layername "")
  2. new
  3. (command "_Layer" "New" layername "c" color layername "S" layername "")
  4. or
  5. command "_Layer" "New" layername "c" color layername "")(setvar "clayer" layername)
回复

使用道具 举报

18

主题

434

帖子

422

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
94
发表于 2022-7-5 21:14:32 | 显示全部楼层
试试这个:
  1. (defun c:Newlayer (/ Layername Color)
  2. ;;Author:Ganesh Shetty, Copyright © 2013 -http://autolispgs.blogspot.in
  3. ;  -a small modification: If a new layer is created, it will become the current one
  4. ;  -Fuccaro M.  2015-01-22
  5. (setq Layername(getstring "\nEnter New Layer Name:"))
  6. (if (not (Tblsearch "LAYER" Layername))
  7. (progn
  8. (setq color(getint "\nEnter Color Type for New Layer:"))
  9. (command "_Layer" "Make" layername "c" color layername "")
  10. (princ(strcat "\nLayer "" layername ""Created ."))
  11. )
  12. (princ "\nLayer Name Already exist.")
  13. )
  14. (princ)
  15. );end defun
+
 
我看到你已经得到了你的请求的答案,我将合并这两个线程
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 08:57 , Processed in 1.382294 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表