明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2843|回复: 11

[已解答] 填充连接

[复制链接]
发表于 2014-6-16 09:04 | 显示全部楼层 |阅读模式
  在CAD里边怎么样能达到这中效果,把填充的线连成2根, 只要达到最终的效果  , 直接填充或者填充好格子后连接 怎么样都行

(红线和白线只是为了看起来清晰些,没有要求)


langjs 大大帮我解决下 万分感谢


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-6-16 22:13 | 显示全部楼层
本帖最后由 langjs 于 2014-6-17 11:18 编辑

修正个错误的地方

;;; 填充连线2
;;;                by:langjs
(defun c:aa ( / bz ent h i j loop lst lst1 maxpoint minpoint p0 p1 ptn ptn1 ptn2 ss w ww)
  (defun draw (lst / i)
    (entmake (append
               (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lst)))
               (mapcar
                 '(lambda (i)
                    (cons 10 i)
                  )
                 lst
               )
             )
    )
  )
  (setq ent (car (entsel "\n选择填充:")))
  (vla-getboundingbox (vlax-ename->vla-object ent) 'minpoint 'maxpoint)
  (setq p1 (vlax-safearray->list maxpoint)
        p0 (vlax-safearray->list minpoint)
  )
  (command ".explode" ent)
  (setq ss (ssget "p")
        lst '()
  )
  (repeat (setq i (sslength ss))
    (setq ent (entget (ssname ss (setq i (1- i))))
          lst (cons (cdr (assoc 10 ent)) lst)
          lst (cons (cdr (assoc 11 ent)) lst)
    )
  )
  (setq lst (vl-sort lst (function (lambda (i j)
                                     (< (cadr i) (cadr j))
                                   )
                         )
            )
  )
  (setq lst (vl-sort lst (function (lambda (i j)
                                     (< (car i) (car j))
                                   )
                         )
            )
  )
  (setq lst1 lst
        h (- (cadr (cadr lst)) (cadr (car lst)))
        w h
        ww (- (car p1) (car p0))
        lst (list p0)
        ptn p0
        bz (car ptn)
        loop t
  )
  (while loop
    (setq i 0
          bz (car ptn)
    )
    (repeat (fix (/ (- (cadr p1) (cadr p0)) h))
      (setq ptn (polar ptn (* 0.5 pi) h)
            lst (cons ptn lst)
            ptn (polar ptn (* i pi) w)
      )
      (if (> (car ptn) (car p1))
        (setq loop nil
              w (- h (- (car ptn) (car p1)))
              ptn (list (car p1) (cadr ptn))
        )
      )
      (setq lst (cons ptn lst)
            i (1+ i)
      )
    )
    (setq ptn1 (list (car ptn) (cadr p1))
          lst (cons ptn1 lst)
    )
    (if loop
      (progn
        (setq w h
              ptn2 (polar ptn1 0.0 (* 2 w))
        )
        (if (and
              (> (- (car ptn2) (car p1)) h)
              (> (- (car ptn2) (car p1)) 0)
            )
          (setq loop nil)
        )
        (if (> (car ptn2) (car p1))
          (setq w (- h (- (car ptn2) (car p1)))
                ptn2 (list (car p1) (cadr ptn2))
          )
        )
        (setq lst (cons ptn2 lst))
        (if (= bz (car ptn))
          (setq i 0)
          (setq i 1)
        )
        (setq ptn (polar ptn 0.0 (* 2 h)))
        (if (and
              (> (- (car ptn) (car p1)) h)
              (> (- (car ptn) (car p1)) 0)
            )
          (setq loop nil)
        )
        (if (> (car ptn) (car p1))
          (setq w (- h (- (car ptn) (car p1)))
                ptn (list (car p1) (cadr ptn))
          )
        )
        (if loop
          (progn
            (setq lst (cons ptn lst))
            (repeat (fix (/ (- (cadr p1) (cadr p0)) h))
              (setq ptn (polar ptn (* i pi) w))
              (if (> (car ptn) (car p1))
                (setq loop nil
                      w (- h (- (car ptn) (car p1)))
                      ptn (list (car p1) (cadr ptn))
                )
              )
              (setq lst (cons ptn lst)
                    ptn (polar ptn (* -0.5 pi) h)
                    lst (cons ptn lst)
                    i (1+ i)
              )
            )
            (setq ptn (polar ptn 0.0 (* 2 h)))
            (if (> (car ptn) (car p1))
              (setq ptn (list (car p1) (cadr ptn))
                    loop nil
              )
            )
            (setq lst (cons ptn lst)
                  bz (car ptn)
            )
          )
        )
      )
    )
  )
  (draw lst)
  (setq lst (list p0)
        ptn p0
        i 0
        loop t
  )
  (while loop
    (setq ptn (polar ptn (* i pi) ww)
          lst (cons ptn lst)
          ptn (polar ptn (* 0.5 pi) h)
    )
    (if (> (cadr ptn) (cadr p1))
      (setq loop nil
            ptn (list (car ptn) (cadr p1))
      )
    )
    (setq lst (cons ptn lst)
          i (1+ i)
    )
  )
  (if (= (car ptn) (car p0))
    (setq lst (cons (list (car p1) (cadr ptn)) lst))
    (setq lst (cons (list (car p0) (cadr ptn)) lst))
  )
  (draw lst)
  (command "erase" ss "")
  (princ)
)

评分

参与人数 1明经币 +1 收起 理由
999999 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-31 16:53 | 显示全部楼层
langjs 发表于 2014-6-16 22:13
修正个错误的地方

;;; 填充连线2

大神您好,这个插件很完美,要是能完全的按照工字砖的填充图案生成就好了,感谢大神的辛苦付出
发表于 2014-6-16 14:07 | 显示全部楼层


本帖子中包含更多资源

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

x
 楼主| 发表于 2014-6-16 20:35 | 显示全部楼层
xyp1964 发表于 2014-6-16 14:07

院长    
发表于 2014-6-16 22:14 | 显示全部楼层
别再找人要程序了,自己学学试试
发表于 2014-6-16 22:15 | 显示全部楼层
本帖最后由 langjs 于 2014-6-16 22:53 编辑

对了,这个程序只适合长方形填充

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-6-17 08:25 | 显示全部楼层
langjs 发表于 2014-6-16 22:13
这个程序真心挺复杂的,调了好几个小时才搞出来。

感谢大大  无法用语言来表示我的感谢    不好意思啊 让你花费了好几个小时   真心的谢谢   
发表于 2014-6-17 21:34 | 显示全部楼层
 楼主| 发表于 2014-6-18 08:08 | 显示全部楼层
Gu_xl 发表于 2014-6-17 21:34
见 http://bbs.mjtd.com/thread-92207-2-1.html 13楼

G版回帖  无限感动啊   谢谢
发表于 2014-7-19 13:56 | 显示全部楼层
不错...试试看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-11 14:36 , Processed in 0.167410 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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