乐筑天下

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

[编程交流] 向左或向右偏移距离

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
6
发表于 2022-7-6 07:41:30 | 显示全部楼层 |阅读模式
嗨,我知道一点autolisp,但现在我想学习vlisp
im目前正在使用autolisp程序计算桩号和偏移量
但抵消都是积极的。我想让程序知道偏移是在多段线的左侧还是右侧。如果点位于左侧而右侧为正,则应显示负偏移值。
 
这是代码(我不记得我在哪个论坛复制了这段代码,但信用卡
转到func中提到的Jeff Mishler。
 
  1. (defun c:sta-off (/ endpt ent off offpt onpt ss sta startpt)
  2. ;; Marker for point location on the screen
  3. ;; Oct. 2004 by Jeff Mishler
  4. (defun Xmarksthespot (x y / leglen start)
  5.    (setq start (list x y)
  6.   leglen (* 0.03 (getvar "viewsize"))
  7.   )
  8.    (grdraw (polar start (angtof "135" 1) leglen)
  9.     (polar start (angtof "315" 1) leglen)
  10.     7)
  11.    (grdraw (polar start (angtof "45" 1) leglen)
  12.     (polar start (angtof "225" 1) leglen)
  13.     7)
  14.    )
  15. (while (setq ss (ssget "[img=http://autodesk.i.lithium.com/i/smilies/16x16_smiley-frustrated.gif]" '((0 . "LINE,*POLYLINE,SPLINE,ARC"))))
  16.    (setq ent (ssname ss 0))
  17.    (setq startpt (vlax-curve-getstartpoint ent)
  18.   endpt (vlax-curve-getendpoint ent)
  19.   )
  20.    (xmarksthespot (car startpt)(cadr startpt))
  21.    (while (setq offpt (getpoint "\nOffset point: "))
  22.      (setq onPt (vlax-curve-getclosestpointto ent offpt)
  23.     sta (vlax-curve-getdistatpoint ent onpt)
  24.     off (distance onpt offpt)
  25.     )
  26.      (princ (strcat "Station: " (rtos sta 2 2) " - Offset: " (rtos off 2 2)))
  27.      )
  28.    (redraw)
  29.    )
  30. (princ)
  31. )

 
帮助任何人?
 
谢谢
Ger Aven公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:02:23 | 显示全部楼层
欢迎来到CADTutor
 
首先,请阅读您帖子中关于格式化代码的说明,并相应地编辑您的帖子。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
6
发表于 2022-7-6 08:08:32 | 显示全部楼层
 
对不起,我没有看说明书,谢谢李
 
这是上面代码的示例输出,
 
偏移点:桩号:5.2397-偏移:4.8319
偏移点:桩号:7.4596-偏移:4.4995
 
我在多段线左侧选取了一个点,其值为正4.8319
然后我选择右边的值为正4.4995
 
我希望程序为在路线多段线左侧拾取的点提供负偏移值
 
谢谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:22:18 | 显示全部楼层
您可能需要查看拾取点任一侧的pline的两个点,并比较角度,以确定其左侧或右侧的距离仅返回+ve值。这里有各种各样的东西,都是关于象限的,你的角度在零角的两边。
 
ang1为pt1-pt2
ang2 pt1拾取pt
如果ang2大于ang1-ve?
 
请记住,柱脚可以在任何方向绘制,但返回点位于创建方向。
 
最后一个想法是查看一些链测标签LISP,它们可能有答案。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
6
发表于 2022-7-6 08:35:05 | 显示全部楼层
谢谢Bigal
 
我在看这段代码,看看从哪里开始,
 
  1. (defun AT:AngleAtPoint (e p)
  2.    ;; Return angle along curve, at specified point (on curve)
  3.    ;; e - valid curve (ENAME or VLA-OBJECT)
  4.    ;; p - point on curve
  5.    ;; Alan J. Thompson, 11.04.10
  6.    (angle '(0. 0. 0.) (vlax-curve-getFirstDeriv e (vlax-curve-getParamAtPoint e p)))
  7. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:45:49 | 显示全部楼层
就我做事的方式而言,几条建议节省了一些打字时间
 
  1. rather than (angtof "45" 1) use just  45ang
  2. in autoload lisp have the common values all preset 45 90 270 etc
  3. (setq 45ang (/ pi() 4.0))
  4. If only selecting one object maybe use entsel rather than ssget can still check if its line arc pline

 
还可以查看RTD和DTR非常常见的LISP
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 21:33 , Processed in 0.511180 second(s), 75 queries .

© 2020-2025 乐筑天下

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