乐筑天下

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

[编程交流] 将柔和的颜色更改为altern

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:41:40 | 显示全部楼层 |阅读模式
你好这是我的第一篇帖子。这是我和LISP的历史。我已经在工作中使用它两天了,到目前为止,我一直在尝试为Autocad 2008开发一个功能强大的LISP例程。
 
我的问题是:
我有一系列518幅画。我将使用scriptpro运行它们,并应用LISP例程执行以下操作:
 
循环浏览图形中的所有图层,如果它们是黄色、青色或品红色,则分别将其更改为绿色、蓝色和红色。我还需要它运行任何和所有元素在绘图中做同样的事情,也要(命令“突发”)所有块应用相同的颜色变化。有道理?
 
我有一个破除障碍的代码:
 
(defun c:胸围()
;(setvar“qaflags”1)
(setq ALLBOCKS(ssget“X”(列表(cons 0“INSERT”)))
(while(/=AllBlocks nil)
(程序
(sssetfirst nil ALLBOCKS)
(c:突发)
(setq ALLBOCKS(ssget“X”(列表(cons 0“INSERT”)))
(setq doc(vla get ActiveDocument(vlax get acad object)))
(vla SendCommand doc(chr 27))
);程序
);虽然
(普林斯)
);德芬
 
我有一个代码(仅适用于一种颜色,而不是所有3种颜色)用于更改图形中的元素(仅适用于纸张或模型空间,而不是我需要的两种):
 
(定义c:pastel2()
(setq-ylo(ssget“X”'((62.2)))
(while(/=ylo nil)
(程序
(命令“_.change”ylo““p”color“green”)
(setq-ylo(ssget“X”'((62.2)))
);程序
);虽然
(setq-cya(ssget“X”'((62.4)))
(而(/=cya nil)
(程序
(命令“_.change”cya““p”“color”“blue”)
(setq-cya(ssget“X”'((62.4)))
);程序
);虽然
(setq mag(ssget“X”((62.6)))
(while(/=mag nil)
(程序
(命令“_.change”mag““p”color“red”)
(setq mag(ssget“X”((62.6)))
);程序
);虽然
(setq doc(vla get ActiveDocument(vlax get acad object)))
(vla SendCommand doc(chr 27))
(普林斯)
);德芬
 
有人想帮我吗?非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:50:28 | 显示全部楼层
这将影响除“ByLayer”之外设置了颜色的任何对象:
 
  1. (defun c:Pastel2 nil
  2. (mapcar
  3.    (function
  4.      (lambda ( oc nc )
  5.        (if (setq ss (ssget "_X" (list (cons 62 oc))))
  6.          (
  7.            (lambda ( x )
  8.              (while (setq e (ssname ss (setq x (1+ x))))
  9.                (ColourChange e nc)
  10.              )
  11.            )
  12.            -1
  13.          )
  14.        )
  15.      )
  16.    )
  17.    '(2 4 6)
  18.    '(3 5 1)
  19. )
  20. (princ)
  21. )
  22. (defun ColourChange ( ent col / el )
  23. ;; © Lee Mac 2010
  24. (entupd
  25.    (cdr
  26.      (assoc -1
  27.        (entmod
  28.          (if (assoc 62 (setq el (entget ent)))
  29.            (subst
  30.              (cons 62 col) (assoc 62 el) el
  31.            )
  32.            (append el (list (cons 62 col)))
  33.          )
  34.        )
  35.      )
  36.    )
  37. )
  38. )
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:54:43 | 显示全部楼层
谢谢你的代码李,但我需要影响的颜色是由层以及。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:59:01 | 显示全部楼层
 
这将需要更多的代码-我将发布一个示例
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:05:52 | 显示全部楼层
尝试以下操作:
 
  1. (defun c:Pastel2 ( / def l )
  2. ;; © Lee Mac 2010
  3. (while (setq def (tblnext "LAYER" (not def)))
  4.    (setq l
  5.      (cons
  6.        (cons (abs (cdr (assoc 62 def))) (cdr (assoc 2 def))) l
  7.      )
  8.    )
  9. )
  10. (mapcar
  11.    (function
  12.      (lambda ( oc nc / a )
  13.        (if (setq ss
  14.              (ssget "_X"
  15.                (if (setq a (LM:mAssoc oc l))
  16.                  (list
  17.                    (cons -4 "<OR")
  18.                      (cons 62 oc)
  19.                      (cons 8 (LM:lst->str (mapcar 'cdr a) ","))
  20.                    (cons -4 "OR>")
  21.                  )
  22.                  (list (cons 62 oc))
  23.                )
  24.              )
  25.            )
  26.          (
  27.            (lambda ( x )
  28.              (while (setq e (ssname ss (setq x (1+ x))))
  29.                (LM:ColourChange e nc)
  30.              )
  31.            )
  32.            -1
  33.          )
  34.        )
  35.      )
  36.    )
  37.    '(2 4 6)
  38.    '(3 5 1)
  39. )
  40. (princ)
  41. )
  42. (defun LM:ColourChange ( ent col / el )
  43. ;; © Lee Mac 2010
  44. (entupd
  45.    (cdr
  46.      (assoc -1
  47.        (entmod
  48.          (if (assoc 62 (setq el (entget ent)))
  49.            (subst
  50.              (cons 62 col) (assoc 62 el) el
  51.            )
  52.            (append el (list (cons 62 col)))
  53.          )
  54.        )
  55.      )
  56.    )
  57. )
  58. )
  59. (defun LM:lst->str ( lst del )
  60. ;; © Lee Mac 2010
  61. (if (cdr lst)
  62.    (strcat (car lst) del (LM:lst->str (cdr lst) del))
  63.    (car lst)
  64. )
  65. )
  66. (defun LM:mAssoc ( x lst )
  67. ;; © Lee Mac 2010
  68. (vl-remove-if-not
  69.    (function
  70.      (lambda ( pair ) (= x (car pair)))
  71.    )
  72.    lst
  73. )
  74. )

 
它不会改变图层颜色,而是设置单独的颜色,但我不确定其意图。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:10:54 | 显示全部楼层
李,太棒了!
是的,我想在图层属性管理器中更改图层颜色,但这也可以。
 
知道任何快速代码来打破模型和图纸空间中的所有块吗?
此代码目前仅在其中一种情况下有效。
 
  1. (defun c:bust ()
  2. ;(setvar "qaflags" 1)
  3. (setq AllBlocks (ssget "X" (list (cons 0 "INSERT"))))
  4. (while (/= AllBlocks nil)
  5. (progn
  6. (sssetfirst nil AllBlocks)
  7. (c:burst)
  8. (setq AllBlocks (ssget "X" (list (cons 0 "INSERT"))))
  9. (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  10. (vla-SendCommand doc (chr 27))
  11. );progn
  12. );while
  13. (princ)
  14. );defun
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:15:46 | 显示全部楼层
你到底为什么要炸掉你所有的积木?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:16:55 | 显示全部楼层
 
我也这么认为:
 
  1. (defun c:Pastel3 ( / col def a )
  2. ;; © Lee Mac 2010
  3. (setq col '((2 . 3) (4 . 5) (6 . 1)))
  4. (while (setq def (tblnext "LAYER" (not def)))
  5.    (if (setq a (assoc (abs (cdr (assoc 62 def))) col))
  6.      (LM:ColourChange (tblobjname "LAYER" (cdr (assoc 2 def))) (cdr a))
  7.    )
  8. )
  9. (mapcar
  10.    (function
  11.      (lambda ( entry / ss )
  12.        (if (setq ss (ssget "_X" (list (cons 62 (car entry)))))
  13.          (
  14.            (lambda ( x / e )
  15.              (while (setq e (ssname ss (setq x (1+ x))))
  16.                (LM:ColourChange e (cdr entry))
  17.              )
  18.            )
  19.            -1
  20.          )
  21.        )
  22.      )
  23.    )
  24.    col
  25. )
  26. (princ)
  27. )
  28. (defun LM:ColourChange ( ent col / el )
  29. ;; © Lee Mac 2010
  30. (entupd
  31.    (cdr
  32.      (assoc -1
  33.        (entmod
  34.          (if (assoc 62 (setq el (entget ent)))
  35.            (subst
  36.              (cons 62 col) (assoc 62 el) el
  37.            )
  38.            (append el (list (cons 62 col)))
  39.          )
  40.        )
  41.      )
  42.    )
  43. )
  44. )
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:22:04 | 显示全部楼层
alanjt:
 
这些图纸是在实际绘图过程中绘制的,直接交给操作员打印。我知道这不是最漂亮的解决方案,但我想把它们全部爆裂,把它们变成单个实体,以最简单的形式改变颜色。我只是没有Lisp程序的诀窍去做那个ByBlock。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:27:54 | 显示全部楼层
李,带着一个错误回来说:
命令:pastel3
; 错误:没有函数定义:colorchange
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:13 , Processed in 0.958112 second(s), 83 queries .

© 2020-2025 乐筑天下

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