乐筑天下

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

[编程交流] Autolisp挑战#001

[复制链接]

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 17:53:40 | 显示全部楼层 |阅读模式
你好
 
我有一张画有两个圆圈和一个正方形的画。第一个圆圈是蓝色的,第二个是红色的。每当鼠标穿过红色圆圈时,我希望正方形有一个红色的图案填充,蓝色的也一样。
 
提前感谢,
谢伊
ch001.dwg
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-5 18:02:07 | 显示全部楼层
任何填充图案。
 
任何比例。
 
任何旋转。
 
任何颜色。
 
在任何层上。
 
正方形没有阴影,因为它们是。。。。。正方形?
 
这给解释留下了很大的余地,不是吗?
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 18:06:42 | 显示全部楼层
 
我添加了一个dwg文件。一切都在那里。如果我没有具体说明,你只需要给它一个生命。。这意味着它将被解除。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:11:56 | 显示全部楼层
你好
这个线程不应该被认为是一个挑战,因为许多程序员可以在下面编写与我相同或类似的程序;
 
  1. (defun c:Test (/ gr i lst e s ent)
  2. ;; Tharwat 22.03.2016 ;;
  3. (princ "\nSelect hatches to color :")
  4. (if (setq s (ssget "_:L" '((0 . "HATCH"))))
  5.    (progn
  6.      (repeat (setq i (sslength s))
  7.        (setq lst (cons (ssname s (setq i (1- i))) lst))
  8.      )
  9.      (princ "\nMove cursor over a circle :")
  10.      (while (eq (car (setq gr (grread t 15 0))) 5)
  11.        (redraw)
  12.        (if (and (setq e (ssget (cadr gr)))
  13.                 (eq (cdr (assoc 0 (setq ent (entget (ssname e 0))))) "CIRCLE" )
  14.            )
  15.          (mapcar '(lambda (x) (entmod (append (entget x) (list (assoc 62 ent))))) lst)
  16.        )
  17.      )
  18.    )
  19. )
  20. (princ)
  21. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:13:51 | 显示全部楼层
快速书写,适用于任意数量的圆和任意数量的图案填充:
  1. (defun c:challenge001 ( / cil cir col cur enx fun hal hat idx )
  2.    (setq fun '(( x ) (if (assoc 62 x) x (append x '((62 . 256))))))
  3.    (cond
  4.        (   (not (setq hat (ssget "_X" '((0 . "HATCH") (410 . "Model")))))
  5.            (princ "\nNo hatches found.")
  6.        )
  7.        (   (not (setq cir (ssget "_X" '((0 . "CIRCLE") (410 . "Model")))))
  8.            (princ "\nNo circles found.")
  9.        )
  10.        (   (repeat (setq idx (sslength hat))
  11.                (setq hal (cons (fun (entget (ssname hat (setq idx (1- idx))))) hal))
  12.            )
  13.            (repeat (setq idx (sslength cir))
  14.                (setq enx (fun (entget (ssname cir (setq idx (1- idx)))))
  15.                      cil (cons (list (cdr (assoc 10 enx)) (cdr (assoc 40 enx)) (assoc 62 enx)) cil)
  16.                )
  17.            )
  18.            (while (= 5 (car (setq cur (grread t 13 0))))
  19.                (setq cur (trans (cadr cur) 1 0)
  20.                      col (cond ((vl-some '(lambda ( x ) (if (< (distance cur (car x)) (cadr x)) (last x))) cil)) ('(62 . 7)))
  21.                )
  22.                (foreach enx hal (entmod (subst col (assoc 62 enx) enx)))
  23.            )
  24.        )
  25.    )
  26.    (princ)
  27. )
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 18:20:37 | 显示全部楼层
 
干得好,塔尔瓦!如此轻盈优雅!我不知道ssget可以基于坐标选择实体
我忘了提到的一件事是,当用户离开其中一个圆时,图案填充应该恢复为白色。
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 18:24:42 | 显示全部楼层
 
图案填充的颜色交换是如何发生的?
 
  1. (mapcar '(lambda (x) (entmod (append (entget x) (list (assoc 62 ent))))) lst)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:28:29 | 显示全部楼层
 
通过dxf代码62和变量“ent”表示entget列表,因此无论所选圆的颜色是什么,图案填充的颜色都会相应更改。
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 18:33:21 | 显示全部楼层
你的背景是什么?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:38:33 | 显示全部楼层
 
打扰一下
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 00:57 , Processed in 0.845149 second(s), 72 queries .

© 2020-2025 乐筑天下

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