明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4952|回复: 17

[基础] 如何用lisp画出这样的楼梯呢?已解决【感谢zhynt大侠相助】

  [复制链接]
发表于 2011-7-28 11:51:51 | 显示全部楼层 |阅读模式
本帖最后由 qcw911 于 2011-8-2 14:15 编辑

大家好,我们公司经常画这样的平面图
红色线就是要花的东西
黄色线为画图的范围
绿色线未标注方向
要求1:倾斜的红线各个角度为30度
       2:楼梯登有固定的距离(有可能多有可能少)

如何才能画出这个黄色区域
里面的红色线和绿色线就自动出来了呢?
用lisp编写

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-7-9 10:12:30 | 显示全部楼层
都是大神  太厉害了
发表于 2022-7-12 08:20:44 | 显示全部楼层
牛啊,这个-------
 楼主| 发表于 2011-7-28 16:34:28 | 显示全部楼层
自己顶
发表于 2011-7-29 02:37:25 | 显示全部楼层
这个题目可不是看上去这么简单啊。大家可有什么好的思路?
我是这样想的,选择围合边线(黄色的线)根据层高和给出的踏步高计算步数,中间的扇形踏步是固定的。
 楼主| 发表于 2011-7-29 06:40:05 | 显示全部楼层
回复 zhynt 的帖子

是的,但是这个仅仅是 平面图就行了,踏步个数(踏步宽一定)能算出来更好,太麻烦直接给出上踏步和下踏步数也行。
发表于 2011-7-29 14:30:03 | 显示全部楼层
初稿:
作图说明:


本帖子中包含更多资源

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

x

点评

大侠你的思路是怎么形成的呢? 真是很佩服  发表于 2011-7-29 15:42

评分

参与人数 1金钱 +50 收起 理由
qcw911 + 50 良师益友!

查看全部评分

 楼主| 发表于 2011-7-29 14:50:51 | 显示全部楼层
回复 zhynt 的帖子

太感谢了!
我马上看
 楼主| 发表于 2011-7-29 16:01:48 | 显示全部楼层
回复 zhynt 的帖子

指引的箭头能加在里面吗?
DN的那样(如图)
发表于 2011-7-29 16:35:46 | 显示全部楼层
不是说了吗,是初稿而已,先让你看看,这样行不行。
 楼主| 发表于 2011-7-29 16:51:35 | 显示全部楼层
回复 zhynt 的帖子

