俊超's profile金地三维钢结构详图设计工作室PhotosBlogLists Tools Help

Blog


    April 03

    两直线倒内直角

    [原创][LISP]两垂直线倒内直角 ;======================== ;两垂直线倒内直角 ;2004.6.5 ljc ;======================== (defun c:dj( / l ll p1) (setq cm(getvar "cmdecho") os(getvar "osmode")) (setvar "cmdecho" 0) (setq l(car (nentsel "请选择直线1")) h1(getdist "线1切割值:") ll(car (nentsel "请选择直线2")) h2(getdist "线2切割值:") ) (setq p1 (inters (cdr (assoc 10 (entget l))) (cdr (assoc 11 (entget l))) (cdr (assoc 10 (entget ll))) (cdr (assoc 11 (entget ll))) nil)) (command "_chamfer" "d" h1 h2) (command) (command "_chamfer" l ll) (setq line(entlast)) (setvar "osmode" 0) (command "rectang" (cdr (assoc 10 (entget line))) (cdr (assoc 11 (entget line))) ) (command "trim" line "" p1 "") (setvar "osmode" os) (command "erase" line "") (command "explode" (entlast) ) (setvar "cmdecho" cm) (print) )
    March 14

    材料表输入

    发贴心情 不再为材料表输入发愁!!!!!
        也许你经常为材料表的输入发愁,因为大多都是通过编辑文本来修改复制到材料表里的文本,这样容易出错,或者通过EXCEL转入,多了很多手续!!现在给大家一个小程序希望能减轻材料表的输入!!

    具体操作--加载BL.LSP后输入BL

    ;=================================================
    ;本程序是写入数据的程序。

    ;"+"重复上一格的文本

    ;需要空行时回车即可,空一行回一次车.依次类推...
    ;编程  ljc  2003.5.27
    ;=================================================
    (defun c:bl()
       (setq p1 (getpoint "请选择行左上角点:"))
       (setq p2 (getpoint "请选择行右下角点:"))
       (setq osmode(getvar "osmode"))
       (setq  tc(getvar  "clayer" ))

       (setq p1y (cadr p1))
       (setq p1x (car p1))
       (setq p2y (cadr p2))
       (setq bg(- p1y p2y))
       (setq zg (* (- p1y p2y) 0.6))
       (setq p3y(/ ( + p1y p2y) 2))
       (setq p3x(+ (car p1) (/ zg 2)))
       (setq p3(list p3x p3y))

           (setq p1y (- p1y bg))
           (setq p1 (list p1x p1y 0.0))
           (setq p2y (- p2y bg))
           (setq p22x (+  p1x  (* bg 22)))
           (setq p22(list p22x p2y))
          (COMMAND "ZOOM" "W" P1 P22)
      
       (setq shuzhi(getstring "请输入字符:"))
       (while shuzhi
         (if (/= shuzhi "+")
              (progn
                 (setq shuzhip shuzhi)
                (command "layer"  "s" "text" \n)   (SETVAR "OSMODE" 0)
                (command "text" "j" "ml" p3 zg 0 shuzhi "")
                (SETVAR "OSMODE" osmode)
                (setvar "clayer" tc)
                (setq p1y (- p1y bg))
                (setq p1 (list p1x p1y 0.0))
                (setq p2y (- p2y bg))
                (setq p22x (+  p1x  (* bg 22)))
                (setq p22(list p22x p2y))
                (COMMAND "ZOOM" "W" P1 P22)

                (setq p3y(- p3y bg))
                (setq p3(list p3x p3y))
                (setq shuzhi(getstring "请输入字符:"))
               )
            (progn
                (command "layer"  "s" "text" \n)   (SETVAR "OSMODE" 0)
                (command "text" "j" "ml" p3 zg 0 shuzhip "")
                (SETVAR "OSMODE" osmode)
                (setvar "clayer" tc)
                (setq p1y (- p1y bg))
                (setq p1 (list p1x p1y 0.0))
                (setq p2y (- p2y bg))
                (setq p22x (+  p1x  (* bg 22)))
                (setq p22(list p22x p2y))
                (COMMAND "ZOOM" "W" P1 P22)
           
                (setq p3y(- p3y bg))
                (setq p3(list p3x p3y))
                (setq shuzhi(getstring "请输入字符:"))

             )
         
          )
        )
     
    )


    March 11

    把spline变成铁路线示图

    ;把spline变成铁路线示图
    ;ljc 2004.3
    (DEFUN O1O( name cd / cm tc os q zd qd ang qdz zdy w1 w2 w3 w4 p1p2 p3 p4 ) ;name--spline的图元名 cd铁路线的宽度
              (setq cm(getvar "cmdecho") tc(getvar "clayer") os(getvar "osmode"))
              (command "osnap" "off")
              (setq cd(/ cd 2))
              (setq q(entget name))
              (setq Zd (cdr(assoc 10 q)))
              (setq qd (cdr(LAST q)))
              (SETQ ANG (ANGLE QD ZD))
              (SETQ  qdz (polar qd (+ ANG ( / PI 2)) cd))
              (setq  qdy (polar qd (- ANG ( / PI 2)) cd))
              (command "offset"  cd name qdz  "")
              (setq w1(entlast))
              (setq p1 (cdr(assoc 10 (entget w1))))
              (setq p2 (cdr(last (entget w1))))
              (command "offset"  cd name qdy  "")
              (setq w2(entlast))        
              (setq p4 (cdr(assoc 10 (entget w2))))
              (setq p3 (cdr(last (entget w2))))
              (command "line" p1 p4 "")    (setq w3(entlast))    
              (command "line" p2 p3 "")    (setq w4(entlast))
              (command "-bhatch" "p" "solid" "s" w1 w2 w3 w4 "" "")
              (command "erase" w1 w2 w3 w4 name "")
              (setvar "cmdecho" cm)
              (setvar "osmode" os)
              (setvar "clayer"  tc)
    )
    (defun c:tl( / line n0 j linex q qd zd cdd ang qdz dqy)
       (setq cm(getvar "cmdecho") tc(getvar "clayer") os(getvar "osmode"))
       (command "osnap" "off")
       (print "请选择铁路线:") (print)
       (setq line (ssget '((0 . "SPLINE"))))
       (setq ds(getint "请输黑白段长度:"))
       (setq cd(getreal "请输入绘制铁路线的宽度:"))
       (command "ucs" "" "")
       (command "erase" (ssget "x" '((0 . "point"))) "")
       (setq n0 (sslength line))
       (setq j 0  n2 0)
      (repeat n0
       (setq linex (ssname line j)) 
       (setq cdd(/ cd 2))
       (setq q(entget linex))
       (setq Zd (cdr(assoc 10 q)))
       (setq qd (cdr(LAST q)))
       (SETQ ANG (ANGLE QD ZD))
       (SETQ  qdz (polar qd (+ ANG ( / PI 2)) (* 10 cd)))
       (setq  qdy (polar qd (- ANG ( / PI 2)) (* 10 cd)))
       (command "offset"  cdd linex qdz linex qdy "")
       (command "measure" linex ds "")
       (command)
       (setq point (ssget "x" '((0 . "point"))))
       (setq n (sslength point))
       (setq i 0 ii 0)
       (repeat n
       (setq p1 (cdr(assoc 10 (entget(ssname point i)))))
       (command "erase" (ssname point i) "")
       (command "zoom" "w" (polar p1 (* pi 0.75) ds )  (polar p1 (* pi -0.25) ds ) )
       (command "break"  (list (car p1) (cadr p1)  (caddr p1))  "@" )
       (if (= 2 ii) (setq ii 0))
       (if (= 0 ii) (o1o (entlast) cd) (command "erase" (entlast) ""))
       (setq ii (1+ ii)) 
       (setq i (+ i 1))
       )
       (setq j (+ j 1))
       (if (= 2 ii) (o1o linex cd) (command "erase" linex ""))
      )
       (command "zoom" "e" "")
    (setvar "cmdecho" cm)
              (setvar "osmode" os)
              (setvar "clayer"  tc)
    )
    (print "敲入tL运行程序---LJC") (PRINT)
    February 25

    cad马蹄接管放样源代码

     ;========================================================

    ;

    ;  本程序适用于直斜锥台式连接钢板的实体放样.

    ;  2000.6.8         LJC

    ;  2000.5.30   2000.6.10

    ;

    ;========================================================

    (defun c:mt()

      (setq d(getreal "请输入大管直径 d=:"))

      (setq d1(getreal "请输入小管直径 d1=:"))

      (setq h(getreal "请输入直斜锥台高h=:"))

      (setq b1(getpoint "\n请选取放样中心:  "))

      (command "ucsicon" "on" )

      (command "ucsicon" "or" ) 

      (setq ang3 0)

      (command "ucs" "o" b1)

      (setq h0 (/ (* d h) (- d d1))    )

      (setq i(* pi d1))

      (setq i(fix i)) 

      (setq ang(/ (/ pi 2) i))

      (setq ang0 0)

      (setq j 0)

      (setq l(sqrt (+(expt d 2)(expt h0 2))))

      (setq pt1(list l 0 0))

      (command "pline" pt1)

     

     (repeat i 

      (setq J(+ j 1))

      (setq ang1(+ ang0 (* ang j)))

      (setq ang2(+ ang1 ang))

      (setq m(* d (cos ang1)))

      (setq n(* d (cos ang2)))

      (setq z1(+ (expt m 2) (expt n 2)))

      (setq z2 (cos ang ))

      (setq z(sqrt (- z1 (* 2(*  m ( * n z2))))))

      (setq X(SQRT (+ (expt m 2) (expt h0 2))))

      (setq y(SQRT (+ (expt n 2) (expt h0 2))))

      (setq z3(+ (expt x 2) (expt y 2)))

      (setq cos0 ( /(- z3 (expt z 2)) (* 2 (* x y ))))

      (setq tg0 (SQRT (- (expt (/ 1 cos0) 2) 1)))

      (setq ang0 (atan tg0))

      (setq ang3(+ ang3 ang0))

      (setq a(* x (cos ang3)))

      (setq b(* x (sin ang3)))

      (setq pt(list a b ))

      (command pt)

      (princ"正在生成,请稍等!! ")

     )

      (setq ptt pt)

      (command "")

    :=========================================================

     

      (setq ang0 0)

      (setq j 0)

      (setq d d1)

      (setq ang3 0)

      (setq h0(- h0 h))

      (setq l(sqrt (+(expt d 2)(expt h0 2))))

      (setq pt2(list l 0 0))

      (command "pline" pt2)

      (setq i(*  pi d1))

      (setq i(fix i))

      (setq ang(/ (/ pi 2) i))

      (repeat   i

      (setq J(+ j 1))

      (setq ang1(+ ang0 (* ang j)))

      (setq ang2(+ ang1 ang))

      (setq m(* d (cos ang1)))

      (setq n(* d (cos ang2)))

      (setq z1(+ (expt m 2) (expt n 2)))

      (setq z2 (cos ang ))

      (setq z(sqrt (- z1 (* 2(*  m ( * n z2))))))

      (setq X(SQRT (+ (expt m 2) (expt h0 2))))

      (setq y(SQRT (+ (expt n 2) (expt h0 2))))

      (setq z3(+ (expt x 2) (expt y 2)))

      (setq cos0 ( /(- z3 (expt z 2)) (* 2 (* x y ))))

      (setq tg0 (SQRT (- (expt (/ 1 cos0) 2) 1)))

      (setq ang0 (atan tg0))

      (setq ang3(+ ang3 ang0))

      (setq a(* x (cos ang3)))

      (setq b(* x (sin ang3)))

      (setq pt(list a b ))

      (command pt)

      (princ"正在生成,请稍等!! ")

     )

      (command "")

      (setq ptt2 pt)

      (command "line" ptt ptt2 "")

     

    ;==========================================================

       (setq dimtext0(getvar "dimtxt"))

       (setq dimtsz0 (getvar "dimtsz"))

       (setvar "dimtxt" (/ h0 8))

       (setvar "dimtsz" (/ h0 20))

    ;--------------------------------------

      (setq qx(nth 0 ptt))

      (setq qx1(+ 2 qx))

      (setq qy(nth 1 ptt))

      (setq dimqy(+ h  qy))

      (setq dimqy1(* -1 dimqy))

      (setq dimptt(list qx1 dimqy))

      (setq dimptt1(list qx1 dimqy1))

      (setq ptk1(list -1 -1))

      (COMMAND "ZOOM" DIMPTT PTK1)

      (setq s(ssget "c" dimptt ptk1))

      (command "mirror" s "" pt1 pt2 "" )

    ;--------------------------------------

    (command "dimlinear" ptt2 pt1 dimptt )

    ;--------------------------------------------------

    (setq qx2(nth 0 ptt2))

    (setq qy2(nth 1 ptt2))

    (setq qy3(* -1 qy2))

    (setq dimqx2(-  qx2 (/ h 3)))

    (setq dimptt4(list qx2 qy3))

    (setq dimptt3(list dimqx2 qy2))

    (command "dimlinear" ptt2 dimptt4 dimptt3 )

    ;----------------------------------------------

    (setq qy1(* -1 qy))

    (setq miptt(list qx qy1))

    (setq qx1(nth 0 pt1))

    (setq qy1(nth 1 pt1))

    (setq dimqx1(+ (/ h 3) qx1))

    (setq dimpt1(list dimqx1 qy1))

    (command "dimlinear" ptt miptt dimpt1 )

    (setq dimqx5(* 1.2 dimqx1))

    (setq dimptt2(list dimqx5 qy1))

    (setq b1 (list 0 0))

    (Command "dimangular" ""  b1 ptt miptt dimptt2 )

    (Command "dimaligned" ptt2 ptt dimptt)

    (command "ucsicon" "off" )

    ;--------------------------------------------------

    (setvar "dimtxt" dimtext0)

    (setvar "dimtsz" dimtsz0)

    (COMMAND "ZOOM" "E")

    钢结构cad零件序号的标注程序源代码

     ;序号标注

    ;ljc 2004.3.22

    (defun c:xh(/  cm tc os zg pt1 ss pt2 pa pt3 xx xxx)

     (setq cm(getvar "cmdecho") tc(getvar "clayer") os(getvar "osmode"))

     (setq Dscale( getvar "dimscale"))

     (setq zg (* 4.5 dscale)  r1 (* 3.5 dscale) )

     (setvar "cmdecho" 0)

     (setvar "osmode" 0)

     (setq pt1(getpoint "\n 请输入起点:"))

    (while (/= nil pt1)

     (progn

     (setq ss (ssadd))

     (command "-layer" "m" "dim" "c" "7" "" "")

     (command "circle" pt1 r1 )

     (setq ss (ssadd (entlast) ss))

     (command "move" (entlast) "" pt1  pause )

     (setq pt2 (cdr (assoc  10 (entget(entlast)) )) )

     (setq pa(angle pt2 pt1))

     (setq pt3 (polar pt2 pa r1))

     (command "line" pt1 pt3 "")

     (setq ss (ssadd (entlast) ss))

     (command "-layer" "m" "text" "c" "3" "" "")

     (setq xx(getstring "\n请输入零件号:"))

     (if (= "" xx) (setq xx xxx))

     (command "text" "j" "m" pt2  zg 0 xx)

     (setq ss (ssadd (entlast) ss))

     (command "-group" "c" "*" "" ss "")

     (setq xxx xx)

     (setq pt1(getpoint "\n 请输入起点:"))

     )

    )

     (setvar "cmdecho" cm)

     (setvar "osmode" os)

     (setvar "clayer"  tc)

      (print)

    )

    扭曲面实体生成程序

    扭曲面实体生成程序

    ljcgq深化空间   2005.12

     

    摘要本文以cad中实现扭曲面到扭曲实体的转化的一个思路,编写了扭曲面实体生成程序,为扭曲面结构在cad 中放样提供了重要的途径。

     

    关键词AUTOLISP;扭曲面;扭曲实体;放样。

     

    前言

    伴随着人们对建筑造型艺术要求的提高,加之钢结构具有良好韧性的特点,越来越多的弧线扭曲造型在钢结构建筑中得到了广泛应用,然而作为被大家广泛使用的cad 软件目前却不能把扭曲的面直接生成实体,给扭曲结构实体在cad 中放样带来了很大的困难,下面的程序就是针对这个问题而编写的。

    程序特点:

       本程序是应用简单易懂的lisp语言编写,加载运行方便实用,具有很强的可操作性;另外由于它在cad 中的生成过程是即时生成具有动画的效果具有很强的观赏性。

    一、   曲面生成实体的几何模型。

    1、需要转换的曲面

    2、把曲面分解为细小的单元并作成实体

    3、对所有的实体作并集得到曲面实体。

    4、对实体可以做切割等三维实体编辑命令。

    一、    程序流程图

    作好需要转换的曲面


     

    炸开曲面一次


     

    作曲面的近似垂线


     

    加载程序


     

    输入“st"

     

     

    回车


     

    输入板厚


     

    选择垂线


     

    选择曲面


     

    生成单个小单元实体

     


     

    小单元并集成整体

     

    三、cad中3d曲面变3d实体的编程思路

    1.把3d曲面的网面炸成单个的空间四边形面

    2.把单个四边形面的四个点读出,并形成两个三角形的面域

    3沿同一方向拉伸三角形成实体(拉伸长度可根据你需要的函数控制),

    4重复1~3步,直到全部结束

    5,做并集

    6:其中网格的细蜜程度决定曲面的精确程度,也决定了运算需要的时间了.

    四、程序源代码

    ;*************************************************

    ;曲面按照指定方向生成的曲面等厚实体
    ;沪  ljcgq  2005.6

    ;**************************************************
    (defun c:st()
    (command "ucs" "w")
      (setq cm(getvar "cmdecho") os(getvar "osmode")  ) (setvar "cmdecho" 0)
      (setq bh(getint "请输入板厚:"))
      (setq xf (car (entsel "请选择法线:")))
      (if (= xf nil) (setq xf (car (entsel "请选择法线:")))  )
      (princ "请选择曲面:")
      (setq ss (ssget '((0 . "3DFACE") )) )
      (setq n (sslength ss))
      (setq a 0)
    (repeat n
        (setq qm (ssname ss a))
        (setq qm(entget qm))
        (setq p10(cdr(assoc 10 qm)))
        (setq p11(cdr(assoc 11 qm)))
        (setq p12(cdr(assoc 12 qm)))
        (setq p13(cdr(assoc 13 qm)))
        (setvar "osmode" 0)
        (command "3dpoly" p10 p11 p12 "c" )
        (setvar "osmode" os)
        (setq m1(entlast))
        (command "region" m1 "")
        (setq m1(entlast))
        (jj p10 p11 p12 xf)
        (setq cd (/ bh sinjj))
        (command "LENGTHEN"  "t" cd xf "")
        (command "extrude" m1 "" "p" xf "")
        (setq t1(entlast))
        (setvar "osmode" 0)
        (command "3dpoly" p12 p13 p10 "c" )
        (setvar "osmode" os)
        (setq m2(entlast))
        (command "region" m2 "")
        (setq m2(entlast))
        (jj p10 p11 p12 xf)
        (setq cd (/ bh sinjj))
        (command "LENGTHEN" "t" cd xf "" )
        (command "extrude" m2 "" "p" xf "")
        (setq t2(entlast))
        (command "union" t1 t2 "" )
       (setq a (+ a 1))
      )
     (setvar "cmdecho" cm)
     (command "_union" "all" "")
     (command "_shademode" "g")

     

    )
    ;**************************************************

    "jj"子程序就是第3条中的拉伸函数,即把拟定法线的长度改变以保证在每个小的三角面的垂直方向等于板厚.

    ;*************ljc.2005.7***************************

    (DEFUN  jj( p0 p1 p2 fx / p3 p4 a b c x x0 x1 x2 x3 x4  y y0 y1 y2 y3 y4 z z0 z1 z2 z3 z4 yy rr   )
              (setq p3(cdr(assoc 10 (entget fx)))  p4(cdr(assoc 11 (entget fx))) )
              (setq x0(car p0) y0(cadr p0) z0(last p0))
              (setq x1(car p1) y1(cadr p1) z1(last p1))
              (setq x2(car p2) y2(cadr p2) z2(last p2))
              (setq x3(car p3) y3(cadr p3) z3(last p3))
              (setq x4(car p4) y4(cadr p4) z4(last p4))

              (setq a(- (* (- y1 y0) (- z2 z0)) (* (- y2 y0) (- z1 z0))))
              (setq b(- (* (- z1 z0) (- x2 x0)) (* (- z2 z0) (- x1 x0))))
              (setq c(- (* (- x1 x0) (- y2 y0)) (* (- x2 x0) (- y1 y0))))
             
              (setq x(- x4 x3) y(- y4 y3) z(- z4 z3))
              (setq yy(abs(+  (* a x) (* b y) (* c z) )))
              (setq rr(* (expt (+ (expt a 2) (expt b 2) (expt c 2) ) 0.5) (expt (+ (expt x 2) (expt y 2) (expt z 2) ) 0.5)))
              (setq sinjj(/ yy rr)

    )

    五、程序操作

    1.打开cad程序在下拉菜单工具〉加载应用程序,操作如下图。

    2.弹出下图对话框,选择“曲法等厚实体.lsp”点击加载。

    3.在命令行输入”st”回车,输入厚度,选择法线,曲面

    4.运行后的结果

    六、附录

    *************************************************************************

    ;箱形同截面垂直法线方向实体生成

    ;ljcgq 05.6

    *************************************************************************

    (defun c:jm( / cm os q qd zd fd zx p1 p2 p3 p4 p5 p6 p7 p8 m1 m2 m3 m4 h b t1 t2 xx md)

      (setq cm(getvar "cmdecho") os(getvar "osmode")  tc(getvar  "clayer" ))

      (command "ucs" "" "")

     (princ "请选择轴线:")(princ)

      (setq q(entget(setq zx(ssname(ssget)0))))

      (setq qd(cdr(assoc 10 q)))

      (setq zd(cdr(assoc 11 q)))

      (setq fd(getpoint"请选择法线顶点:"))

      (setq xx(getstring"是否翻转盖板,否--直接回车,是--输入1"))(princ)

      (setvar "cmdecho" 0)

      (setvar "osmode" 0)

      (command "ucs" "3" qd zd fd )

      (command "ucs" "y" "90")(setvar "osmode" os)

      (if  (= xx "1")

                (progn (command "ucs" "z" "90")

                        (setq b(getint "高度b:")   h(getint "宽度h:")  t1(getint "腹厚t1:")  t2(getint "翼厚t2")

                              gg(strcat (itoa b) "*" (itoa h) "*" (itoa t1) "*"(itoa t2) )

                        )

                       (setq md(list (/ (+ (car  qd) (car zd))  2)

                                     (/ (+ (cadr qd) (cadr zd)) 2)

                                     (/ (+ (last qd) (last zd)) 2) 

                               )

                )

     

                )

              

               (setq h(getint "高度H:")   b(getint "宽度B:")  t2(getint "腹厚t2:")  t1(getint "翼厚t1")

                     gg(strcat (itoa h) "*" (itoa b) "*" (itoa t2) "*"(itoa t1) )

          

               ) 

      )

      (setq  p1 (list (* -1 (/ b 2)) (/ h 2))

             p2 (list (/ b 2) (- (/ h 2) t1))

             p3 (list (* -1 (/ b 2)) (- t1 (/ h 2) ))

             p4 (list (/ b 2) (* -1 (/ h 2)))

             p5 (list (* -1 (/ b 2)) (- (/ h 2) t1))

             p6 (list (- t2 (/ b 2)) (- t1 (/ h 2) ))

             p7 (list (- (/ b 2) t2) (- (/ h 2) t1))

             p8 (list  (/ b 2) (- t1 (/ h 2) ))

       )

      (setvar "osmode" 0)

      (command "rectang" p1 p2)(setq m1(entlast))

      (command "rectang" p3 p4)(setq m2(entlast))

      (command "rectang" p5 p6)(setq m3(entlast))

      (command "rectang" p7 p8)(setq m4(entlast))

      (command "extrude" m1 m2 m3 m4 "" "p" zx "")

    (setvar "cmdecho" cm)

     (setvar "osmode" os)

     (command "ucs" "" "")

     (command "layer"  "s" "txt" \n)

     (if (= xx "1")

             (progn

                   (command "ucs" "o" md)

                   (command "ucs" "x" 90)

                   (command "text" "j" "bc" (list 0 0 0)  200 0 gg)

             )

            

             (progn

                  (command "ucs" "o" fd)

                  (command "ucs" "x" 90)

                  (command "text" "j" "bc" (list 0 0 0)  200 0 gg)

             )

     )

    (command "ucs" "" "")

    (setvar "clayer" tc)

    )

    (princ "****** 谢谢使用!--ljcgq--2005.6-- ******")(princ)

    七、结束语

    本程序只是针对曲面转换为实体的思路用程序作了较为简单的阐述,对于扭曲面的实体生成有一定的帮助。对于扭曲面的展开程序还有待于再作开发。

                              

     ljcgq深化 2005.12.

     

    February 23

    旋转楼梯放样程序

    AUTOLISP编程在深化设计中的应用

                         ————旋转楼梯放样程序

    ljcgq深化空间   

    摘要本文以工程中旋转楼梯的放样程序的运用为例,阐述了AUTOLISP程序的编写,加载,运行,到结果记录的整个过程,并附带了其他程序源代码。

    关键词AUTOLISP; 旋转楼梯;重复;程序;放样。

     

    前言:伴随着AUTOLISP语言的日臻成熟和完善,许多自行研发的程序已经广泛的应用于施工设计的各个过程中。尤其是近年来钢结构建筑的广泛普及和使用,使得钢结构深化设计正在向一条优化、简洁、高效的方向发展。

    在实际的工作中,对于多维结构(如:旋转楼梯、空间桁架等)的深化设计放样往往是耗时耗力,而且还很容易出现错误,这也就间接的导致了施工的质量和效率不是很高,同时也给制作和安装带来了许多麻烦!为此根据实际工作需要运用LISP语言编写了旋转楼梯的放样程序,并希望以能给钢结构深化工程技术人员的深化工作有所启发和帮助。

    程序的特点:

         本程序使用于柱体旋转楼梯、锥体旋转楼梯及倒锥体旋转楼梯的实体放样,仅需要在深化设计时输入若干个基本参数,即可快速生成AUTOCAD环境下的旋转楼梯的三维模型,形象而且直观。并且对于在深化设计中出现的重复性工作,我们也可以运用LISP语言来实现命令的集成,一次完成多个连续的命令,这样既节省了时间又保证了结果具备较高的精度。

     

    一、   旋转楼梯的数学模型。 

    二、   程序流程图

     

    选择图形位置

           

    输入参数

    生成梯内梁


    生成梯外梁


    生成踏步分格


    生成锥体表面


    弹出文本框输出放样结果


    纪录结果


    退出对话框

    三、   程序源代码

    ;====================================================

    ;  本程序适用于柱体旋转楼梯、锥体旋转楼梯及倒锥体旋转楼梯的实体放样.

    ;  2000.6.1         LJC

    ;  2000.5.30   2000.6.1  LJC

    ;  2004.5.18      LJC

    ;====================================================

    (defun C:xlt(/)

      (command "_vpoint" "_non" "*-1,-1,1")

      (setq b1(getpoint "\n旋转楼梯下端圆心b1:  "))

      (setq ang0(getreal "旋转楼梯总转角ang0"))

      (setq a(getreal "旋转楼梯下端圆半径R="))

      (setq b(getreal "旋转楼梯上端圆半径R="))

      (setq h(getreal"旋转楼梯上、下端高差H=:"))

      (setq tg(getreal"旋转楼梯台阶高tg=:"))

      (setq tk(getreal"旋转楼梯宽度TK=:"))

      (setq n1(/ h tg))

      (setq n2(fix n1))

      (SETQ TG1(/ H N2))

      (setq m 0.000)

      (setq mm 0.000)

      (setq n(fix h))

      (setq delt (/ (*(/ ang0 180) pi) n ))

      (setq j( / h n))

      (setq ang 0)

      (setq jj 0)

      (command "ucsicon" "or" )

      (command "ucs" "o" b1)

      (command "3dpoly" (list a 0 0))

      (setq pt1(list a 0 0))

      (setq pt11 pt1)

      (repeat n

            (setq jj(+ jj 1))

            (setq j1(+ 0 (* j jj)))

            (setq ang (+ delt ang))

            (setq r(- a (/ (* j1 (- a b))h)))

            (setq pt2(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))

            (setq m1(distance pt1 pt2 ))

            (setq pt1 pt2)

            (setq m(+ m m1))

            (princ"正在生成梯内梁,请稍等!! ")

            (command pt2)   

      )

      (setq pa(angle pt11 pt2))

      (command "")

      (setq r(+ tk r))

      (setq pt1(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))

      (command "3dpoly" pt1)

      (repeat n

            (setq jj(- jj 1))

            (setq j1(- 0 (* j jj)))

            (setq ang (- ang delt))

            (setq r(+ a (/ (* j1 (- a b))h)))

            (setq r(+ tk r))

            (setq pt2(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))

            (setq mm1(distance pt1 pt2 ))

            (setq pt1 pt2)

            (setq mm(+ mm mm1))

            (princ"正在生成梯外梁,请稍等!! ")

            (command pt2)

      )

      (command "")

      (repeat n2

            (setq jj(+ jj tg1))

            (setq j1(+ 0 (* j jj)))

            (setq ang (+ ang  (* delt tg1)))

            (setq r(- a (/ (* j1 (- a b))h)))

            (setq pt2(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))

            (setq r(+ r tk))

            (setq pt3(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))

            (command "3dpoly" pt2 pt3 "")

            (princ"正在生成梯踏板,请稍等!! ")

      )

      (SETVAR "SURFTAB1" 60)

      (command "zoom" "e")

      (command "circle" "0,0,0"  a )

      (setq ljc(entlast))

      (command "circle" (list 0 0 h)   b )

      (setq gq(entlast))

      (command "_rulesurf" ljc gq)

      (command "_shademode" "g")

      (SETQ LJ 0.0000)

      (setq wj 0.0000)

      (SETQ LJ (/ m n2))

      (setq wj(/ mm n2))

      (SETQ N3 (- N2 1))

      (textscr)

      (princ"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n------ljcgq------谢谢惠顾!!------ljcgq------")

      (princ"\n\n梯内梁长度为: ") 

      (PRINT M)

      (PRINT )

      (princ"\n梯内梁梯踏板间距为: ")

      (PRINT lj)

      (PRINT )

      (princ"\n梯外梁长度为: ")

      (PRINT MM)

      (PRINT )

      (princ"\n梯外梁梯踏板间距为: ")

      (PRINT wj)

      (PRINT )

      (princ"\n梯踏板总数为: ")

      (PRINT N3)

      (PRINT )

      (princ"\n注:本设计数据均为旋转梯梯梁内净尺寸。")

      (princ"\n\n\n------ljcgq------谢谢惠顾!!------ljcgq------ ")

      (PRINT )

      (princ"\n******  读取设计数据后,请按F2键退出文本框!!  ******" )

      (PRINT )

      (textscr)

    )

    (princ "\n***          ***

              *** The program was writen by ljc 2000.6.1 ***

              ****  旋转楼梯放样程序已成功加载!!  谢谢惠顾!! ——ljcgq 2004.5.1  *** "

      )

    (princ)

     四、  参数含义 

    五、  程序使用

      1.打开cad程序在下拉菜单工具〉加载应用程序,操作如下图。

    2.弹出下图对话框,选择“旋转楼梯.lsp”点击加载。

     3.在命令行输入“xlt“回车,在屏幕上选择底端圆心点,输入相应参数,等待。

    4.运行结束界面如下

    5.记录数据后,按f2键退出文本窗口后,会看到旋转楼梯的模拟立体图形如下。

    六结束语

    在详图设计工作中我们经常会遇到一些重复性的绘制工作,或者人为不好操作的事件,这个时候我们可以借用autolisp来实现命令的集成,一次完成多个连续的命令,这样既节省了时间而且还有较高的精确度。

                             

     

     ljcgq

                          深化空间

    2005.4.13

    February 21

    哪怕希望是一根树枝

      一个人被湍急的河水冲走后,象一片树叶一样顺水而下.
      这时候,他多么想抓住一样东西,哪怕是一根稻草,然而四面都是水,他什么也抓不住,心想这一下没命了,死就死吧.这个念头一出,身上立刻没劲了.整个身子满满的下沉.
      正在这个时候他突然想起来,去年夏天来这里玩时,离这不远的下游河岸有一棵老树,是斜长到水中的,其中有一根粗树枝正好贴在水面......一想到这里,他心里顿时有了希望.力气也出来了,就拼命挣扎坚持,终于漂到了那棵老树前,当他满怀希望的拽住树枝的时候,谁知那早已是一根枯枝,幸好来救他的人也赶来了,他终于被救上了河岸.
      事后他说,如果知道那是一节枯树枝,他根本坚持不到那儿.
      身处逆境,一定不要放弃希望,哪怕它是一根枯树枝
    February 16

    乌龟的理想

      一群乌龟坐在一起谈论理想的话题。
      一只乌龟说:我长大以后,一定要成为敏捷的兔子,永远蜕去这沉重的贝壳!!
      另一只乌龟说:不,我要做一只大象,建立一个只有我说了算的王国。
      又一只乌龟说:我要变成一只美丽的小金鱼,彻底与我们乌龟家族的丑决裂。
       这几位沉浸在美好的憧憬之中,仿佛他们此刻已经成为了兔子,大象和小金鱼,只有那只最小的乌龟最在一边一声不响,大家问他小弟,你的理想是什么?准备变成什么呢?
      谁知,他回答:我只希望我能成为一只真正的乌龟,不给我们的先辈丢脸!
    追求高远的不切合实际的目标,往往最后迷失了自我,努力的把自我做好,也许是我们一声中最重要的事情!
     
     
    February 15

    表现你的本色

      卓别林开始拍电影的时候,许多导演都坚持要求他去学习当时特别出名的德国戏剧演员,可是他怎么也学不象.苦恼的卓别林久久品尝不到成功的滋味,后来他意识到必须坚持自己的本色,经过不懈的努力,他终于创造出自己的一套表演方法而为人们乐乐津道.
      美国歌星金.奥特雷刚出道时,德周的乡音很浓,他力图改掉这个毛病像城市里的绅士,结果大家都在背后耻笑他,后来他终于醒悟过来,他开始利用自己的音色,唱西部歌曲,成为全世界在电影和广播两方面最有名的西部影星!
      你就是一个奇迹,充分发挥你所具有的一切能力,而不要企图让它成为另一种东西!!
    February 14

    知道自己想要什么

      
        师傅带着自己的三个徒弟去草原打猎。四个人来到草原上,这时师傅想三个徒弟提出了一个问题。
       “你们看见了什么呢?“
        大徒弟回答说:“我看到了我们手里拿的猎枪,一望无际的草原,还有草原上奔跑的兔子。“
        师傅摇头说:“不对。“
       二徒弟回答:“我看到了师傅,师兄,师弟,野兔还有茫茫无际的草原。“]
       师傅摇头说:“不对。“
       小徒弟回答道:“我只看到了野兔。“
       这时师傅说:“你回答对了。“
    “莫为浮云遮望眼,咬定青山不放松“,专注的精神会令你大有所获。
    February 12

    一斤米的价值

          一个年轻人并不是很了解自己,面对他人的表扬和批评,他十分不解,于是便向一位长者请教:
         "先生,有人称赞我果敢机智将来一定能成就一番大事业,也有人骂我冲动不理智,注定一事无成,你是怎么看的呢?"
         长者沉思了一会儿,缓缓的说道:"这里有一斤米,在作饭人的眼中,它只不过是几碗米饭,而在农夫眼里可能值1元钱;在卖棕子的眼里,它可能卖到3~4元钱;在制饼者看来,它可以获得5元的利润;而在酿酒商看来,它可以酿成陈年老酒.同样一斤米,不同的人眼光不同,其价值也大不一样."
         其实,我们每个人都是一个潜力巨大的宝库,关键是我们是用什么样的眼光看待自己,开发自己!