乐筑天下

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

[编程交流] LISP用于快速旋转/对齐X?

[复制链接]

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 18:16:12 | 显示全部楼层 |阅读模式
说到LISP,我是一个绝对的初学者,我正在尝试编写一个例程。在尝试了几个教程之后,我决定来这里。
 
我正在尝试编写一个程序,当用户单击一条直线或曲线时,该程序将选择与X轴对齐。我还想包括一个与Y轴对齐的特征,但这可能会在稍后出现。
 
有一个来自李·麦克的快速镜像Lisp程序(http://www.lee-mac.com/quickmirror.html)它执行大部分所需步骤。我试图破译它,但我不知道从哪里开始裁剪它以满足我的需要。
 
如果这样一个程序已经存在,我很乐意参与,因为它会节省我大量的时间。使用“对齐”命令需要太多的单击(并且每次单击需要太多的精度)。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:29:34 | 显示全部楼层
欢迎来到CADTutor
 
你能详细解释一下“将选定内容与X轴对齐”是什么意思吗?
 
例如,是否应围绕其边界框的中心旋转选择,以使选定对象上的点与x轴对齐?例如。:
 
191616oz4s2pxzu4t4qjxw.png
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 18:41:00 | 显示全部楼层
也许你会在这个帖子中发现一些有用的东西:http://www.cadtutor.net/forum/showthread.php?85946-对齐对象并单击2次
回复

使用道具 举报

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 18:56:03 | 显示全部楼层
李-谢谢!
我实际上已经把那部分想透了,但忘了提。由于我缺乏经验,我一直保持简单。我想把目标线段的中心点作为旋转中心。一旦我弄清楚事物是如何工作的,理想的做法是围绕质心旋转,然后将其移动到图纸上最近的空白处。
 
Grrr-看起来它足够接近我想要的东西,并且可能包含足够的代码,让我未经训练的头脑用quick mirror将其拼凑在一起以制作一些东西。
 
我希望今晚下班后能提供更多信息。我欢迎任何人编写代码,但如果你这样做了,请在代码中留下许多注释,以便我可以学习如何复制这个过程。我主要是想教自己精通LISP编码。
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:02:14 | 显示全部楼层
以下是一种非常简单(且评论颇丰)的入门方法,仅适用于与行对齐:
  1. ;; Define function, declare local variables
  2. (defun c:alignx ( / ent enx pt1 pt2 sel )
  3.    ;; If the user makes a selection of objects (on unlocked layers)
  4.    (if (setq sel (ssget "_:L"))
  5.        ;; If the user selects a single object
  6.        (if (setq ent (car (entsel "\nSelect line to align with x-axis: ")))
  7.            ;; If the selected object is a LINE
  8.            (if (= "LINE" (cdr (assoc 0 (setq enx (entget ent)))))
  9.                ;; Then evaluate the following expressions
  10.                (progn
  11.                    ;; Retrieve the WCS start & end points and translate them to UCS
  12.                    (setq pt1 (trans (cdr (assoc 10 enx)) 0 1)
  13.                          pt2 (trans (cdr (assoc 11 enx)) 0 1)
  14.                    ) ;; end setq
  15.                    ;; Invoke the Rotate command
  16.                    (command "_.rotate"
  17.                        ;; Pass the selection of objects
  18.                        sel ""
  19.                        ;; Specify the line midpoint as the rotation base point
  20.                        "_non" (mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) pt1 pt2)
  21.                        ;; Rotate the reference line to zero
  22.                        "_R" "_non" pt1 "_non" pt2 0.0
  23.                    ) ;; end command
  24.                ) ;; end progn
  25.                ;; Else the selected alignment object was not a line
  26.                (princ "\nThe selected object is not a line.")
  27.            ) ;; end if
  28.            ;; Else no alignment object was selected
  29.            (princ "\nNo alignment object selected.")
  30.        ) ;; end if
  31.        ;; Else no objects were selected
  32.        (princ "\nNo objects selected.")
  33.    ) ;; end if
  34.    ;; Supress the value returned by the last evaluated expression
  35.    (princ)
  36. ) ;; end defun
回复

使用道具 举报

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 19:12:27 | 显示全部楼层
含糖的我来玩玩这个。非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:23:54 | 显示全部楼层
不客气-我希望这会有所帮助!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 20:22 , Processed in 0.442070 second(s), 68 queries .

© 2020-2025 乐筑天下

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