找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 784|回复: 1

[LISP程序]:大家试试这个基于tch3.5核心函数的平面门窗生成立面门窗。

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2002-5-10 11:15:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
;;门窗生成
(defun dxf (n e) (cdr (assoc n e)))
(defun up (p) (trans p 0 1))
(defun upw (p) (trans p 1 0))
(defun perp (a b pt)
  (inters pt (polar pt (+ (angle a b) (/ pi 2)) 300) a b nil)
)
(defun c:mcsc        (/
                 vl
                 i
                 ve
                 pti
                 sca
                 sca1
                 sca2
                 an
                 pt1
                 pt2
                 pt3
                 ps
                 p1
                 p2
                 _layh
                 _wh
                 _wh0
                 _dh
                 _bch
                 stph
                 _bch1
                )
  (prompt "\n选择要生成立面的平面门窗<退出>:")
  (if (setq
        vl (ssget (list (cons 0 "INSERT") (cons 8 (parea "门窗,柱子")))
           )
      )
    (progn
      (setq i 0)
      (command "undo" "group")
      (_@ld "3es")
      (mapcar 'set '(_layh _wh _wh0 _dh _bch stph _bch1) (3es))
      (pouts "立面门窗")
      (setvar "osmode" 673)
      (setq pt1 (getpoint "\n第一点:"))
      (setq pt2 (getpoint pt1 "\n第二点:"))
      (setvar "osmode" 0)
      (setq p1 (upw pt1)
            p2 (upw pt2)
      )
      (command "ucs" "z" (angtos (angle pt1 pt2) 0 8))
      (setq p1 (up p1)
            p2 (up p2)
      )
      (while (< i (sslength vl))
        (setq ve (entget (ssname vl i)))
        (setq pti  (dxf 10 ve)
              sca1 (abs (dxf 41 ve))
              sca2 (abs (dxf 42 ve))
              an   (dxf 50 ve)
        )
        (setq pt3 (up (polar pti an 500))
              pti (up pti)
              an  (angle pti pt3)
        )
        (cond
          ((and(> (abs (cos an)) 1e-10)(/= (disf sca1) (disf sca2))(/= (substr (dxf 2 ve) 3) "ZH"))
           (command
             "insert"
             "_WELE"
             (polar (perp p1 p2 pti) (+ (* 0.5 pi) (angle p1 p2)) _wh0)
             (abs (* sca1 (cos an)))
             _wh
             "0"
           )
          )
          ((and        (> (abs (cos an)) 1e-10)(= (disf sca1) (disf sca2))(/= (substr (dxf 2 ve) 3) "ZH"))
           (command "insert"
                    "_DELE"
                    (perp p1 p2 pti)
                    (abs (* sca1 (cos an)))
                    _dh
                    "0"
           )
          )
          ((or (= (dxf 2 ve) "_FZH") (= (dxf 2 ve) "_YZH"))
           (if (> (abs (cos an)) 1e-10)
             (setq sca sca1)
             (setq sca sca2)
           )
           (pouts "柱子")
           (command "insert"
                    "_CELE"
                    (perp p1 p2 pti)
                    sca
                    _layh
                    "0"
           )
           (command "explode" "last")(mkstr2)
          )
          (t (princ "\n此门窗、柱子无法生成.") (princ))
        )
        (setq i (+ 1 i))
      )
      (command "ucs" "p")
      (command "undo" "end")
    )
  )
  (mkstr2)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-9-5 02:02:19 | 显示全部楼层
——————————————————
晓东CAD空间,天正论坛快速查阅:

话题分类:
『C类』:天正开发技术与技巧
——————————————————
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 04:25 , Processed in 0.271422 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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