明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5308|回复: 26

单变双,双变单

  [复制链接]
发表于 2012-6-29 10:04 | 显示全部楼层 |阅读模式
本帖最后由 luyu9635 于 2012-6-29 10:10 编辑

想要两个实现如下图功能的程序,图1为双线变单线,选择A,变成B,B的绿线是在红线的中间位置,其中B的红线是不要的,只是为了更好的表达程序的目的;图2为相反的功能,把单线变成双线,其中B的红线同样也是没有的,请大家帮帮忙,谢谢了,另给个附件文件

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-7-23 11:45 | 显示全部楼层
只有演示,没有源代码,真是可惜了
发表于 2019-7-22 13:10 | 显示全部楼层
这个可以请看附件

本帖子中包含更多资源

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

x
 楼主| 发表于 2012-6-29 10:12 | 显示全部楼层
这个可能在建筑画图方面用得多
 楼主| 发表于 2012-6-29 15:00 | 显示全部楼层
自己顶起,不要沉
发表于 2012-6-30 08:02 | 显示全部楼层
顶起,不要沉
发表于 2012-6-30 12:43 | 显示全部楼层
单边双是比较简单的,找些单线变双墙的程序就行了。
双变单可参照如下程序
(Defun c:test () (_DrawDivLine (car (entsel)) 0.8))
;;; Format (_DrawDivLine BoundaryRectangleObject[ENAME] GapDistance[REAL]
(Defun _DrawDivLine (pl              gap        /          _GetRectangleCorner
            _Extend2Border        DD          HLINE            II              LL
            SS              UR        VLINE          XMAX            XMAX1     XMIN
            XMIN1     YMAX        YMAX1          YMIN            YMIN1     X1
            X2              Y1        Y2 SN
           )
  (Defun _Extend2Border        (val)
    (cond ((or (equal val xmin 0.01) (equal val ymin 0.01))
           (setq val (- val gap))
          )
          ((or (equal val xmax 0.01) (equal val ymax 0.01))
           (setq val (+ val gap))
          )
    )
    val
  )
  (Defun _GetRectangleCorner (rec / LL UR)
    (vla-getboundingbox (vlax-ename->vla-object rec) 'll 'ur)
    (setq ll (trans (vlax-safearray->list ll) 0 1)
          ur (trans (vlax-safearray->list ur) 0 1)
    )
    (list ll ur)
  )
  (if (setq ss        (_GetRectangleCorner pl)
            gap        (* 0.5 gap)
            ii        -1
            ss        (ssget "_w"
                       (car ss)
                       (cadr ss)
                       '((0 . "*POLYLINE") (8 . "---c01"))
                )
      )
    (repeat (sslength ss)
;;; Hline format Y, XMin, XMax
;;; Vline format X, YMin, YMax
      (setq sn         (ssname ss (setq ii (1+ ii)))
            dd         (_GetRectangleCorner sn)
            ll         (car dd)
            ur         (cadr dd)
            xmin (- (car ll) gap)
            ymin (- (cadr ll) gap)
            xmax (+ (car ur) gap)
            ymax (+ (cadr ur) gap)
      )
      (entdel sn)
      (foreach tmp (list xmin xmax)
        (if (null (setq dd (cdr (assoc tmp vline))))
          (setq vline (cons (list tmp ymin ymax) vline))
          (setq        ymin1 (min ymin (car dd) (cadr dd))
                ymax1 (max ymax (car dd) (cadr dd))
                dd    (list ymin1 ymax1)
                vline (subst (cons tmp dd) (assoc tmp vline) vline)
          )
        )
      )
      (foreach tmp (list ymin ymax)
        (if (null (setq dd (cdr (assoc tmp hline))))
          (setq hline (cons (list tmp xmin xmax) hline))
          (setq        xmin1 (min xmin (car dd) (cadr dd))
                xmax1 (max xmax (car dd) (cadr dd))
                dd    (list xmin1 xmax1)
                hline (subst (cons tmp dd) (assoc tmp hline) hline)
          )
        )
      )
    )
  )
  (setq        hline (vl-sort hline '(lambda (p1 p2) (< (car p1) (car p2))))
        vline (vl-sort vline '(lambda (p1 p2) (< (car p1) (car p2))))
        xmin  (car (car vline))
        xmax  (car (last vline))
        ymin  (car (car hline))
        ymax  (car (last hline))
        hline (cdr hline)
        hline (cdr (reverse hline))
        vline (cdr vline)
        vline (cdr (reverse vline))       
  )  
  (foreach tmp vline
    (setq x1 (_Extend2Border (car tmp))
          y1 (_Extend2Border (cadr tmp))
          y2 (_Extend2Border (nth 2 tmp))
    )
    (entmake (list (cons 0 "line")
                   (cons 8 "---c03")
                   (list 10 x1 y1 0.)
                   (list 11 x1 y2 0.)
             )
    )
  )
  (foreach tmp hline
    (setq y1 (_Extend2Border (car tmp))
          x1 (_Extend2Border (cadr tmp))
          x2 (_Extend2Border (nth 2 tmp))
    )
    (entmake (list (cons 0 "line")
                   (cons 8 "---c03")
                   (list 10 x1 y1 0.)
                   (list 11 x2 y1 0.)
             )
    )
  )
)
发表于 2012-6-30 17:51 来自手机 | 显示全部楼层
参考学习。
发表于 2012-6-30 18:56 | 显示全部楼层
双变单在结构专业也很重要,可以方便PKPM建模
发表于 2012-6-30 19:51 | 显示全部楼层
看看这几天有没有帮你,要是没有人帮你,等我有空时给你写一个!近来有点忙!!!!
 楼主| 发表于 2012-7-3 15:12 | 显示全部楼层
mmmmmm 发表于 2012-6-30 12:43
单边双是比较简单的,找些单线变双墙的程序就行了。
双变单可参照如下程序
(Defun c:test () (_DrawDivLi ...

谢谢你了,但是加载后出现; 错误: 参数太多,请再实验一下
发表于 2012-7-3 22:40 | 显示全部楼层
TEST
选择对象: ; 错误: 参数类型错误: lentityp nil
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 02:44 , Processed in 0.190972 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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