拟合线的线 只有四个顶点,只对这四个顶点排序?
我主要是为了解决当下遇到的问题去想的这个功能,而且我目前能力不够技术很菜,autolisp的书也才看了一小部分,很难把思路转化为代码语言。所以没有大佬考虑的那么多,适用性小了点。
功能方面 算是上下2条拟合线取出来顶点,然后4个顶点连线。只不过两条拟合线首尾已经用直线连接起来形成了一个闭合的多段线框,方便批量处理 已成封闭图形,并且打算批量处理,用上下两条线的端点没办法批量操作,还是只能2根线去单选 本帖最后由 vitalgg 于 2023-11-23 20:15 编辑
求所有点。然后只有四个角度近似 90度,其它近似0度。
代码容差为 0.05pi,根据需要自行调整。
(defun c:rec4 ()
(progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
(setq lwpls (pickset:to-list (ssget'((0 . "lwpolyline")))))
(foreach
lwpl lwpls
;; 分析各点角度
(setq pts (curve:get-points lwpl))
(print pts)
(setq pt-first (car pts))
(setq pt-end (last pts))
(setq pts (append (list pt-end) pts (list pt-first)))
(setq angles '())
(setq ang 0)
(setq pts-rec nil)
(while (and (> (lengthpts) 2)
(or (< ang (* 0.05 pi))
(> ang (* 1.95 pi))
(equal ang (* 0.5 pi) (* 0.05 pi))
(equal ang (* 1.5 pi) (* 0.05 pi)))
)
(setq ang (-(angle(cadr pts)(caddr pts))
(angle (car pts)(cadr pts))))
(print ang)
(setq ang (abs ang))
(if (or (equal ang (* 0.5 pi) (* 0.05 pi))
(equal ang (* 1.5 pi) (* 0.05 pi)))
(setq pts-rec (cons (cadr pts) pts-rec)))
(setq pts (cdr pts)))
(if (and (= (length pts) 2)(= 4 (length pts-rec)))
(entity:make-lwpolyline pts-rec nil 0 1 0)))
)
https://atlisp.cn/static/videos/近似矩形.mp4
vitalgg 发表于 2023-11-23 11:31
求所有点。然后只有四个角度近似 90度,其它近似0度。
代码容差为 0.05pi,根据需要自行调整。
感谢大佬的代码,看动图是我想要实现的功能
但我加载的时候还是会报错,提示输入列表有缺陷 vitalgg 发表于 2023-11-23 11:31
求所有点。然后只有四个角度近似 90度,其它近似0度。
代码容差为 0.05pi,根据需要自行调整。
想问下大佬这个报错该怎么处理? 本帖最后由 vitalgg 于 2023-11-23 20:17 编辑
117g 发表于 2023-11-23 19:53
想问下大佬这个报错该怎么处理?
最后if 条件少打一个右括号。已更正。 vitalgg 发表于 2023-11-23 11:31
求所有点。然后只有四个角度近似 90度,其它近似0度。
代码容差为 0.05pi,根据需要自行调整。
太强了,感谢大佬分享 请问大佬主要做什么用啊 树櫴希德 发表于 2023-11-24 11:24
请问大佬主要做什么用啊
函数封闭曲线,放到cad中处理,cad的函数线不会画,只能用多段线控制精度拟合再操作了
页:
1
[2]