乐筑天下

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

[编程交流] 请帮助为t添加一个选项

[复制链接]

4

主题

13

帖子

9

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 09:47:58 | 显示全部楼层 |阅读模式
我已经使用这个lisp多次复制一个实体,我想添加一个选项,当复制一个实体时,它会自动将其颜色更改为不同的颜色,这样我就可以看到差异(如果原始是红色,那么下一个将有颜色+1为黄色,下一个将为绿色…)
非常感谢你的帮助。
 
(定义c:c()
(defun DR_ERR(S);如果发生错误(如CTRL-C)
(如果(/=S“功能取消”);当此命令处于活动状态时。。。
(如果(=S“退出/退出中止”)
(普林斯)
(princ(strcat“\n错误:”S))
);如果结束
);如果结束
(如果DR_OER;如果存在旧的错误例程
(setq*错误*DR_OER);然后,重置它
);如果结束
(如果(非BASEPT);如果使用初始位移
(foreach x SSELIST(redraw x 4));取消高亮显示最后一个选择集
)
(setvar“cmdecho”1);错误时重置命令回显
(普林斯)
);结束错误定义
 
;**** 设置新的错误处理程序****
(如果(非*调试*)
(如果*错误*
(setq DR\u OER*错误**错误*DR\u错误)
(setq*error*DR\U ERR)
);如果结束
);如果结束
;**** 开始主功能****
(if(setq EMARK(entlast))
(while(setq B(entnext EMARK))
(setq EMARK B)
)
)
(setq SS(ssget))
(setvar“cmdecho”0)
(提示“\n基点或位移:”)
(命令“copy”SS“”暂停)
(setq BASEPT(getvar“lastpoint”))
(提示“\n复制点:”)
(命令暂停)
(if(等于BASEPT(setq lastp(getvar“lastpoint”))
(progn(setq REFPT LASTPT)
(setq BASEPT nil)
)
)
(如果是BASEPT
(while(entnext EMARK);虽然有新的实体
(setq SSOLD SS)
(setq SS(ssadd));重置SS
(while(entnext EMARK);虽然有新的实体
(setq EMARK(entnext EMARK))
(ssadd EMARK SS);将其添加到新SS
)
(if(等于BASEPT(setq lastp(getvar“lastpoint”))
(progn(命令“erase”SS“”)
(命令“copy”SSOLD“REFPT”)
(setvar“lastpoint”(极性BASEPT ANGLPT DISTPT))
)
(progn(setq ANGLPT(angle BASEPT LASTPT))
(setq DISTPT(距离BASEPT LASTPT))
(setq REFPT(极坐标(0.0 0.0 0.0)ANGLPT DISTPT))
(setq BASEPT LASTPT);增量基点
(提示(strcat“\n复制点:”))
(命令“copy”SS“”BASEPT pause)
)
)
);结束时
(ssget“P”)
(setq REFPT(获取点(strcat“\n显示:”))
(如果(非参考)
(setq REFPT(getvar“lastpoint”))
)
(命令“copy”SS“REFPT”)
);结束时
);如果结束
(setvar“cmdecho”1)
(普林斯)
);结束defun
(普林斯)
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:59:06 | 显示全部楼层
如果选择多个对象(用于复制)并且它们都是不同的颜色,会发生什么?
回复

使用道具 举报

4

主题

13

帖子

9

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:08:37 | 显示全部楼层
我很少使用一个以上的实体,因此我忘了提到。如果可以修改为只复制一个,我会很高兴。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:17:13 | 显示全部楼层
对于单选,将(ssget)替换为(car(entsel))。
您可以使用如下子例程设置颜色,并使用chprop、change、entmod、vla put color来设置颜色。
 
  1. (defun _colorUp (entity / num)
  2. (if (eq (type entity) 'ENAME)
  3.    (if (eq 255
  4.            (setq num (abs
  5.                        (cond ((cdr (assoc 62 (entget entity))))
  6.                              ((cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 (entget entity)))))))
  7.                        )
  8.                      )
  9.            )
  10.        )
  11.      1
  12.      (1+ num)
  13.    )
  14. )
  15. )
回复

使用道具 举报

4

主题

13

帖子

9

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:28:24 | 显示全部楼层
我用(car(entsel))更改了(ssget),但它选择了最后绘制的实体,而不是让我选择我想要的实体
给我一个提示,我应该把子程序放在哪一行。
(这比我想象的要高得多)
谢谢
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:33:18 | 显示全部楼层
 
 
使用Alanjt sub的示例
 
  1. (defun c:cc  ( / obj pt1 pt2 )
  2. (defun _colorUp (entity / num)
  3. (if (eq (type entity) 'ENAME)
  4. (if (eq 255
  5.          (setq
  6.            num
  7.             (abs
  8.               (cond
  9.                 ((cdr (assoc 62 (entget entity))))
  10.                 ((cdr
  11.                    (assoc
  12.                      62
  13.                      (tblsearch
  14.                        "LAYER"
  15.                        (cdr (assoc 8 (entget entity)))))))))))
  16.    (setq num 1)
  17.    (setq num (1+ num))))
  18. (command "_chprop" entity "" "color" num "")
  19. )
  20. (setq
  21.    obj (entsel "\nSelect object to copy: ")
  22.    pt1 (getpoint "\nPick base point:"))
  23. (while (setq pt2 (getpoint pt1 "\nNext point:"))
  24.    (command "copy" obj "" pt1 pt2)
  25.    (setq
  26.      pt1 pt2
  27.       obj (entlast))
  28. (_colorUp obj)
  29.    )
  30. )

 
希望这有帮助
回复

使用道具 举报

4

主题

13

帖子

9

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:39:41 | 显示全部楼层
我现在开始工作了
谢谢pBe
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:54:19 | 显示全部楼层
只是为了好玩。。。
 
  1. (defun c:TEst (/ _colorUp obj lst pt color)
  2. (vl-load-com)
  3. (defun _colorUp (obj / color)
  4.    (if (eq 255
  5.            (if (vl-position (setq color (vla-get-color obj)) '(0 256))
  6.              (setq color (cdr (assoc 62 (tblsearch "LAYER" (vla-get-layer obj)))))
  7.              color
  8.            )
  9.        )
  10.      1
  11.      (1+ color)
  12.    )
  13. )
  14. (if (and (setq obj (car (entsel "\nSelect object to copy: ")))
  15.           (setq obj (vlax-ename->vla-object obj))
  16.           (car (setq lst (list (getpoint "\nSpecify base point: "))))
  17.      )
  18.    (while (setq pt (if acet-ss-drag-move
  19.                      (acet-ss-drag-move
  20.                        (ssadd (vlax-vla-object->ename obj))
  21.                        (car lst)
  22.                        "\nSpecify next point: "
  23.                        T
  24.                      )
  25.                      (getpoint (car lst) "\nSpecify next point: ")
  26.                    )
  27.           )
  28.      (setq color (_colorUp obj))
  29.      (vla-move (setq obj (vla-copy obj))
  30.                (vlax-3d-point (trans (car lst) 1 0))
  31.                (vlax-3d-point (trans (car (setq lst (cons pt lst))) 1 0))
  32.      )
  33.      (vla-put-color obj color)
  34.    )
  35. )
  36. (princ)
  37. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:03 , Processed in 0.384898 second(s), 68 queries .

© 2020-2025 乐筑天下

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