kry 发表于 2014-8-30 23:55:12

分解L形

把附件中的L形全分解出来,附件中的图形还可以衍生,仅示例了些常见的!希望是一个思路解全部,不要分类的!

kry 发表于 2014-8-30 23:58:59

忘记了附件,下面补上

ZZXXQQ 发表于 2014-8-31 08:05:32

本帖最后由 ZZXXQQ 于 2014-8-31 08:31 编辑

图中只有一个L形
(defun c:tt ()
(setq ss1 (ssadd))
(if (and (princ "\n选择L形: ")
          (setq ss (ssget '((0 . "LWPOLYLINE") (90 . 6))))) (progn ;选六条边的复线
(repeat (setq i (sslength ss))
   (setq en (ssname ss (setq i (1- i))))
   (setq ent (entget en))
   (setq e42 (mapcar '(lambda (x) (if (= (car x) 42) (cdr x))) ent));凸度
   (if (apply '= (cons 0.0 e42)) (progn ;凸度=0,无弧
    (setq plst (mapcar '(lambda (x) (if (= (car x) 10) (cdr x))) ent));节点表
    (setq ptlst (mapcar 'cons plst (append(cdr plst)(list(car plst)))));点两两成对
    (setq anglst (mapcar '(lambda (x) (apply 'angle x)) ptlst));直线角度
    (setq anglst (vl-sort anglst '<));角度排序
    (if (= (length anglst) 2) (ssadd en ss1));三线平行为L形
   ))
)
))
(sssetfirst nil ss1)
)

kry 发表于 2014-8-31 12:16:13

可能我没表达清晰,附件中的所有图形都由L形组成,把每个图形所包含的L形分解出来,所示图例可以是不平行的,可以宽度不同,因为情况可以衍生很多种,所以没一一列出,现在只求把图中的解决。图片中红色的是分解后所要的结果!
页: [1]
查看完整版本: 分解L形