已经非常接近了  不愧为大师
我改了红色部分
希望圆弧的地方为方块
但是倾斜踏的好像还是按照原来的那个圆弧截止的
怎么办呢?
还有就是不想用stair这个层
随层就可以
(defun err (s)
  (if (and (/= s "console break")
    (/= s "Function cancelled")
    (/= s "quit/exit abort")
      )
    (progn (setvar "osmode" oldos)
    (setvar "cmdecho" oldcmd)
    (setq *error* olderr)
    (command "UNDO" "E")
    (princ (strcat "\n错误弹出:" s))
    )
  )
)
(defun make_line (lay pts pte)
  (entmake (list '(0 . "LINE")
   (cons 8 lay)
   (cons 10 pts)
   (cons 11 pte)
    )
  )
  (setq en (entlast))
  (setq ss (ssadd en ss))
)
(defun make_line2 (lay pt ang)
  (setq pts (polar pt (+ s_ang ang) (/ gap 2))
pte (polar pts (+ s_ang ang) dist)
  )
  (make_line lay pts pte)
  (setq en (entlast))
  (setq ss (ssadd en ss))
)
(defun make_arc (lay cen Radius angs ange)
  (entmake (list '(0 . "ARC")
   (cons 8 lay)
   (cons 10 cen)
   (cons 40 Radius)
   (cons 50 angs)
   (cons 51 ange)
    )
  )
  (setq en (entlast))
  (setq ss (ssadd en ss))
)
(defun dtor (ang) (/ (* ang PI) 180))
;;;;
;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;;;
(defun c:ltpm ()
  (command "undo" "BE")
  (setq oldos (getvar "osmode")
   oldcmd (getvar "cmdecho")
oldlay (getvar "CLAYER")
olderr *error*
*error* err
  )
  (setvar "cmdecho" 0)
  (if (= (TBLOBJNAME "LAYER" "Stair") nil)
    (command "layer" "m" "Stair" "c" "4" "" "")
  )
  (setvar "clayer" oldlay)
  (setq ss (ssadd))
  (setq pta (getpoint "\n插入点:"))
  (setq ptb (getpoint pta "\n楼梯宽度及角度:"))
  (setq Stair_width (distance pta ptb))
  (setq s_ang (angle pta ptb))
  (setq pt (polar pta
    (+ s_ang (dtor 315))
    (* 0.5 Stair_width (sqrt 2))
    )
  )
  (if (< oldos 16384)
    (setvar "osmode" (+ oldos 16384))
  )
  (setq Bench_width (getreal "\n楼梯段宽度:<880>"))
  (if (= Bench_width nil)
    (setq Bench_width 880.0)
  )
  (while (> (- Bench_width (/ Stair_width 2.0)) 0)
    (setq Bench_width (getreal "\n从新输入:"))
  )
  (setq Stepping_width (getreal "\n如踏宽度200>"))
  (if (= Stepping_width nil)
    (setq Stepping_width 200.0)
  )
  (setq Bench_UP (getint "\n上梯段数:<2>"))
  (if (= Bench_UP nil)
    (setq Bench_UP 2)
  )
  (setq Bench_DN (getint "\n下梯段数:<4>"))
  (if (= Bench_DN nil)
    (setq Bench_DN 4)
  )
  (setq Gap (- Stair_width (* Bench_width 2)))      ;(if (/= gap 0)
    (progn (setq pt1 (polar pt  s_ang (/ gap 2))
   pt2 (polar pt (+ s_ang  pi) (/ gap 2))
    )
;;;    (make_arc "Stair" pt (/ gap 2) s_ang (+ s_ang pi))
         (setq pt11 (polar pt  (+ s_ang(/ pi 4)) (*  (sqrt 2) (/ gap 2)));;;;;;;;qiuw1
   pt12 (polar pt (+ s_ang  (* 3 (/ pi 4))) (*  (sqrt 2) (/ gap 2)));;;;;;;;qiuw1
    )
      
           (make_line "Stair" pt11 pt12);qiuw1
      
    (setq pt3 (polar pt1 (+ s_ang (* 1.5 pi)) (* Bench_DN Stepping_width))
   pt4 (polar pt2 (+ s_ang (* 1.5 pi)) (* Bench_up Stepping_width))
    )
    (make_line "Stair" pt11 pt3)
    (make_line "Stair" pt12 pt4)
    (make_line "Stair" pt1 (polar pt1 s_ang Bench_width))
    (make_line "Stair" pt2 (polar pt2 (+ s_ang pi) Bench_width))
    (setq n 0)
    (repeat Bench_DN
      (setq pt5 (polar pt3 (+ s_ang (* 0.5 pi)) (* n Stepping_width))
     pt6 (polar pt5 s_ang Bench_width)
      )
      (make_line "Stair" pt5 pt6)
      (setq n (1+ n))
    )
    (setq n 0)
    (repeat Bench_up
      (setq pt5 (polar pt4 (+ s_ang (* 0.5 pi)) (* n Stepping_width))
     pt6 (polar pt5 (+ s_ang pi) Bench_width)
      )
      (make_line "Stair" pt5 pt6)
      (setq n (1+ n))
    )
    (setq dist (- (/ (+ Bench_width (/ gap 2)) (cos (dtor 30))) (/ gap 2)))
          (make_line2 "Stair" pt (dtor 30))
    (make_line2 "Stair" pt (dtor 60))
    (make_line2 "Stair" pt (dtor 120))
    (make_line2 "Stair" pt (dtor 150))
    (setq pt5 (polar pt (+ s_ang (dtor 90)) (/ gap 2))
   pt6 (polar pt5 (+ s_ang (dtor 90)) Bench_width)
    )
    (make_line "Stair" pt5 pt6)
;;;           (command "_.group" "" "*" "" ss "")
    )
  ;)
  (setvar "osmode" oldos)
  (setvar "cmdecho" oldcmd)
  (command "UNDO" "E")
  (princ)
)
发表于 2011-7-29 16:56:43 | 显示全部楼层
晚上再改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 09:33 , Processed in 0.213469 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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