乐筑天下

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

[编程交流] Can't set layer to be cur

[复制链接]

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 07:31:10 | 显示全部楼层 |阅读模式
I can't seem to set the created layer to current in this lisp.  It does everything apart from that.  Can some point me in the direction please?
 
 
  1. (defun C:kerb () (setq SUCE (getvar "cmdecho")) (setq SUOM (getvar "orthomode")) (setq SUSM (getvar "osmode")) (setq SUAB (getvar "angbase")) (setq SUAD (getvar "angdir")) (setq SUCL (getvar "clayer")) (setq SUCR (getvar "cecolor"))(setq vl1 (list        (cons 0 "LAYER")                ;Name of entity        (cons 100 "AcDbSymbolTableRecord")                                        ;Open Records        (cons 100 "AcDbLayerTableRecord")                                        ;Locate Layer Table        (cons 2 "CCC_LAYOUT_Proposed_Kerb_160mm")                                ;Name of Layer        (cons 6 "Continuous")                                                ;Linetype        (cons 62 6)                                                        ;colour = light grey        (cons 70 0)                                                        ;state        (cons 290 1)                                                        ;1=plot, 0=Don't plot                )                                                        ;End of entity list        )        (entmake vl1)(setvar "clayer" "CCC_LAYOUT_Proposed_Kerb_160mm")  (command "_.-layer" "_LW" "0.6" "CCC_LAYOUT_Proposed_Kerb_160mm" "")(command "_-color" "bylayer")(setvar "angbase" 0.0000)         (setvar "angdir"  0)         (setvar "orthomode" 0)         (setvar "plinegen" 1)           (setvar "osmode" 0)           (command "_.pline")           (setvar "osmode" 16383) (setvar "cmdecho" SUCE) (setvar "orthomode" SUOM) (setvar "osmode" SUSM) (setvar "angbase" SUAB) (setvar "angdir" SUAD) (setvar "clayer" SUCL) (setvar "cecolor" SUCR) (princ))
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:47:45 | 显示全部楼层
  1. (defun c:KERB (/ *error*) (princ "\rKERB ") (defun *error* (msg)   (and angbase (setvar 'angbase angbase))   (and angdir (setvar 'angdir angdir))   (and cecolor (setvar 'cecolor cecolor))   (and clayer (setvar 'clayer clayer))   (and cmdecho (setvar 'cmdecho cmdecho))   (and orthomode (setvar 'orthomode orthomode))   (and osmode (setvar 'osmode osmode))   (and plinegen (setvar 'plinegen plinegen))   (and acDoc (vla-endundomark acDoc))   (cond ((not msg))                                                   ; Normal exit         ((member msg '("Function cancelled" "quit / exit abort")))    ;  or (quit)         ((princ (strcat "\n** Error: " msg " ** ")))                  ; Fatal error, display it   )   (princ) ) ((lambda (acDoc angbase angdir cecolor clayer cmdecho orthomode osmode           plinegen / layerName          )    (vla-startundomark acDoc)    (if      (not        (tblsearch "layer"                   (setq layerName "CCC_LAYOUT_Proposed_Kerb_160mm")        )      )       (progn         (setq oLayer (vla-add (vla-get-layers acDoc) layerName))         (vla-put-lineweight oLayer acLnWt060)       )    )    (setvar 'angbase 0.0000)    (setvar 'angdir 0)    (setvar 'cecolor "BYLAYER")    (setvar 'clayer layerName)    (setvar 'cmdecho 0)    (setvar 'orthomode 0)    (setvar 'osmode 16383)    (setvar 'plinegen 1)    (command "._pline")    (while (= 1 (logand (getvar 'cmdactive) 1))      (command PAUSE)    )    (*error* nil)  )   (vla-get-activedocument (vlax-get-acad-object))   (getvar 'angbase)   (getvar 'angdir)   (getvar 'cecolor)   (getvar 'clayer)   (getvar 'cmdecho)   (getvar 'orthomode)   (getvar 'osmode)   (getvar 'plinegen) ))
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 08:03:48 | 显示全部楼层
Thanks Renderman.  Appreciate the help!
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:19:40 | 显示全部楼层
@RM .
 
Is not it good idea to minimize all these system variables with mapcar to avoid all these extra lines of codes ?
 
  1. (mapcar 'setvar  )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:40:16 | 显示全部楼层
 
Certainly, the code I posted could use some improvement(s). However, rather than have the system variables, and their associated values in two separate lists, I find it easier to 'read' when they're together.
 
Consider these sample functions:
  1. (setq layerName "0")(defun _Mapcar () (mapcar 'setvar         '(angbase angdir cecolor clayer cmdecho orthomode osmode           plinegen          )         (list 0.0000 0 "BYLAYER" layerName 0 0 16383 1) ))(defun _Foreach (/ error) (foreach x (list '(angbase 0.0000)                  '(angdir 0)                  '(cecolor "BYLAYER")                  (list clayer layerName)                  '(cmdecho 0)                  '(osmode 16383)                  '(plinegen 1)            )   (if (vl-catch-all-error-p         (setq error (vl-catch-all-apply 'setvar x))       )     (prompt (strcat "\n** Error: "                     (vl-catch-all-error-message error)                     " ** "             )     )   ) ))
 
... And the speed test:
  1. _$ (bench '(_Mapcar _Foreach) '() 1000)_MAPCARElapsed: 5959Average: 5.9590_FOREACHElapsed: 5289Average: 5.2890_$
 
... Not to mention the _Foreach function's ability to handle an error object; food for thought.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 04:38 , Processed in 0.999392 second(s), 62 queries .

© 2020-2025 乐筑天下

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