aws 发表于 2023-4-13 21:02:31

随机给块上色

大佬们,小弟想要做这个功能,用来排版区分零件用的。

能力有限,写不出来,发帖请教大佬看看,能不能实现这个功能。
一句话概括就是,给选择集里面的块,随机上色(鲜艳的色,太暗看不清)

ssyfeng 发表于 2023-4-13 21:02:32

试试这个,应该可以:




橡皮 发表于 2023-4-13 22:44:17

可以啊,加qq说一下具体情况吧
QQ 3446099265

SdlFreeCAD 发表于 2023-4-13 23:30:26

太简单了,不好意思收钱。

aws 发表于 2023-4-14 08:24:11

SdlFreeCAD 发表于 2023-4-13 23:30
太简单了,不好意思收钱。

说说思路可以吗

ssyfeng 发表于 2023-4-14 08:35:43

全部块是同一个块名的吗?

aws 发表于 2023-4-14 09:54:31

ssyfeng 发表于 2023-4-14 08:35
全部块是同一个块名的吗?

不是,都是无名块,或者普通块,名称不一样

SdlFreeCAD 发表于 2023-4-14 12:02:10

加QQ:1005144760.细聊

aws 发表于 2023-4-14 14:18:27

自己瞎捣鼓出来了,目前看着还行,不知道有没有bug
不是随机上色,支持144种颜色,按顺序上色,再多就重复了。
子函数是找来的,参考:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=185356&extra=&highlight=%BF%E9%D1%D5%C9%AB&page=1
看不懂,有没有前辈指点下什么意思

(defun c:gg(/ blockss c1 c2 c3 c4 c5 c6 co en n obj se ss)
        (setq blockss(vla-get-blocks(vla-get-activedocument(vlax-get-acad-object))))
        (setq ss(ssget '((0 . "INSERT"))))
        (setq c1 0)
        (setq c2 2)
        (setq c3 4)
        (setq c4 1)
        (setq c5 3)
        (setq c6 5)
        (repeat(setq n(sslength ss))
                (setq en(ssname ss(setq n(1- n))))
                (setq obj(vlax-ename->vla-object en))
                (if(< c1 240)
                        (setq co(setq c1(+ c1 10)))
                        (progn
                                (if(< c2 242)
                                        (setq co(setq c2(+ c2 10)))
                                        (progn
                                                (if(< c3 244)
                                                        (setq co(setq c3(+ c3 10)))
                                                        (progn
                                                                (if(< c4 241)
                                                                        (setq co(setq c4(+ c4 10)))
                                                                        (progn
                                                                                (if(< c5 243)
                                                                                        (setq co(setq c5(+ c5 10)))
                                                                                        (progn
                                                                                                (if(< c6 245)
                                                                                                        (setq co(setq c6(+ c6 10)))
                                                                                                        (progn
                                                                                                                (setq co(setq c1 10))
                                                                                                                (setq c2 2)
                                                                                                                (setq c3 4)
                                                                                                                (setq c4 1)
                                                                                                                (setq c5 3)
                                                                                                                (setq c6 5)
                                                                                                        )
                                                                                                )
                                                                                        )
                                                                                )
                                                                        )
                                                                )
                                                        )
                                                )
                                        )
                                )
                        )
                )
                (setq se(itoa co))
                (yanse obj)
        )
        (princ)
)
;---修改块颜色
(defun yanse(obj / blks)
        (vla-put-color obj se);---此值为颜色索引号
        (if(or(=(vla-get-objectname obj)"AcDbBlockReference")(=(vla-get-objectname obj)"AcDbMInsertBlock"))
                (progn
                        (setq blks(vla-item blockss(vla-get-name obj)))
                        (vlax-for i blks(yanse i));---递归进去,用于处理嵌套
                )
        )
)


aws 发表于 2023-4-14 14:42:38

ssyfeng 发表于 2023-4-14 14:21
试试这个,应该可以:

谢谢!!!
页: [1] 2
查看完整版本: 随机给块上色