明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2777|回复: 10

[函数] 有请黄明儒老师帮忙解决"判断点在多段线内"的问题

[复制链接]
发表于 2018-5-7 19:17:18 | 显示全部楼层 |阅读模式
本帖最后由 lht 于 2018-5-7 19:19 编辑

在运行黄明儒老师的"判断点在多段线内"的函数,当点在边界外时,在命令行频显"边界不闭合,无效的选项关键字",拖慢了运行速度,将(setvar "cmdecho" 0)设为0也不行,能有什么办法关掉?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-5-8 07:55:18 | 显示全部楼层
lht 发表于 2018-5-7 22:26
谢谢黄老师,可否提供函数?

都打包进《葵花宝典A》中了
;;164.40 [功能] 点在封闭多段线内返回T,其余nil  By 狂刀(见175)
;;本程序为狂刀思想,并非源程序
;;(PtInorOut1 ((HH:PtLists (car(entsel))) (getpoint))
(defun PtInorOut1 (pts pt / P1 P2)
  (setq        pts (MAPCAR '(LAMBDA (p1 p2) (REM (- (ANGLE pt p1) (ANGLE pt p2)) PI))
                    (CONS (LAST pts) pts)
                    pts
            )
  )
  (equal (ABS (APPLY '+ pts)) PI)
)
回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-7 20:46:21 来自手机 | 显示全部楼层
既然点名了,不回复也不太好。1 你用的是哪个函数?2 多段线是否凸多边形?

评分

参与人数 1明经币 +1 收起 理由
434939575 + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-5-7 22:00:03 | 显示全部楼层
黄教师,是你这个函数。
(defun HH_PtInCurve (p ss / E E0)
  (cond ((equal (type ss) 'ENAME) (setq ss (ssadd ss (ssadd)))))
  (setvar "nomutt" 1)
  (setq e0 (entlast))
  (APPLY 'bpoly (list p ss '(1 0)))
  (while (not (equal (getvar "cmdnames") "")) (apply 'command (list "")))
  (setvar "nomutt" 0)
  (cond ((entnext e0) (while (setq e (entnext e0)) (entdel e)) T))
)
 楼主| 发表于 2018-5-7 22:01:09 | 显示全部楼层
多段线是凸多边形
发表于 2018-5-7 22:22:41 来自手机 | 显示全部楼层
凸多边形无需用这个程序了。有一个程序,凸多边形各点到某点的夹角之和为360度。也可用射线法,判断交点为偶奇。
 楼主| 发表于 2018-5-7 22:26:13 | 显示全部楼层
谢谢黄老师,可否提供函数?
发表于 2018-5-7 22:47:03 来自手机 | 显示全部楼层
尺有所短,寸有所长。例出的函数最适合的还是选择集,不适合追求速度。
 楼主| 发表于 2018-5-7 23:24:15 | 显示全部楼层
谢谢黄老师耐心解答!
发表于 2018-5-8 13:15:23 | 显示全部楼层
葵花宝典A有升级到B的计划吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-23 07:26 , Processed in 0.192836 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表