vitalgg 发表于 2023-1-11 23:42:45

【函数】curve:rectanglep 测试一个多段线是否为矩形

本帖最后由 vitalgg 于 2023-1-12 14:59 编辑

【函数】curve:rectanglep 测试一个多段线是否为矩形


本函数源码:
https://gitee.com/atlisp/atlisp- ... urve/rectanglep.lsp

@lisp函数库
https://gitee.com/atlisp/atlisp-lib


函数库问题讨论,建议及意见交流区
https://gitee.com/atlisp/atlisp-lib/issues

@lisp开源项目
https://gitee.com/atlisp

(defun curve:rectanglep (ent)
"测试一个多段线是否为矩形"
"T or nil"
(and
   (= 'ename (type ent))
   (wcmatch (entity:getdxf ent 0) "*POLYLINE") ;; 是多段线
   (or ;; 4点且闭合 或 5点首尾点相同
    (and (= (entity:getdxf ent 90) 4)
   (= (entity:getdxf ent 70) 1))
    (and (= (entity:getdxf ent 90) 5)
   (= (entity:getdxf ent 70) 0)))
   (apply '= (entity:getdxf ent 42))
   (progn
   (setq pts (curve:get-points ent))
   (setq ang
   (abs
      (- (angle (nth 0 pts)(nth 1 pts))
         (angle (nth 1 pts)(nth 2 pts)))))
   (if (> ang pi)(setq ang (- ang pi)))
   ;; 邻边垂直且对角长度相等
   (and
      (equal ang (* pi 0.5) 1e-6)

      (equal (distance (nth 0 pts)(nth 1 pts))
             (distance (nth 2 pts)(nth 3 pts))
             1e-6)
      (equal (distance (nth 0 pts)(nth 2 pts))
       (distance (nth 1 pts)(nth 3 pts))
    1e-6)
      (if (nth 4 pts) ;; 存在第5点时,第5点同第1点
    (< (distance (nth 0 pts)(nth 4 pts)) 1e-6)
t)
      ))))
公众号:CAD应用云 中寻求帮助



CAD命令行中寻求帮助



CAD命令行中聊天寻求帮助






VScode 中寻求帮助








77077 发表于 2023-1-12 09:53:18

本帖最后由 77077 于 2023-1-12 09:55 编辑


我有强迫症,我认为顶点数不为4的不能算矩形,不闭合的不能算矩形,带凸度的不能算矩形。

不知道对不对?
(and
      (setq curve(car(entsel "\n选择对象:")))
      (= (vlax-curve-getEndParam curve) 4)
      (vlax-curve-isClosed curve)
      (setq d1 (vlax-curve-getDistAtParam curve 1))
      (setq d2 (- (vlax-curve-getDistAtParam curve 2) d1))
      (equal (vlax-curve-getArea curve) (* d1 d2) 1e-6)
)

vitalgg 发表于 2023-1-12 14:53:04

77077 发表于 2023-1-12 09:53
我有强迫症,我认为顶点数不为4的不能算矩形,不闭合的不能算矩形,带凸度的不能算矩形。

不知道对不 ...


你说的对。




kozmosovia 发表于 2023-1-12 22:34:38

万一超过一个点有重合呢?

vitalgg 发表于 2023-1-13 02:34:06

kozmosovia 发表于 2023-1-12 22:34
万一超过一个点有重合呢?

先用 killover 处理一下

哆啦A梦_oELxg 发表于 2023-2-10 23:15:03

"contributes.grammars.language" 中包含未知语言。提供的值: autolisp-injection
命令“autolisp.loadActiveFile”在 `commands` 部分重复出现。

看看用@lisp函数库经常用不了,出现这个是怎么回事。

vitalgg 发表于 2023-2-11 09:20:41

本帖最后由 vitalgg 于 2023-2-11 09:23 编辑

哆啦A梦_oELxg 发表于 2023-2-10 23:15
"contributes.grammars.language" 中包含未知语言。提供的值: autolisp-injection
命令“autolisp.loadAct ...
应该是需要安装 markdown 相关扩展才行。
我把这段删了吧。请更新扩展版本到 1.4.18 试一下。

{
                              "language": "autolisp-injection",
                              "scopeName": "markdown.autolisp.codeblock",
                              "path": "./syntaxes/cl_codeblock.tmLanguage.json",
                              "injectTo": [
                                        "text.html.markdown"
                              ],
                              "embeddedLanguages": {
                                        "meta.embedded.block.autolisp": "autolisp"
                              }
                        }

哆啦A梦_oELxg 发表于 2023-2-11 11:50:42

vitalgg 发表于 2023-2-11 09:20
应该是需要安装 markdown 相关扩展才行。
我把这段删了吧。请更新扩展版本到 1.4.18 试一下。



给力,安装markdown all in one扩展后,没问题了。:victory:
页: [1]
查看完整版本: 【函数】curve:rectanglep 测试一个多段线是否为矩形