乐筑天下

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

[编程交流] 画箭

[复制链接]

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:43:23 | 显示全部楼层 |阅读模式
你好
我制作了这个小Lisp来绘制一个小箭头,但它不适用于垂直或角度方向。那么,有什么想法可以迫使这个Lisp在各个方向都正常工作吗?。
  1. (defun c:arrow (/ p1 Len Alen p2 p3)
  2. (setq p1 (getpoint        "\nSpecify Start point of Arrow:")
  3.      p2 (getpoint p1         "\nSpecify End point of Arrow:")
  4.      dist (distance p1 p2)
  5.      vrt (/ dist 3)
  6.      p3 (list (car p2)(- (cadr p2) vrt))
  7.      p4 (list (car p3) (+ (cadr p3)(* vrt 2))) )
  8. (setq old (getvar 'osmode) new (setvar 'osmode 0))
  9. (vl-cmdf "_.pline" p1 "_w" 0 0 p3 p4 "_c" )
  10. (vl-cmdf "_.-hatch" "_s" (entlast) "" "_p" "_solid" "" "")
  11. (setvar 'osmode old)
  12. (princ))

 
塔瓦特
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 10:49:25 | 显示全部楼层
看看正交模式系统变量
 
~'J'~
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:52:44 | 显示全部楼层
实际上,由于(cadr值),正交模式不能影响Lisp,或者我可以
将其称为预先设计或预制Lisp。
 
塔瓦特
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-6 10:54:58 | 显示全部楼层
您可能需要引入一些额外的计算来让它工作。极轴和角度函数应该有用
 
只是一个s示例,使用您的代码
 
  1.      (setq  dist (distance p1 p2)
  2.      vrt (/ dist 3))
  3.      (setq  pickAngle (angle p1 p2))
  4.      (setq p3 (polar p2 (+ pickAngle (/ pi 2)) vrt))
  5.      (setq p4 (polar p2 (- pickAngle (/ pi 2)) vrt))
  6.       ))

 
可能还有其他考虑,ANGDIR setvar
回复

使用道具 举报

55

主题

293

帖子

239

银币

后起之秀

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

铜币
275
发表于 2022-7-6 10:56:11 | 显示全部楼层
谢谢你,杰米,这真的很有帮助。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 11:02:06 | 显示全部楼层
 
谢谢jammie,非常好。
 
我的问候
 
塔瓦特
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:02:36 | 显示全部楼层
为什么不只是绘制一条具有宽度的LW多段线,而不是一条具有图案填充的闭合多段线?
 
快速而愚蠢的示例。。。
 
  1. (defun c:TEst (/ p1 p2)
  2. (if (and (setq p1 (getpoint "\nSpecify first point: "))
  3.           (setq p2 (getpoint p1 "\nSpecify next point: "))
  4.      )
  5.    (progn
  6.      (command "_.pline" "_non" p1 "_w" 0. (/ (distance p1 p2) 3.) "_non" p2 "")
  7.      (setvar 'plinewid 0.)
  8.    )
  9. )
  10. (princ)
  11. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 11:07:12 | 显示全部楼层
 
我以前曾想过一次,但我想一声大喊就把两只鸟打飞眨眼:
 
首先,了解在我未来的例程中遵循GETPOINT方向的原则。
其次,我的图形具有不同的比例,因此LWPolyline需要手动指定其第二宽度。
 
塔瓦特
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:10:24 | 显示全部楼层
好啊我只是遵循了与你上述惯例类似的原则。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 11:13:05 | 显示全部楼层
哈哈
我相信你的代码不是第一次发布的。当我写最后一封回信时。
 
正当
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 16:50 , Processed in 0.402555 second(s), 83 queries .

© 2020-2025 乐筑天下

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