乐筑天下

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

[编程交流] 随机色数

[复制链接]

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:23:42 | 显示全部楼层 |阅读模式
大家好
 
 
我正在尝试更好地获得一个例程,它将帮助我获得一些对比度,以查看我在三维模型中的块(/层)定义是什么。
我的出发点是这段代码beneith,它将在1-255范围内为+1之后的层分配颜色。
该c值应在此范围内随机并四舍五入。这样,遵循逻辑部分的方式得到了更大的对比度(出于工程目的…)
 
 
有人有好的方法吗?
 
 
(编辑:使用LM的完整代码:…&ROY_043方法)
 
  1. ; random layer colors
  2. ;; Rand  -  Lee Mac
  3. ;; PRNG implementing a linear congruential generator with
  4. ;; parameters derived from the book 'Numerical Recipes'
  5. (defun LM:rand ( / a c m )
  6.    (setq m   4294967296.0
  7.          a   1664525.0
  8.          c   1013904223.0
  9.          $xn (rem (+ c (* a (cond ($xn) ((getvar 'date))))) m)
  10.    )
  11.    (/ $xn m)
  12. )
  13. ;; Random in Range  -  Lee Mac
  14. ;; Returns a pseudo-random integral number in a given range (inclusive)
  15. (defun LM:randrange ( a b )
  16.    (+ (min a b) (fix (* (LM:rand) (1+ (abs (- a b))))))
  17. )
  18. (defun c:Lcolor ()
  19. (vlax-for x (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  20.    (if
  21.      (and
  22.        (= :vlax-false (vla-get-lock x))
  23.        (= :vlax-false (vla-get-freeze x))
  24.        (not (wcmatch (vla-get-name x) "*|*"))
  25.      )
  26.      (vla-put-color x (LM:randrange 10 249))
  27.    )
  28. )
  29. (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acactiveviewport)
  30. (princ)
  31. )
  32. (vl-load-com) (princ)

182346xq381mz8qcgpm73m.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:29:19 | 显示全部楼层
您可以使用我的随机范围内函数,例如:
  1. (defun c:lcolor nil
  2.    (vlax-for x (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  3.        (vla-put-color x (LM:randrange 10 249))
  4.    )
  5.    (princ)
  6. )
  7. (vl-load-com) (princ)
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:37:40 | 显示全部楼层
太棒了!(如果你不介意换些颜色……)
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:41:00 | 显示全部楼层
好主意,李的动作很棒!
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:47:28 | 显示全部楼层
谢谢Grrr先生。我也这么想
用户应考虑将此代码与当前保存的layerstate结合使用。
提出一个问题:“你想保存当前状态吗?”
 
我只是有点更好的想法比真正聪明的编码。。。无论如何
回复

使用道具 举报

49

主题

1246

帖子

1210

银币

后起之秀

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

铜币
254
发表于 2022-7-5 17:53:24 | 显示全部楼层
很酷的东西,汉斯。
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:58:20 | 显示全部楼层
思考并努力使这一切顺利进行
因此,它不会影响锁定、冻结或外部参照的层(?)
 
 
  1. ;; CAB
  2. ;; [url]https://www.theswamp.org/index.php?topic=888.msg11892#msg11892[/url]
  3. ;;
  4. ;;;  Returns T if Locked
  5. ;;;        nil if Unlocked or not found
  6. ;;;        nil if lname is not a string
  7. (defun islayerlocked (lname / entlst)
  8. (and (= 'str (type lname))
  9.       (setq entlst (tblsearch "LAYER" lname))
  10.       (= 4 (logand 4 (cdr (assoc 70 entlst))))
  11. )
  12. )
  13. ;;;  Returns T if Frozen
  14. (defun islayerfrozen (lname / entlst)
  15. (and (= (type lname) 'str)
  16.       (setq entlst (tblsearch "layer" lname))
  17.       (= 1 (logand 1 (cdr (assoc 70 entlst))))
  18. )
  19. ) ; end defun
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 18:06:12 | 显示全部楼层
 
对于锁定层,请尝试以下操作:
  1. (defun c:test nil
  2. (vlax-for x (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  3.         (if (= (vla-get-Lock x) :vlax-true)
  4.                 (progn
  5.                         (vla-put-lock x :vlax-false)
  6.                         (vla-put-color x (LM:randrange 10 249))
  7.                         (vla-put-lock x :vlax-true)
  8.                 )
  9.                 (vla-put-color x (LM:randrange 10 249))
  10.         )
  11. )
  12. (vla-Regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport)
  13. (princ)
  14. )
  15. (vl-load-com) (princ)
  16. ;; Random in Range  -  Lee Mac
  17. ;; Returns a pseudo-random integral number in a given range (inclusive)
  18. (defun LM:randrange ( a b )
  19. (+ (min a b) (fix (* (LM:rand) (1+ (abs (- a b))))))
  20. )
  21. ;; Rand  -  Lee Mac
  22. ;; PRNG implementing a linear congruential generator with
  23. ;; parameters derived from the book 'Numerical Recipes'
  24. (defun LM:rand ( / a c m )
  25. (setq m   4294967296.0
  26.         a   1664525.0
  27.         c   1013904223.0
  28.         $xn (rem (+ c (* a (cond ($xn) ((getvar 'date))))) m)
  29. )
  30. (/ $xn m)
  31. )
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 18:12:09 | 显示全部楼层
它不起作用,这也不起作用,我知道我认为会起作用。。
 
 
  1. (defun c:lcolor nil
  2. (vlax-for x (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  3. (if (= (vla-get-Lock x) :vlax-true) () (
  4.   (progn (
  5.    (vla-put-lock x :vlax-false)
  6.    (vla-put-color x (LM:randrange 10 249))
  7.    (vla-put-lock x :vlax-true)
  8.   ))
  9.   (vla-put-color x (LM:randrange 10 249))
  10. )
  11. )
  12. (vla-Regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport)
  13. (princ)
  14. )
  15. (vl-load-com) (princ)
  16. )

 
 
返回:“错误:无函数定义:nil”
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 18:14:49 | 显示全部楼层
  1. (defun c:lcolor ()
  2. (vlax-for x (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  3.    (if
  4.      (and
  5.        (= :vlax-false (vla-get-lock x))
  6.        (= :vlax-false (vla-get-freeze x))
  7.        (not (wcmatch (vla-get-name x) "*|*"))
  8.      )
  9.      (vla-put-color x (LM:randrange 10 249))
  10.    )
  11. )
  12. (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acactiveviewport)
  13. (princ)
  14. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 04:25 , Processed in 0.476675 second(s), 75 queries .

© 2020-2025 乐筑天下

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