明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: lyy

[讨论]征求轮廓线的lisp思路

  [复制链接]
发表于 2003-11-9 21:44 | 显示全部楼层
好帖子,先顶到前边去看:)
发表于 2004-1-17 20:54 | 显示全部楼层
这篇帖子不错。保存
发表于 2004-1-20 11:16 | 显示全部楼层
本帖最后由 作者 于 2004-1-20 18:23:25 编辑

贴一个自己的,
(defun c:lkx1 (/ DX DY E E1 IN N P1 P2 P21 P3 P4 S XY)
  (mapcar 'setvar '("cmdecho""blipmode") '(0 0))
  (prompt "\n选择要画外轮廓线的物体:")
  (setq s(ssget)
        p1 (getpoint "\n输入框线左下点:")
        p3 (getcorner p1 "\n输入框线右上点:")
        xy(mapcar '- p3 p1)
        dx (car xy) dy (cadr xy)
        p2 (xd p1 0 dy)                        p4 (xd p1 dx 0)
        p21(xd p2 100 -100))
  (setvar "osmode" 0)
  (#m_pl2 1 0 0 (list p1 p2 p3 p4) (getvar "clayer") -1)
  (setq e1(entlast)s(ssadd e1 s))
  (command "-boundary" "a" "b" "n" s """" p21 ""
           "erase" e1 "")
  (setq s(get-ss e1)n(sslength s)in 0)
  (cond
    ((< n 2))
    ((= n 2)(entdel (ssname s 1)))
    (t
      (repeat (- n 2)
        (setq e(ssname s in) in (1+ in))
        (entdel e)
      )
      (entdel (ssname s (1- n)))
    )
  )
  (mapcar 'setvar '("osmode""cmdecho""blipmode") '(32 1 1))(princ)
)

(defun xd(#pt #x #y)
  (list (+ (car #pt) #x) (+ (cadr #pt) #y))
)
(defun #m_pl2 (d70 plw pla pl_list lay_pl color / pb)
  (setq        d90 (length pl_list)
        pb  '()
  )
  (foreach x pl_list
    (progn
      (setq pb
             (append pb
                     (list (cons 10 x)
                           (cons 40 plw)
                           (cons 41 plw)
                           (cons 42 pla)
                     )
             )
      )
    )
  )
  (setq        en000 (append (list
                        (cons 0 "LWPOLYLINE")
                        (cons 100 "AcDbEntity")
                        (cons 8 lay_pl)
                        (cons 100 "AcDbPolyline")
                        (cons 90 d90)
                        (cons 70 d70)
                      )
                      pb
              )
  )
  (if (/= -1 color) (setq en000 (append en000 (list (cons 62 color)))))
  (if (= nil (entmake en000)) (princ "\n制造 LWPL 制造失败.")  )
)

程序是以前写的,不足有:
没加入过滤。
可能出现多个轮廓线,和bon的算法有关。
现在和育游的相比是手动的了。:)
发表于 2004-1-20 11:22 | 显示全部楼层
还有几个子函数没给出来吧
发表于 2004-1-20 13:26 | 显示全部楼层
一点思路:
用WMFOUT/WMFIN将选择集内的物体处理成临时图块,去掉外边的框后在得到包围盒的焦点坐标,在包围盒和外框之间任意一点作boundary,如果图形吻合,应能找到边界(两个多义线,选面积小的)。
发表于 2004-1-23 01:06 | 显示全部楼层
本帖最后由 作者 于 2004-1-23 5:33:27 编辑

研究了一下,这样也行?

  1. (defun x@outline1 ()
  2.   (setvar "qaflags" 1)
  3.   (setq ss0 (ssget "all")
  4.         ss  (ssget))
  5.   (vl-cmdf "_.copy" ss "" "0,0" "@")
  6.   (vl-cmdf "_.region" "all" "r" ss0 ""
  7.            "_.union" "all" "r" ss0 ""
  8.            "_.explode" "all" "r" ss0 ""
  9.            "_.explode" "all" "r" ss0 ""
  10.            "_.pedit" "m" "all" "r" ss0 "" "y" "j" "1" ""
  11.            "_.region" "all" "r" ss0 ""
  12.            "_.union" "all" "r" ss0 ""
  13.            "_.explode" "all" "r" ss0 ""
  14.            "_.explode" "all" "r" ss0 ""
  15.            "_.pedit" "m" "all" "r" ss0 "" "y" "j" "1" ""
  16.   )
  17. )
  18. (defun x@outline2 ()
  19.   (vl-cmdf ".undo" "be")
  20.   (setq os (getvar "osmode"))
  21.   (setvar "osmode" 0)
  22.   (setvar "qaflags" 1)
  23.   (setq ss0 (ssget "all")
  24.         ss  (ssget '((0 . "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE")))
  25.         vmin  (getvar "VSMIN")
  26.         vmax  (getvar "VSMAX")
  27.         dist  (* 2 (getvar "VIEWSIZE") (/ (getvar "PICKBOX") 100)))
  28.   (vl-cmdf ".RECTANGLE" (polar vmin (* 1.25 PI) dist) (polar vmax (* 0.25 PI) dist))
  29.   (setq em (entlast))
  30.   (vl-cmdf "_.boundary" "a" "o" "P" "i" "y" "b" "n" ss em "" ""  emin "")
  31.   (setvar "osmode" os)
  32.   (vl-cmdf ".undo" "e")
  33. )


测试了一下,用region只能对封闭实体有效,可惜,可惜。用boundary可以对line,arc等封闭的区域有效,但通用性又没region好。我觉得两者应该结合起来。
发表于 2004-9-29 05:53 | 显示全部楼层
再玩玩

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2004-10-19 09:46 | 显示全部楼层
我的思路是:做一个能包含你图的大圆,然后在lisp中command"_boundary""region"生成边界。得到两个封闭的面域。其中一个就是你想要的。
发表于 2012-6-12 19:36 | 显示全部楼层
各位大侠太厉害了。长见识了。
发表于 2014-4-14 17:56 | 显示全部楼层
各位大侠太厉害了。长见识了。非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 17:09 , Processed in 0.508166 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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