乐筑天下

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

[编程交流] 快速镜像帮助

[复制链接]

18

主题

81

帖子

63

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 16:21:09 | 显示全部楼层
 
好的,不是说我必须使用上面的代码。我只是想说,这是我想要的,而不是一次选择多件事情的能力。我对lisp世界还是个新手(理解和写作)
回复

使用道具 举报

BKT

1

主题

124

帖子

123

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-7-5 16:27:33 | 显示全部楼层
 
那么,您可以使用SSGET选择对象,然后选择其中一个对象上或附近的点(端点、屏幕位置等),然后为镜像对象选择点。可能有更简单的方法,也可能有人会提出一种方法,但下面是一个使用您发布的代码的示例,但进行了一些修改:
 
  1. (defun C:testmirror ( / obj objinfo objpt pt dist ang midpt midend)
  2. (setq objs (ssget "\nSelect Objects to Mirror: "))
  3. (setq objpt (getpoint "\nSelect Object Point: "))
  4. (setq pt (getpoint "\nSelect point to left or right"))
  5. (setq dist (distance objpt pt))
  6. (setq ang (angle objpt pt))
  7. (setq midpt (polar objpt ang (/ dist 2)))
  8. (setq midend (list (car midpt) (- (cadr midpt) 10)))
  9. (command "mirror" objs "" midpt midend "N" )
  10. (princ)
  11. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:30:28 | 显示全部楼层
我们允许循环输入如何:
 
  1. (defun C:test ( / L f )
  2. (and
  3.    (setq L
  4.      (CycleInputs
  5.        '(
  6.          (SS (progn (princ "\n>>Select objects to mirror: ") (ssget "_:L")))
  7.          (p1 (progn (initget "Exit") (apply 'getpoint (append (if p2 (list p2)) '("First Point [Exit]: ")))) )
  8.          (p2 (progn (initget "Exit") (apply 'getpoint (append (if p1 (list p1)) '("Second Point [Exit]: ")))) )
  9.        )
  10.        (lambda (s v) (= "Exit" v) )
  11.      ); CycleInputs
  12.    ); setq L
  13.    (= 3 (length L)) (setq f (lambda (x) (cdr (assoc x L))))
  14.    (progn
  15.      (setvar 'cmdecho 0)
  16.      (command "_.MIRROR" (f 'SS) "" "_non" (f 'p1) "_non" (f 'p2) "N")
  17.      (setvar 'cmdecho 1)
  18.    )
  19. )
  20. (princ)
  21. ); defun C:test
  22. (defun CycleInputs ( inpL exitf / tmp )
  23. (cond  ; (87 114 105 116 116 101 110 32 98 121 32 71 114 114 114)
  24.    ( (not inpL) inpL)
  25.    ( (setq tmp (vl-catch-all-apply (function (lambda (a b) (set a (eval b)))) (car inpL)))
  26.      (cond
  27.        ( (vl-catch-all-error-p tmp) (prompt (vl-catch-all-error-message tmp)) )
  28.        ( (and exitf (vl-catch-all-apply (function exitf) (list (caar inpL) tmp))) (set (caar inpL) nil) )
  29.        (
  30.          (mapcar (function (lambda (tmp) (set (car tmp) nil) tmp))
  31.            (cons (cons (caar inpL) tmp) (CycleInputs (cdr inpL) exitf))
  32.          )
  33.        )
  34.      )
  35.    )
  36.    ( (CycleInputs (reverse (cons (car inpL) (reverse (cdr inpL)))) exitf) )
  37. )
  38. )

 
回复

使用道具 举报

BKT

1

主题

124

帖子

123

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-7-5 16:31:56 | 显示全部楼层
必须问“exitf”?也许只是BricsCAD和AutoCAD的比较。。。
回复

使用道具 举报

18

主题

81

帖子

63

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 16:36:10 | 显示全部楼层
 
 
好的,我刚刚测试了一下,我肯定喜欢!我想说的唯一一件事是有可能删除原件?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:40:17 | 显示全部楼层
 
是的,这是一个简单的解决方法:
 
更改:
  1. (command "_.MIRROR" (f 'SS) "" "_non" (f 'p1) "_non" (f 'p2) "[color="red"]N[/color]")

 
收件人:
  1. (command "_.MIRROR" (f 'SS) "" "_non" (f 'p1) "_non" (f 'p2) "[color="red"]Y[/color]")
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:08 , Processed in 0.640997 second(s), 62 queries .

© 2020-2025 乐筑天下

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