乐筑天下

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

[编程交流] LISP例程格式和comman

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:39:59 | 显示全部楼层 |阅读模式
大家好,
 
我以前从未编写过LISP例程,我发现自己需要一个没有LISP似乎无法实现的函数,因此我开始了第一次尝试。事情进展得不太顺利。
 
我需要能够选择两个点,并绘制一个正方形,使用这两个点作为对角点。
 
我想如果我可以检查两点之间的角度,然后加上或减去45度,我将得到正方形的旋转,然后我可以使用矩形命令来绘制它,通过拾取第一个点,设置旋转,然后拾取第二个点。
 
我认为代码应该是这样的:
(定义C:正方形(/p1-p2)
(设置q p1(getpoint“\n拾取第一个角:”)
(设置q p2(getpoint“\n拾取相反的角:”))
(设置q rotang(-45(角度p1 p2)))
(命令“RECTANGLE”p1“R”“rotang”p2)
(普林斯)
)
我遇到的第一个问题是,我不知道如何检查两点之间的角度。我知道我可以通过使用DIST命令得到它,值显示为“XY平面中的角度”,但我不知道如何使用该值作为我的角度值。
 
第二,我甚至不知道我是否在编写代码的正确轨道上。
任何帮助都将不胜感激。
我在Civil 3D 2011工作。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:48:41 | 显示全部楼层
也许这会为你的目标指明方向:
 
  1. (defun c:square ( / pt2 pt2 ang ) ; Define function and localise variables
  2. (if ; If the following
  3.    (and ; Both the statements must return T
  4.      (setq pt1 (getpoint "\nSpecify First Point: ")) ; Prompt for first point
  5.      (setq pt2 (getpoint "\nSpecify Opposite Corner: " pt1)) ; Prompt for second point
  6.    )
  7.    (progn
  8.      (setq ang (- (angle pt1 pt2) (/ pi 4.))) ; get angle (in rads) and subtract 45 degrees
  9.      
  10.      (command "_.rectangle" "_non" pt1 "_R" (* 180. (/ ang pi)) "_non" pt2) ; Invoke Rectangle command
  11.    )
  12. )
  13. (princ) ; Exit Quietly
  14. )
PS>这是一个很好的变量局部化方法,大多数人都忽略了这一点
 
要扩展,您必须注意OSnap,还可能考虑将CMDECHO切换到0,然后重置。但我们会一步一步来。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:59:21 | 显示全部楼层
值得思考的是,我将这样做:
 
也许现在它可能比你高一点,但也许这是一个需要努力的方向
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:10:22 | 显示全部楼层
 
谢谢,谢谢,谢谢!我喜欢它!到目前为止,它工作得很好。您为我节省了数小时的手动计算和放置正方形的时间(我有大约4000个正方形)。
 
PS>谢谢。。。我试着在网上找到任何我能找到的信息和教程,至少我能自己写一些东西,所以我能想出一点格式,但我还有很多东西要学!
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:19:45 | 显示全部楼层
 
哈哈。。。肯定比我高,但我喜欢挑战。而且,我讨厌不知道如何做事。所以,我一定会看看,并试图了解你是如何做到这一点的。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:25:00 | 显示全部楼层
我很乐意帮忙。
 
关于第一个代码,这是一种“初步”排序,因为在OSnap干扰方面,您将遇到麻烦-可能在向命令函数提供点之前使用“_non”来忽略OSnap。(我会更新代码)。
 
第二种方法速度更快,您无需担心OSnap,因为它可以绕过所有命令调用,直接将对象添加到图形数据库中。
 
关于LISP的帮助,我不久前发布了这个帖子,希望你能从中获得一些信息:
 
http://www.cadtutor.net/forum/showthread.php?49515-有用的LISP链接
 
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:31:53 | 显示全部楼层
 
我一直在使用第二个代码,它工作得很好(我已经做了50组分)。但是,我刚刚得到这组点,我得到了红色的时髦方块。我在相同的点上跑了第一个球,得到了蓝方块。我不知道是什么把它丢在这里了。其余的人用两种方法中的任何一种给我相同的平方。
 
114005ha0l0tct5awtl8ae.jpg
 
谢谢你的链接,我期待着查看并了解更多。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:44:30 | 显示全部楼层
我不知道该怎么办。。。嗯,我不确定。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:17 , Processed in 0.551976 second(s), 70 queries .

© 2020-2025 乐筑天下

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