乐筑天下

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

[编程交流] 图层打开/关闭,需要修改

[复制链接]

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 20:40:13 | 显示全部楼层 |阅读模式
如果层太多(>40),它将无法显示,伙计们,帮我修改它。
可能需要添加“Page up”和“Page down”??
 
  1. (defun c:tt (/ all_tc k2 key kwstr n)
  2. (cxsta)
  3. (SETQ kwstr "\nSelect the layer for display,[ALL(x)")
  4. (setq n 0)
  5. (setq all_tc (CX-ALL-LAY))
  6. (foreach x all_tc
  7.    (setq kwstr (strcat kwstr "/" x "(" (itoa n) ")"))
  8.    (setq n (1+ n))
  9. )
  10. (setq kwstr (strcat kwstr "]"))
  11. (initget 128 "")
  12. (SETQ KEY (atoi (setq k2(GETKWORD kwstr))))
  13. (if (>= key 0)
  14.     (command "_.-LAYER" "OFF" "*" "Y" "ON" (nth key all_tc) "")
  15. )
  16. (if (= k2 "x")
  17.    (command "_.-LAYER" "ON" "*" "")
  18. )
  19. (cxend)
  20. )
  21. (defun CX-ALL-LAY (/ I LAY)
  22. (vlax-for I (vla-get-layers
  23. (vla-get-activedocument (vlax-get-acad-object)))
  24.    (setq LAY (cons (vla-get-name I) LAY)))
  25. (setq LAY (vl-sort LAY '<))
  26. )
  27. (defun cxsta ()
  28. (setvar "cmdecho" 0)
  29. (setq $orr *error*)
  30. (setq *error* #err2)
  31. (command ".UNDO" "BE")
  32. )
  33. (defun cxend ()
  34. (command ".UNDO" "E")
  35. (setq *error* $orr)
  36. ;(setvar "osmode" 15359)
  37. (prompt "finishing")
  38. (princ)
  39. )
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 20:47:37 | 显示全部楼层
 
为什么?我也用2007年。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:50:55 | 显示全部楼层
我的意思是2007年的同一期,所以试试动态模式。
我没办法,因为我不知道该控制哪一个动态模式大小/页面
 
我认为李·麦克波斯特#3是解决方案
-图层
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 20:55:38 | 显示全部楼层
 
既然我帮不上忙dynmode,
或者通过在屏幕上显示层名称来尝试替代方法?
然后使用本机acad命令layiso
  1. (setvar 'dynmode 0)
  2. (textpage)

 
  1. (vl-load-com)(defun SS_ARRAY (/ i j k doc lst x ss vp rc)
  2. ;hanhphuc 09/12/14
  3. (setq doc (vlax-get-acad-object))
  4. (vlax-for lay        (foreach x '(ActiveDocument Layers) (setq doc (vlax-get doc x)))
  5.    (setq lst (cons (vla-get-name lay) lst))
  6.    ) ;_ end of vlax-for
  7. (if (< (length lst) [color="red"]20[/color] ); [color="blue"]min=2, you adjust here , example using lst < 20 [/color]
  8. [color="red"][b] (c:tt)  [/b][/color] ; [color="blue"] use your code if <20[/color]
  9.    [color="red"][b](progn[/b][/color]
  10. (if (setq ss (ssget "X"))
  11.    (while (/= (sslength ss) 0) (redraw (setq en (ssname ss 0)) 2) (setq ss (ssdel en ss)))
  12.    ) ;_ end of if
  13. (setq j         (length lst)
  14.      k         ((lambda (n / i a b)
  15.     (if        (not (zerop n))
  16.       (progn (setq i (fix (sqrt n)))
  17.              (mapcar 'set '(a b) (list i (1+ i)))
  18.              (cond ((= n (* a a)) (list a a))
  19.                    ((<= (* a a) n (* a b)) (list a b))
  20.                    ((> n (* a b)) (list b b))
  21.                    ) ;_ end of cond
  22.              ) ;_ end of progn
  23.       ) ;_ end of if
  24.     ) ;_ end of lambda
  25.    j
  26.    )
  27.      rc (last (if (not (zerop j))
  28.          (cons j (list (rem (apply '* k) j) k))
  29.          ) ;_ end of if
  30.        ) ;_ end of last
  31.      vp ((lambda (% / dv vH vW lst) ; v1.1
  32.     (setq vH (getvar "viewsize")
  33.           vW (*        vH
  34.                 (/ 1.
  35.                    (apply
  36.                      '/
  37.                      (cdr
  38.                        (reverse
  39.                          (apply        'mapcar
  40.                                 (cons '- (cdr (setq dv (mapcar ''((x) (trans (getvar x) 0 1))
  41.                              '(viewctr vsmin vsmax)))))
  42.                                 ) ;_ end of apply
  43.                          ) ;_ end of reverse
  44.                        ) ;_ end of cdr
  45.                      ) ;_ end of apply
  46.                    ) ;_ end of /
  47.                 ) ;_ end of *
  48.           ) ;_ end of setq
  49.     (foreach x '(+ -)
  50.       (setq lst        (cons (mapcar ''((i j) ((eval x) (i (car dv)) (* (* j 0.5) (/ % 100.))))
  51.                               (list car cadr)
  52.                               (list vW vH)
  53.                               ) ;_ end of mapcar
  54.                       lst
  55.                       ) ;_ end of cons
  56.             ) ;_ end of setq
  57.       ) ;_ end of foreach
  58.     ) ;_ end of lambda
  59.    80.
  60.    )
  61.      ) ;_ end of setq
  62. (vla-arrayrectangular
  63.    (vlax-ename->vla-object
  64.      (entmakex        (vl-list* '(0 . "TEXT")
  65.                   '(1 . "*")
  66.                   '(72 . 4)
  67.                   (cons 40 (* (/ (getvar 'viewsize) (cadr (getvar 'screensize))) 7.))
  68.                   (mapcar ''((x) (cons x (car vp))) '(10 11))
  69.                   ) ;_ end of list
  70.         ) ;_ end of entmakex
  71.      ) ;_ end of vlax-ename->vla-object
  72.    (car rc) ;row
  73.    (cadr rc) ;col
  74.    1
  75.    (/ (- (cadadr vp) (cadar vp)) (- (car rc) 1.))
  76.    (/ (- (caadr vp) (caar vp)) (- (cadr rc) 1.))
  77.    1.
  78.    ) ;_ end of vla-arrayrectangular
  79. (setq ss (ssget "X" (list (cons 0 "TEXT"))))
  80. (if (> (setq c (- (setq x (sslength ss)) (length lst))) 0)
  81.    (repeat c (entdel (setq e (ssname ss (setq x (1- x))))) (ssdel e ss))
  82.    ) ;_ end of if
  83. (repeat (setq i (sslength ss))
  84.    (setq i (1- i))
  85.    (mapcar ''((x) (vlax-put (vlax-ename->vla-object (ssname ss i)) x (nth i (acad_strlsort lst))))
  86.     '(Layer TextString)
  87.     ) ;_ end of mapcar
  88.    ) ;_ end of repeat
  89. [color="red"][b]  ) ;_end of progn[/b][/color]
  90. )
  91. (terpri)
  92. ss
  93. ) ;_ end of defun
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 21:00:48 | 显示全部楼层
 
v2007确实有dynmode,但唯一的问题是有限的显示取决于屏幕大小。
通过键控,你的(c:tt)更快,所以我固定了一点为单隔离。职位#9
214017ahoar21kxso1sz0v.jpg
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 21:06:15 | 显示全部楼层
 
我认为使用数据链路连接器比这种方法更好。因为,字体太小了。
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 21:12:52 | 显示全部楼层
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 21:18:27 | 显示全部楼层
i mean 2007 same issue, so try off the dynmode.
i can't help because i don't know which to control dynmode size/ page
 
i think Lee Mac post#3 is the solution
-layer
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 21:22:40 | 显示全部楼层
 
since i can't help with dynmode,
or try alternative by displaying layer name on the screen?
then use native acad command layiso
  1. (vl-load-com)(defun SS_ARRAY (/ i j k doc lst x ss vp rc) ;hanhphuc 09/12/14 (setq doc (vlax-get-acad-object)) (vlax-for lay        (foreach x '(ActiveDocument Layers) (setq doc (vlax-get doc x)))   (setq lst (cons (vla-get-name lay) lst))   ) ;_ end of vlax-for (if (< (length lst) [color="red"]20[/color] ); [color="blue"]min=2, you adjust here , example using lst < 20 [/color] [color="red"][b] (c:tt)  [/b][/color] ; [color="blue"] use your code if vla-object     (entmakex        (vl-list* '(0 . "TEXT")                  '(1 . "*")                  '(72 . 4)                  (cons 40 (* (/ (getvar 'viewsize) (cadr (getvar 'screensize))) 7.))                  (mapcar ''((x) (cons x (car vp))) '(10 11))                  ) ;_ end of list        ) ;_ end of entmakex     ) ;_ end of vlax-ename->vla-object   (car rc) ;row   (cadr rc) ;col   1   (/ (- (cadadr vp) (cadar vp)) (- (car rc) 1.))   (/ (- (caadr vp) (caar vp)) (- (cadr rc) 1.))   1.   ) ;_ end of vla-arrayrectangular (setq ss (ssget "X" (list (cons 0 "TEXT")))) (if (> (setq c (- (setq x (sslength ss)) (length lst))) 0)   (repeat c (entdel (setq e (ssname ss (setq x (1- x))))) (ssdel e ss))   ) ;_ end of if (repeat (setq i (sslength ss))   (setq i (1- i))   (mapcar ''((x) (vlax-put (vlax-ename->vla-object (ssname ss i)) x (nth i (acad_strlsort lst))))    '(Layer TextString)    ) ;_ end of mapcar   ) ;_ end of repeat[color="red"][b]  ) ;_end of progn[/b][/color]) (terpri) ss ) ;_ end of defun
 

[code](defun c:test (/ *error* ss e on) (defun *error* (msg)   (if        on     (command "layerp")     ) ;_ end of if   (if        ss     (command "_erase" ss "")     ) ;_ end of if   (if        (> (getvar "cmdactive") 0)     (princ)     ) ;_ end of if   (command "regen")   (if        (not (wcmatch (strcase msg) "*CANCEL*,*EXIT*"))     (princ (strcat "\n*error : " msg))     ) ;_ end of if   ) ;_ end of defun  (command "_layer" "U" "*" "") (setq on (vl-cmdf "_layer" "on" "*" "")[color="red"] ss (SS_ARRAY)) (if (and [color="red"]ss   (setq s (ssget [color="red"][color="red"]"_+.:S:E:L")) ;
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 21:30:02 | 显示全部楼层
 
Thanks my dear friend , why you can't use DYN (dynmode) mode ? A2007 can do this .
Thank you for your efforts, but this method is not fast.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 09:12 , Processed in 1.097186 second(s), 74 queries .

© 2020-2025 乐筑天下

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