乐筑天下

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

[编程交流] 创建随机图层和Assig

[复制链接]

21

主题

89

帖子

68

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 15:23:29 | 显示全部楼层 |阅读模式
您好,我正在寻找Lisp,它将创建随机图层,并将指定给选定的多段线或对象。。随机
 

                               
登录/注册后可看大图

 
提前谢谢你。
162336ruu2xtnhxj36w66w.jpg
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 15:34:11 | 显示全部楼层
如果只想绘制多段线,请在sel中对其进行过滤。设置
 
  1. (setq ss (ssget "_:L" '((0 . "LWPOLYLINE"))))

 
写得很快,而且可能不符合要求-层名称是真彩色数字-RND。。。
 
  1. (defun c:assignrndlayerstoobjects ( / rnd *a* LM:True->RGB ss i e nn n rndn0-1 rndnumb1-16777216 rgb enx ) ; lexical global *a* localized
  2. (defun rnd ( / ti tis ns n ) ; *a* - global number variable ; return - n random number from 0 to 9
  3.    (setq ti (car (_vl-times)))
  4.    (setq tis (itoa ti))
  5.    (setq ns (substr tis (strlen tis)))
  6.    (setq n (atoi ns))
  7.    (if (null *a*)
  8.      (setq *a* n)
  9.      (progn
  10.        (while (= *a* n)
  11.          (setq ti (car (_vl-times)))
  12.          (setq tis (itoa ti))
  13.          (setq ns (substr tis (strlen tis)))
  14.          (setq n (atoi ns))
  15.        )
  16.        (setq *a* n)
  17.      )
  18.    )
  19.    n
  20. )
  21. ;; True -> RGB  -  Lee Mac
  22. ;; Args: c - [int] True Colour
  23. (defun LM:True->RGB ( c )
  24.    (mapcar '(lambda ( x ) (lsh (lsh (fix c) x) -24)) '(8 16 24))
  25. )
  26. (setq ss (ssget "_:L"))
  27. (repeat (setq i (sslength ss))
  28.    (setq e (ssname ss (setq i (1- i))))
  29.    (setq nn "")
  30.    (repeat 15
  31.      (setq n (itoa (rnd)))
  32.      (setq nn (strcat n nn))
  33.    )
  34.    (setq rndn0-1 (atof (strcat "0." nn)))
  35.    (setq rndnumb1-16777216 (1+ (fix (* 16777216 rndn0-1))))
  36.    (while (tblsearch "LAYER" (itoa rndnumb1-16777216))
  37.      (setq nn "")
  38.      (repeat 15
  39.        (setq n (itoa (rnd)))
  40.        (setq nn (strcat n nn))
  41.      )
  42.      (setq rndn0-1 (atof (strcat "0." nn)))
  43.      (setq rndnumb1-16777216 (1+ (fix (* 16777216 rndn0-1))))
  44.    )
  45.    (setq rgb (LM:True->RGB rndnumb1-16777216))
  46.    (vl-cmdf "_.-LAYER" "_M" (itoa rndnumb1-16777216) "_C" "_T" (strcat (itoa (car rgb)) "," (itoa (cadr rgb)) "," (itoa (caddr rgb))))
  47.    (while (< 0 (getvar 'cmdactive)) (vl-cmdf ""))
  48.    (setq enx (entget e))
  49.    (setq enx (subst (cons 8 (itoa rndnumb1-16777216)) (assoc 8 enx) enx))
  50.    (entupd (cdr (assoc -1 (entmod enx))))
  51. )
  52. (princ)
  53. )

 
M、 R。
回复

使用道具 举报

21

主题

89

帖子

68

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 15:42:53 | 显示全部楼层
 
谢谢,但由于某种原因,它崩溃了。。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:44:54 | 显示全部楼层
感谢Marko每天学习新知识,使defun成为主defun中的局部变量。我有几个程序可以试试。
 
明显的解决方案是P1 P2 P3等,并使用tblsearch查找最后一个Px。不过颜色是个好主意。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 15:56:14 | 显示全部楼层
不是很随机,更像是六进制(基于对象的句柄):
 
  1. (defun C:test ( / pref SS accm lyrs i enx tmp )
  2. (and
  3.    LM:rand LM:randrange
  4.    (setq pref (getstring "\nLayer prefix: " t))
  5.    (setq SS (ssget "_:L-I"))
  6.    (setq accm (vla-GetInterfaceObject (vlax-get-acad-object) (strcat "AutoCAD.AcCmColor." (substr (getvar 'acadver) 1 2))))
  7.    (progn (vla-put-ColorMethod accm acColorMethodByRGB) t)
  8.    (setq lyrs (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))))
  9.    (repeat (setq i (sslength SS))
  10.      (setq enx (entget (ssname SS (setq i (1- i)))))
  11.      (entmod (subst (cons 8 (setq tmp (strcat pref (cdr (assoc 5 enx))))) (assoc 8 enx) enx))
  12.      (apply 'vla-SetRGB (cons accm (mapcar 'LM:randrange '(0 0 0) '(255 255 255))))
  13.      (vla-put-TrueColor (vla-item lyrs tmp) accm)
  14.    )
  15. )
  16. (and (eq 'VLA-OBJECT (type accm)) (vl-catch-all-apply 'vlax-release-object (list accm)))
  17. (princ)
  18. ); defun
  19. (vl-load-com) (princ)
  20. ;; Random in Range  -  Lee Mac
  21. ;; Returns a pseudo-random integral number in a given range (inclusive)
  22. (defun LM:randrange ( a b )
  23. (+ (min a b) (fix (* (LM:rand) (1+ (abs (- a b))))))
  24. )
  25. ;; Rand  -  Lee Mac
  26. ;; PRNG implementing a linear congruential generator with
  27. ;; parameters derived from the book 'Numerical Recipes'
  28. (defun LM:rand ( / a c m )
  29. (setq m   4294967296.0
  30.    a   1664525.0
  31.    c   1013904223.0
  32.    $xn (rem (+ c (* a (cond ($xn) ((getvar 'date))))) m)
  33. )
  34. (/ $xn m)
  35. )
回复

使用道具 举报

21

主题

89

帖子

68

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 16:02:38 | 显示全部楼层
太棒了@Grrr,请再给我一个。。如果我想更改层前缀,该怎么办?而不是2F?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:08:27 | 显示全部楼层
 
我修改了代码。
回复

使用道具 举报

21

主题

89

帖子

68

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 16:14:18 | 显示全部楼层
非常感谢朋友!
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:20:29 | 显示全部楼层
 
你很好!
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:25:33 | 显示全部楼层
ACI仅不如grrr和M.R彩色
  1. (defun c:test2 ( / doc la ss ob hd i )
  2. (and (setq doc '((l / doc) (setq doc (vlax-get-acad-object)) (foreach x l (setq doc (vlax-get doc x))))
  3.           la  (doc '(ActiveDocument Layers)))
  4.    (ssget ":L" '((0 . "LWPOLYLINE"))
  5.           )
  6.     (vlax-for ob (setq ss (doc '(ActiveDocument ActiveSelectionSet)))
  7.       (setq hd (vla-get-handle ob) i (rem (LM:base->dec hd 16) 255 ))
  8.       (vla-add la hd) (vla-put-layer ob hd) (vla-put-color ob i )
  9.       )
  10. (mapcar 'vlax-release-object (list la ss) )
  11.     )
  12. (princ)
  13. )
  14. (vl-load-com)
  15. ;; Base to Decimal  -  Lee Mac
  16. ;; Converts an number in an arbitrary base to decimal.
  17. ;; n - [str] string representing number to convert
  18. ;; b - [int] base of input string
  19. ;; Returns: [int] Decimal representation of supplied number
  20. (defun LM:base->dec ( n b ) ;; www.lee-mac.com
  21.    (   (lambda ( f ) (f (mapcar '(lambda ( x ) (- x (if (< x 65) 48 55))) (reverse (vl-string->list n)))))
  22.        (lambda ( c ) (if c (+ (* b (f (cdr c))) (car c)) 0))
  23.    )
  24. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 03:17 , Processed in 1.347049 second(s), 75 queries .

© 2020-2025 乐筑天下

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