明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2088|回复: 5

[求助]

[复制链接]
发表于 2002-12-2 01:07 | 显示全部楼层 |阅读模式
谁能帮我分析一下这个程序呀
这是一个关于蜗轮蜗杆的程序题目,帮我分析以下,谢谢了!!!
题目虽然长了一点,还希望大家能多点耐心哦!!呵呵

;;;d为轮毂内径;d1为蜗杆分度圆直径;d0为幅板孔径;dd0为幅板孔的周向位置直径;
;;;d2为蜗轮分度圆直径;d3为轮毂凸台直径;d4为紧固件直径;d5为轮毂外径;
;;;dw为蜗轮外径;da1为蜗杆顶圆直径;da2为蜗轮顶圆直径;df2为齿根圆直径;
;;;w_b为齿顶宽;C为幅板宽;nn为轮毂凸台外倒角大小;n1为内倒角大小;
;;;a为轮缘的齿根到轮缘内径距离;b轮毂外径凸缘大小;z1为蜗杆头数;z2为蜗轮齿数;
;;;l为轮毂宽;gama为第四类蜗轮齿顶夹角;r为圆角半径;m为模数;nm为紧固件数目;
;;;sca为图形比例;ch_m为主视图选择变量;ch_s为侧视图选择;
(defun worm1 (/              bmain   bodraw  w_set1  w_vslide              w_start1
              w_type1 mode_w1 w_dir   wcheck1 check1  explain1
              explain2              explain3              expalin4              explain5
              worm1_keep      undo    set_grp vslide  wdtr    wtan
              pick1   pick2   w_draw1 dia     what    wtype   grp
              d              d1      d0      dd0     d2      d3      d4
              d5      dw      da1     da2     df2     w_b     c
              nn      n1      n2      a              b              z1      z2
              l              l0      l1      gama    r              m              m_no
              sca     sca_no  d1_no   d4_no   l1_no   ch_m    ch_s
              m_list  sca_list              d4_list l1_list d1_list nm
              rot     start   start1  dw      w_f     w_x     key_b
              key_t1  wr1     wr2     cn      jud     mod     jj
              os_old  ucs_name  do_help
             )
  (setq        what 3
        wtype 1
        d0 0
        dd0 0
        d 0
        d1 18
        d2 0
        d3 0
        d4 6
        d5 0
        dw 0
        da1 0
        da2 0
        df2 0
        w_b 0
        c 10
        nn 1
        n1 2
        n2 2
        a 0
        b 0
        z1 1
        z2 20
        l 0
        l0 0
        l1 12
        gama 100
        r 2
        m 1
        m_no 0
        sca 1
        sca_no 4
        d1_no 0
        d4_no 0
        l1_no 0
        ch_m 1
        ch_s 0
        rot 0
        w_f 0
        w_x 0
        nm 6
        key_b 0
        key_t1 0
        wr1 0
        wr2 0
        cn 0
        jud 0
        mod 1
        jj 0
  )
  (setq grp nil)
  (setq w_b (* 0.75 (+ d1 (* m 2))))
  (setvar "cmdecho" 0)
;;;  (setq ucs_name "worm1")
;;;  (command "ucs" "del" ucs_name)
;;;  (command "ucs" "save" ucs_name)
  (command "ucs" "w")
  (setvar "measurement" 1)
  (setq os_old (getvar "osmode"))
  (setvar "osmode" 0)
  (command "layer" "s" "0" "c" "white" "" "")
  (command "layer" "m" "draw" "c" "white" "" "")
  (command "layer" "m" "center"        "c" "red" "" "l" "center" "" "")
  (command "layer" "m" "dashed"        "c" "white" "" "l" "dashed" "" "")
  (command "layer" "m" "bhatch" "c" "blue" "" "")
  (command "layer" "m" "dim" "c" "white" "" "")
  (command "layer" "m" "data" "lo" "data" "")
  (command "layer" "s" "0" "")
  (command "ltscale" 5.0)


  (defun do_help()
    (help "cadhelp.hlp" "aworm")
    )
  

  (defun w_set1        ()
    (while (> what 0)
      (action_tile "w_type1" "(w_type1)")
      (action_tile "w_dir" "(w_dir)")
      (action_tile "main" "(wcheck1) (mode_w1) ")
      (action_tile "side" "(wcheck1) (mode_w1)")
      (action_tile "screw_d" "(wcheck1) ")
      (action_tile "screw_l" "(wcheck1) ")
      (action_tile "w_nm" "(wcheck1)")
      (action_tile "w_m" "(wcheck1)")
      (action_tile "w_d1" "(wcheck1)")
      (action_tile "scale" "(wcheck1)")
      (action_tile "w_z1" "(wcheck1) ")
      (action_tile "w_z2" "(setq jj 0)(wcheck1)")
      (action_tile "w_shaft" "(wcheck1)")
      (action_tile "w_b" "(setq jj 0)(wcheck1)")
      (action_tile "w_l" "(setq jj 0)(wcheck1)")
      (action_tile "w_d3" "(setq jj 0)(wcheck1)")
      (action_tile "w_dw" "(setq jj 0)(wcheck1)")
      (action_tile "w_ang" "(setq jj 0)(wcheck1)")
      (action_tile "w_n1" "(wcheck1) ")
      (action_tile "w_r" "(wcheck1) ")
      (action_tile "w_x" "(wcheck1) ")
      (action_tile "help" "(do_help)")
      (action_tile
        "accept"
        "(check1) (if (= jj 1) (done_dialog 5))"
      )
      (setq what (start_dialog))
      (cond
        ((= what 5) (w_draw1))
      )
    )
  )

  (defun w_vslide ()
    (vslide "w_image" (strcat "worm" (itoa (+ wtype cn))) 0)
  )


                                        ;******  original set the value in worm used in "worm"
  (defun w_start1 ()
    (mode_w1)
    (w_vslide)
    (set_tile "main" (itoa ch_m))
    (set_tile "side" (itoa ch_s))
    (set_tile "w_nm" (itoa nm))
    (set_tile "wm" (itoa m_no))
    (set_tile "screw_d" (itoa d4_no))
    (set_tile "screw_l" (itoa l1_no))
    (set_tile "w_d1" (itoa d1_no))
    (set_tile "scale" (itoa sca_no))
    (set_tile "w_z1" (itoa z1))
    (set_tile "w_z2" (itoa z2))
    (set_tile "w_shaft" (rtos d 2 1))
    (set_tile "w_b" (rtos w_b 2 1))
    (set_tile "w_l" (rtos l 2 1))
    (set_tile "w_d3" (rtos d3 2 1))
    (set_tile "w_dw" (rtos dw 2 1))
    (set_tile "w_ang" (rtos gama 2 1))
    (set_tile "w_n1" (rtos n1 2 1))
    (set_tile "w_r" (rtos r 2 1))
    (set_tile "w_x" (rtos w_x 2 1))
    (wcheck1)
  )

                                        ;******** select the worm type
  (defun w_type1 ()
    (if        (not (new_dialog "wtype1" dia))
      (exit)
    )
    (vslide "worm1" "worm1" 0)
    (vslide "worm2" "worm2" 0)
    (vslide "worm3" "worm3" 0)
    (vslide "worm4" "worm4" 0)
    (vslide "worm5" "worm5" 0)
    (action_tile "worm1" "(setq wtype 1)")
    (action_tile "worm2" "(setq wtype 2)")
    (action_tile "worm3" "(setq wtype 3)")
    (action_tile "worm4" "(setq wtype 4)")
    (action_tile "worm5" "(setq wtype 5)")
    (action_tile "help" "(do_help)")
    (action_tile "accept" "(done_dialog 0)")
    (start_dialog)
    (w_vslide)
    (mode_w1)
    (wcheck1)
  )


                                        ;****** mode the choice way
  (defun mode_w1 ()
    (mode_tile "screw_l"
               (if (/= wtype 5)
                 0
                 1
               )
    )
    (mode_tile "screw_d"
               (if (/= wtype 5)
                 0
                 1
               )
    )
    (mode_tile "w_ang"
               (if (= wtype 4)
                 0
                 1
               )
    )
    (mode_tile "w_nm"
               (if (or (= wtype 3) (= ch_s 0))
                 1
                 0
               )
    )
    (mode_tile "accept" 1)
    (if        (= wtype 5)
      (progn
        (mode_tile "screw_d" 1)
        (mode_tile "screw_l" 1)
      )
    )
  )

                                        ;******* select the direction used in "worm"
  (defun w_dir ()
    (if        (not (new_dialog "wdir" dia))
      (exit)
    )
    (vslide "dir_1" (strcat "worm" (itoa wtype)) 0)
    (vslide "dir_2" (strcat "worm" (itoa (+ wtype 10))) 0)
    (vslide "dir_3" (strcat "worm" (itoa (+ wtype 20))) 0)
    (vslide "dir_4" (strcat "worm" (itoa (+ wtype 30))) 0)
    (action_tile "dir_1" "(setq rot 0 cn 0)")
    (action_tile "dir_2" "(setq rot pi cn 10)")
    (action_tile "dir_3" "(setq rot (* 0.5 pi) cn 20)")
    (action_tile "dir_4" "(setq rot (* -0.5 pi) cn 30)")
    (action_tile "help" "(do_help)")
    (action_tile "accept" "(done_dialog 0)")
    (start_dialog)
    (w_start1)
  )


                                        ;****** input and check the data
  (defun wcheck1 ()
    (setq m_list (list 1 1.25 1.6 2 2.5        3.15 4 5 6.3 8 10 12.5 16 20 25
                       31.5 40)
    )
    (setq d1_list (list        18   20          22.4 25   28         31.5 35.5 40        45
                        50   56          63   71   80         90   100  112        125
                        140  160  180  200  224         250  280  315        355
                        400
                       )
    )
    (setq d4_list (list 5 6 8 10 12 14 16 18 20))
    (setq l1_list (list        6 8 10 12 16 20        25 28 30 35 40 45 50 55        60 65 70
                        75 80)
    )
    (setq sca_list (list 5 4 3 2 1 0.5 0.333333 0.25 0.2))
    (setq
      ch_m   (atoi (get_tile "main"))
      ch_s   (atoi (get_tile "side"))
      sca_no (atoi (get_tile "scale"))
      d4_no  (atoi (get_tile "screw_d"))
      d1_no  (atoi (get_tile "w_d1"))
      m_no   (atoi (get_tile "wm"))
      l1_no  (atoi (get_tile "screw_l"))
      nm     (atoi (get_tile "w_nm"))
      z1     (atoi (get_tile "w_z1"))
      z2     (atoi (get_tile "w_z2"))
      d             (atof (get_tile "w_shaft"))
      w_b    (atof (get_tile "w_b"))
      l             (atof (get_tile "w_l"))
      d3     (atof (get_tile "w_d3"))
      dw     (atof (get_tile "w_dw"))
      gama   (atof (get_tile "w_ang"))
      n1     (atof (get_tile "w_n1"))
      r             (atof (get_tile "w_r"))
      w_x    (atof (get_tile "w_x"))
    )
    (setq m (nth m_no m_list))
    (setq d1 (nth d1_no d1_list))
    (setq l1 (nth l1_no l1_list))
    (setq d4 (nth d4_no d4_list))
    (setq sca (nth sca_no sca_list))
    (setq m   (* m sca)
          d1  (* d1 sca)
          l1  (* l1 sca)
          d4  (* d4 sca)
          d   (* d sca)
          w_b (* w_b sca)
          l   (* l sca)
          d3  (* d3 sca)
          dw  (* dw sca)
          n1  (* n1 sca)
          r   (* r sca)
    )
    (setq da1 (+ d1 (* 2 m)))
    (setq d2 (* m z2))
    (setq da2 (+ d2 (* 2.0 (+ m (* w_x m)))))
    (cond
      ((= wtype 1) (setq c (* 0.3 w_b)))
      ((= wtype 2) (setq c (* 0.25 w_b)))
      ((or (= wtype 4) (= wtype 5)) (setq c (* 0.3 w_b)))
    )
    (if        (< c (* sca 10.0))
      (setq c (* sca 10.0))
    )
    (setq nn (* nn sca))
    (if        (and (< d3 (* sca 70.0)) (> d3 (* sca 40.0)))
      (setq nn (* 2.0 sca))
    )
    (if        (>= d3 (* sca 70))
      (setq nn (* 3.0 sca))
    )
    (if        (>= d3 (* sca 120))
      (setq nn (* 4.0 sca))
    )
    (setq n2 (* n2 sca))
    (cond
      ((<= m 2.0) (setq n2 (* sca 1.0)))
      ((and (> m 2.0) (<= m 4.0)) (setq n2 (* sca 2.0)))
      ((and (> m 4.0) (<= m 6.0)) (setq n2 (* sca 3.0)))
      ((> m 6.0) (setq n2 (* sca 4.0)))
    )
    (setq a (* 2.0 m))
    (setq b (* 2.0 m))
    (if        (< a (* sca 10.0))
      (setq a (* sca 10.0))
    )
    (if        (< b (* sca 10.0))
      (setq b (* sca 10.0))
    )
    (setq df2 (- d2 (* 2.0 (- (* 1.2 m) (* w_x m)))))
    (setq d5 (- df2 (* 2.0 a)))
    (if        (= wtype 2)
      (setq d5 (- (- df2 (* 2.0 a)) (* 4.0 d4)))
    )
    (cond
      ((<= w_b 30) (setq l0 (+ l1 (* 0.5 d4))))
      ((and (< w_b 50) (>= w_b 30)) (setq l0 (+ l1 (* 0.8 d4))))
      ((>= w_b 50) (setq l0 (+ l1 (* 1.0 d4))))
    )
    (setq w_f (* 2.0 m))
    (if        (< w_f (* sca 10.0))
      (setq w_f (* sca 10.0))
    )
    (setq dd0 (/ (+ (- d5 (* 2.0 b)) d3) 2.0))
    (setq dd0 (fix dd0))
    (if        (= wtype 5)
      (setq dd0        (/ (+ (- df2 (* 2.0 a))
                      (+ (* (* (/ (- l c) 2.0) 0.05) 2.0) d3)
                   )
                   2.0
                )
      )
    )
    (setq d0 (- (- dd0 d3) (* 2.0 r)))
    (if        (< d0 (* sca 30.0))
      (progn (setq dddd (* sca 6.0)) (setq d0 (- d0 dddd)))
    )
    (if        (and (>= d0 (* sca 30.0)) (< d0 (* sca 50.0)))
      (progn (setq dddd (* sca 12.0)) (setq d0 (- d0 dddd)))
    )
    (if        (>= d0 (* sca 50.0))
      (progn (setq dddd (* sca 16.0)) (setq d0 (- d0 dddd)))
    )
    (setq d0 (fix d0))
    (setq wr1 (* 0.5 (+ (* 2.4 m) d1)))
    (setq wr2 (* 0.5 (- d1 (* 2.0 m))))
    (cond
      ((< (* 0.25 (* w_b w_b)) (* wr1 wr1))
       (setq lll1 (sqrt (- (* wr1 wr1) (* 0.25 (* w_b w_b)))))
      )
      (t
       (alert "齿宽偏大,请重新输入齿宽")
       (mode_tile "w_b" 2)
      )
    )
    (setq lll2 (- wr1 lll1))
    (setq lll3 (- (/ (- dw df2) 2.0) n2))
    (if        (and (> z1 0)
             (> z2 0)
             (> d 0)
             (> w_b 0)
             (> dw 0)
             (> l 0)
             (> d3 0)
             (> n1 0)
             (> r 0)
             (> gama 0)
        )
      (progn
        (mode_tile "accept" 0)
        (setq mod 1)
      )
    )

  )

  (defun check1        ()
    (cond
      ((and (> z1 z2) (> z1 0) (> z2 0))
       (if (= mod 1)
         (alert "输入的蜗轮及蜗杆齿数不对")
       )
       (setq mod 0)
       (mode_tile "w_z2" 2)
      )
      ((and (> d 0.1)
            (> l 0.1)
            (or (< l (* 1.2 d)) (> l (* 1.8 d)))
       )
       (if (= mod 1)
         (progn
           (alert "输入的轮毂宽度不对")
           (explain2)
         )
       )
       (setq mod 0)
       (mode_tile "w_l" 2)
      )
      ((and (> m 0.1)
            (> z2 0.1)
            (> da2 0)
            (> dw 0)
            (> (+ da2 (* 0.3 m)) dw)
       )
       (if (= mod 1)
         (progn
           (alert "输入外径dw偏小,请重新输入。")
         )
       )
       (setq mod 0)
       (mode_tile "w_dw" 2)
      )
      ((and (> d 0.1)
            (> d3 0.1)
            (or (< d3 (* 1.6 d)) (> d3 (* 1.8 d)))
       )
       (if (= mod 1)
         (progn
           (alert "输入的轮毂直径d3不对")
           (explain3)
         )
       )
       (setq mod 0)
       (mode_tile "w_d3" 2)
      )
      ((or (< gama 90) (> gama 110))
       (if (= mod 1)
         (progn
           (alert "输入的齿顶夹角t不对")
           (explain4)
         )
       )
       (setq mod 0)
       (mode_tile "w_ang" 2)
      )
      ((and (> da1 (* 2.1 m))
            (or        (and (< z1 4) (> w_b (+ (* 0.75 da1) (* 1.0 sca))))
                (and (>= z1 4) (> w_b (+ (* 0.67 da1) (* 1.0 sca))))
            )
       )
       (if (= mod 1)
         (progn
           (alert "输入的齿轮缘宽度B不对")
           (explain1)
         )
       )
       (setq mod 0)
       (mode_tile "w_b" 2)
      )
      ((and (> dw 0)
            (> m 0)
            (> z2 0)
            (or        (and (= z1 1) (> dw (+ da2 (* 2 m))))
                (and (or (= z1 2) (= z1 3)) (> dw (+ da2 (* 1.5 m))))
                (and (= z1 4) (> dw (+ da2 m)))
            )
       )
       (if (= mod 1)
         (progn
           (alert "输入的蜗轮外径Dw不对")
           (explain5)
         )
       )
       (setq mod 0)
       (mode_tile "w_dw" 2)
      )
      ((and (/= wtype 2)
            (/= wtype 3)
            (< (- dd0 d3) (* 2.0 (+ dddd (* 2.0 r))))
            (> dd0 0)
            (> r 0)
            (> dddd 0)
       )
       (if (= mod 1)
         (alert "蜗轮上开减轻孔的位置不够,请选用第二或第三种结构")
       )
       (setq mod 0)
       (mode_tile "w_type1" 2)
      )
      ((and (>= lll2 lll3) (> dw 0) (> m 0) (> w_b 0) (> z2 0))
       (if (= mod 1)
         (alert "蜗轮齿宽偏大,请重新输入齿宽")
       )
       (setq mod 0)
       (mode_tile "w_b" 2)
      )
      (t
       (if (and        (> z1 0)
                (> z2 0)
                (> d 0)
                (> w_b 0)
                (> dw 0)
                (> l 0)
                (> d3 0)
                (> n1 0)
                (> r 0)
                (> gama 0)
           )
         (progn
           (mode_tile "accept" 0)
           (setq jj 1)
         )
       )
      )
    )
  )

  (defun explain1 ()
    (if        (not (new_dialog "explain1" dia))
      (exit)
    )
    (action_tile "accept" "(done_dialog 0)")
    (start_dialog)
  )

  (defun explain2 ()
    (if        (not (new_dialog "explain2" dia))
      (exit)
    )
    (action_tile "accept" "(done_dialog 0)")
    (start_dialog)
  )

  (defun explain3 ()
    (if        (not (new_dialog "explain3" dia))
      (exit)
    )
    (action_tile "accept" "(done_dialog 0)")
    (start_dialog)
  )

  (defun explain4 ()
    (if        (not (new_dialog "explain4" dia))
      (exit)
    )
    (action_tile "accept" "(done_dialog 0)")
    (start_dialog)
  )

  (defun explain5 ()
    (if        (not (new_dialog "explain5" dia))
      (exit)
    )
    (action_tile "accept" "(done_dialog 0)")
    (start_dialog)
  )





                                        ;******* draw the worm
  (defun worm1_keep (/ keep mo_ro rot1)
    (setq keep "m")
    (while (or (= keep "M") (= keep "m"))
      (setq keep (getstring "\n修改(M)\\任一键继续:"))
      (if (or (= keep "M") (= keep "m"))
        (progn
          (setq mo_ro "")
          (while (and (/= mo_ro "M") (/= mo_ro "R") (/= mo_ro "U"))
            (setq mo_ro
                   (strcase (getstring "\n平移(M)\\旋转(R)\\取消(U):"))
            )
          )
          (if (= mo_ro "M")
            (progn
              (command "move" grp "" start)
              (princ "\n")
              (princ "输入新起点:")
              (command pause)
              (setq start (getvar "lastpoint"))
            )
          )
          (if (= mo_ro "R")
            (progn
              (setq rot1 (getdist "\n旋转角度:"))
              (command "rotate" grp "" start rot1)
            )
          )
          (if (= mo_ro "U")
            (command "erase" grp "")
          )
          (redraw)
        )
      )
    )
    (command "regen")
    (if        (not (new_dialog "worm1" dia))
      (exit)
    )
    (w_start1)
    (w_set1)
  )

  (defun undo ()
    (command "erase" grp "")
    (command "regen")
    (if        (not (new_dialog "worm" dia))
      (exit)
    )
    (w_start1)
    (w_set1)
  )
                                        ;******** setq  the value of grp
  (defun set_grp (grp_n / n)
    (if        (not grp)
      (setq grp (ssadd))
    )
    (setq n 0)
    (if        (not (not grp_n))
      (repeat (sslength grp_n)
        (setq grp (ssadd (ssname grp_n n) grp))
        (setq n (+ 1 n))
      )
    )
  )


                                        ;********* look slide used in "worm" "worm_type"
  (defun vslide        (key s_name n / x y)
    (setq x (dimx_tile key))
    (setq y (dimy_tile key))
    (start_image key)
    (fill_image n -5 x y 2)
    (slide_image n -5 x y s_name)
    (end_image)
  )

  (defun wdtr (a) (/ (* a pi) 180.0))
  (defun wtan (a) (/ (sin a) (cos a)))

  (defun pick1 ()
    (setq start (getpoint "\n输入蜗轮零件图主视图的定位起点:"))
  )

  (defun pick2 ()
    (setq start1 (getpoint "\n输入蜗轮侧视图的中心点坐标:"))
  )


  (defun w_draw1 (/        p1    p2    p3          p4        p5    p6    p7          p8
                  p9        p10   p11   p12          p13        p14   p15   p16          p17
                  p18        p19   p20   p21          p22        p23   p24   p25          p26
                  p27        p28   p29   p30          p31        p32   p33   p34          p35
                  p36        p37   p38   p39          p40        p41   p42   p43          p44
                  p45        p46   p47   p48          p49        p50   p51   p52          p53
                  p54        p55   p56   p57          p58        p59   p60   p61          pn1
                  pn2        pn3   pn4   pn5          pn6        pn7   pn8   pn9          pn10
                  x0        x1    y0    y1          pmid1        pcenter            pmid2 pmid3
                  pmid4        dist1 dist2 mid_h mid_h1      mid_h2          mid_l1
                  mid_l2      mid_l3          grp0        grp1  grp2  grp3  grp4
                  grp5        grp6  grp7  grp8  grp9        grp10 grp11 grp12 grp13
                  grp14        grp15 grp16
                 )
    (setq grp nil)
    (cond
      ((and (> d (* sca 10)) (<= d (* sca 12)))
       (setq key_b  (* sca 4)
             key_t1 (* sca 1.8)
       )
      )
      ((and (> d (* sca 12)) (<= d (* sca 17)))
       (setq key_b  (* sca 5)
             key_t1 (* sca 2.3)
       )
      )
      ((and (> d (* sca 17)) (<= d (* sca 22)))
       (setq key_b  (* sca 6)
             key_t1 (* sca 2.8)
       )
      )
      ((and (> d (* sca 22)) (<= d (* sca 30)))
       (setq key_b  (* sca 8)
             key_t1 (* sca 3.3)
       )
      )
      ((and (> d (* sca 30)) (<= d (* sca 38)))
       (setq key_b  (* sca 10)
             key_t1 (* sca 3.3)
       )
      )
      ((and (> d (* sca 38)) (<= d (* sca 44)))
       (setq key_b  (* sca 12)
             key_t1 (* sca 3.3)
       )
      )
      ((and (> d (* sca 44)) (<= d (* sca 50)))
       (setq key_b  (* sca 14)
             key_t1 (* sca 3.8)
       )
      )
      ((and (> d (* sca 50)) (<= d (* sca 58)))
       (setq key_b  (* sca 16)
             key_t1 (* sca 4.3)
       )
      )
      ((and (> d (* sca 58)) (<= d (* sca 65)))
       (setq key_b  (* sca 18)
             key_t1 (* sca 4.4)
       )
      )
      ((and (> d (* sca 65)) (<= d (* sca 75)))
       (setq key_b  (* sca 20)
             key_t1 (* sca 4.9)
       )
      )
      ((and (> d (* sca 75)) (<= d (* sca 85)))
       (setq key_b  (* sca 22)
             key_t1 (* sca 5.4)
       )
      )
      ((and (> d (* sca 85)) (<= d (* sca 95)))
       (setq key_b  (* sca 25)
             key_t1 (* sca 5.4)
       )
      )
      ((> d (* sca 95))
       (setq key_b  (* sca 28)
             key_t1 (* sca 6.4)
       )
      )
    )
    (cond
      ((= d4 (* sca 5.0)) (setq dist1 (* sca 0.8)))
      ((= d4 (* sca 6.0)) (setq dist1 (* sca 1.0)))
      ((= d4 (* sca 8.0)) (setq dist1 (* sca 1.2)))
      ((= d4 (* sca 10.0)) (setq dist1 (* sca 1.5)))
      ((>= d4 (* sca 12.0)) (setq dist1 (* sca 1.8)))
    )
    (cond
      ((= d4 (* sca 5.0)) (setq dist2 (* sca 0.8)))
      ((= d4 (* sca 6.0)) (setq dist2 (* sca 1.0)))
      ((= d4 (* sca 8.0)) (setq dist2 (* sca 1.2)))
      ((= d4 (* sca 10.0)) (setq dist2 (* sca 1.6)))
      ((>= d4 (* sca 12.0)) (setq dist2 (* sca 2.0)))
    )
    (if        (= wtype 2)
      (setq d4 (+ d4 (* sca 1.0)))
    )
    (command "snap" "0.05")
    (if        (= ch_m 1)
      (pick1)
    )
    (cond
      ((= ch_m 1)
       (setq start1 (polar start rot (- da2 (/ l 2.0))))
      )
      ((= ch_m 0)
       (pick2)
       (setq start (polar start1 (+ rot pi) (- da2 (/ l 2.0))))
      )
    )

    (cond
      ((= wtype 1)
       (setq
         p2         (polar start (+ rot (* 0.5 pi)) (+ (/ d 2.0) n1))
         p1         (polar p2 (+ rot (* -0.75 pi)) (* (sqrt 2.0) n1))
         p3         (polar start (+ rot (* 0.5 pi)) (- (/ d3 2.0) nn))
         p4         (polar p3 (+ rot (* 0.75 pi)) (* (sqrt 2.0) nn))
         p5         (polar        p4
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- l w_b) 2.0) nn)
                 )
         p6         (polar        p5
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- w_b c) 2.0) r)
                 )
         p7         (polar p6 (+ rot (* 0.75 pi)) (* (sqrt 2.0) r))
         mid_h         (/ (- (- d5 (* 2.0 b)) d3) 2.0)
         mid_h1         (* (- (/ (- l c) 2.0) (+ nn r)) 0.05)
         mid_h2         (* (- (/ (- w_b c) 2.0) r) 0.05)
         p8         (polar        p7
                        (+ rot (* 0.5 pi))
                        (- (- mid_h (* 2.0 r)) (+ mid_h1 mid_h2))
                 )
         p9         (polar p8 (+ rot (* 0.25 pi)) (* (sqrt 2.0) r))
         p10         (polar        p9
                        (+ rot (atan 0.05))
                        (* (- (/ (- w_b c) 2.0) r) (/ 1.0 (cos (atan 0.05))))
                 )
         p11         (polar p10 (+ rot (* 0.5 pi)) (+ b (* sca 4.0)))
         p12         (polar p11 (+ rot pi) (* sca 10))
         p13         (polar p12 (+ rot (* -0.5 pi)) (* sca 4.0))
         mid_l1         (- (- w_b l0)
                    (* sca 10)
                    (* (wtan (wdtr 30))
                       (- (/ (- d4 dist1) 2.0) (* sca 2.0))
                    )
                 )
         p14         (polar p13 (+ rot pi) mid_l1)
         p15         (polar        p14
                        (+ rot (* (/ -1.0 3.0) pi))
                        (* (/ 2.0 (sqrt 3.0)) (* sca 2.0))
                 )
         p16         (polar        p15
                        (+ rot (* (/ -2.0 3.0) pi))
                        (* (/ (- d4 dist1) 2.0) (/ 2.0 (sqrt 3.0)))
                 )
         p17         (polar p16 (+ rot pi) (- l0 l1))
         p18         (polar        p17
                        (+ rot (* -0.75 pi))
                        (* (sqrt 2.0) (/ dist1 2.0))
                 )
         p19         (polar p18 (+ rot pi) (- l1 (/ dist1 2.0)))
         p20         (polar p10 (+ rot pi) w_b)
         p21         (polar p9 (+ rot pi) (+ c (* r 2.0)))
         p22         (polar p8 (+ rot pi) c)
         p23         (polar p7 (+ rot pi) c)
         p24         (polar p6 (+ rot pi) (+ c (* 2.0 r)))
         p25         (polar p5 (+ rot pi) w_b)
         p26         (polar p4 (+ rot pi) (- l (* 2.0 nn)))
         p27         (polar p3 (+ rot pi) l)
         p28         (polar p2 (+ rot pi) l)
         p29         (polar p1 (+ rot pi) (- l (* 2.0 n1)))
         p30         (polar        (polar start (+ rot (* 0.5 pi)) (/ dd0 2.0))
                        (+ rot pi)
                        (/ (- l c) 2.0)
                 )
         p31         (polar p30 (+ rot (* 0.5 pi)) (/ d0 2.0))
         p32         (polar p31 (+ rot pi) c)
         p33         (polar p32 (+ rot (* -0.5 pi)) d0)
         p34         (polar p33 rot c)
         p35         (polar p11 (+ rot (* 0.5 pi)) (* sca 1.0))
         mid_l2         (sqrt (- (* wr1 wr1) (* 0.25 (* w_b w_b))))
         mid_l3         (- wr1 mid_l2)
         p36         (polar p35 (+ rot (* 0.5 pi)) (- (+ mid_l3 a) (* sca 5.0)))
         mid_l2         (/ (- dw d5) 2.0)
         p37         (polar p35 (+ rot (* 0.5 pi)) (- (- mid_l2 (* sca 5)) n2))
         p38         (polar p37 (+ rot (* 0.75 pi)) (* (sqrt 2.0) n2))
         mid_l2         (- (/ (+ d1 d2) 2.0) (/ dw 2.0))
         mid_l3         (sqrt (- (* wr2 wr2) (* mid_l2 mid_l2)))
         p39         (polar p38 (+ rot pi) (- (- (/ w_b 2.0) mid_l3) n2))
         p40         (polar p39 (+ rot pi) (* mid_l3 2.0))
         p41         (polar p38 (+ rot pi) (- w_b (* n2 2.0)))
         p42         (polar p37 (+ rot pi) w_b)
         p43         (polar p36 (+ rot pi) w_b)
         p44         (polar p19 (+ rot (* 0.5 pi)) d4)
         p45         (polar p18 (+ rot (* 0.5 pi)) d4)
         p46         (polar p17 (+ rot (* 0.5 pi)) (- d4 dist1))
         p47         (polar p16 (+ rot (* 0.5 pi)) (- d4 dist1))
         p48         (polar p35 (+ rot pi) (* sca 10.0))
         p49         (polar p1 (+ rot (* -0.5 pi)) (/ (- d key_b) 2.0))
         p50         (polar p49 (+ rot pi) (- l (* 2.0 n1)))
         p52         (polar start (+ rot (* 0.5 pi)) (/ key_b 2.0))
         p51         (polar p52 (+ rot pi) l)
         pcenter (polar start (+ rot pi) (/ l 2.0))
         pcenter (polar pcenter (+ rot (* 0.5 pi)) (/ (+ d1 d2) 2.0))
         mid_l1         (/ w_b 2.0)
         mid_l2         (/ d1 2.0)
         mid_l3         (sqrt (- (* mid_l2 mid_l2) (* mid_l1 mid_l1)))
         p53         (polar pcenter (+ rot (* -0.5 pi)) mid_l3)
         p53         (polar p53 rot mid_l1)
         p55         (polar pcenter (+ rot (* -0.5 pi)) (/ d1 2.0))
         p54         (polar p53 (+ rot pi) (* mid_l1 2.0))
         pn2         (polar p46 (+ rot pi) l1)
         pn1         (polar        pn2
                        (+ rot (* -0.5 pi))
                        (/ (- (- d4 dist1) dist2) 2.0)
                 )
         pn3         (polar        pn2
                        (+ rot (* 0.25 pi))
                        (* (/ dist1 2.0) (sqrt 2.0))
                 )
         pn4         (polar pn3 (+ rot (* -0.5 pi)) (/ (- d4 dist2) 2.0))
         pn5         (polar pn1 rot (* dist1 1.5))
         pn6         (polar pn5 (+ rot (* -0.5 pi)) dist2)
         pn7         (polar pn4 (+ rot (* -0.5 pi)) dist2)
         pn8         (polar pn3 (+ rot (* -0.5 pi)) d4)
         pn9         (polar pn2 (+ rot (* -0.5 pi)) (- d4 dist1))
         pn10         (polar pn1 (+ rot (* -0.5 pi)) dist2)
         p61         (polar start rot 0.5)
       )
      )
      ((= wtype 2)
       (setq
         p2         (polar start (+ rot (* 0.5 pi)) (+ (/ d 2.0) n1))
         p1         (polar p2 (+ rot (* -0.75 pi)) (* (sqrt 2.0) n1))
         p3         (polar start (+ rot (* 0.5 pi)) (- (/ d3 2.0) nn))
         p4         (polar p3 (+ rot (* 0.75 pi)) (* (sqrt 2.0) nn))
         p5         (polar        p4
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- l w_b) 2.0) nn)
                 )
         p6         (polar        p5
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- w_b (* 2.0 c)) 2.0) r)
                 )
         p7         (polar p6 (+ rot (* 0.75 pi)) (* (sqrt 2.0) r))
         mid_h         (+ (/ (- d5 d3) 2.0) (* 2.0 d4))
         mid_h1         (* (- (/ (- l (* 2.0 c)) 2.0) (+ nn r)) 0.05)
         p8         (polar        p7
                        (+ rot (* 0.5 pi))
                        (+ (- (- mid_h r) mid_h1) (* 1.0 sca))
                 )
         p9         (polar p8 (+ rot (wdtr 60)) r)
         p10         (polar        p9
                        (+ rot (wdtr 30))
                        (/ (- (/ (- w_b (* 2.0 c)) 2.0) (* 0.5 r))
                           (cos (wdtr 30))
                        )
                 )
         ppp         (polar start (+ rot pi) (/ l 2.0))
         ppp         (polar ppp (+ rot (* 0.5 pi)) (/ d5 2.0))
         ppp         (polar ppp rot c)
         p11         (polar ppp (+ rot (* -0.5 pi)) (* 2.0 d4))
         p12         (polar p11 (+ rot pi) c)
         p13         (polar p12 (+ rot (* 0.5 pi)) (* 4.0 d4))
         p14         (polar p13 (+ rot pi) c)
         p15         (polar p11 (+ rot (* 0.5 pi)) (* 1.0 sca))
         p16         (polar p15 (+ rot pi) c)
         p17         (polar ppp (+ rot (* 0.5 pi)) (/ d4 2.0))
         p18         (polar ppp (+ rot (* -0.5 pi)) (/ d4 2.0))
         p19         (polar p17 (+ rot pi) (* 2.0 c))
         p30         (polar p18 (+ rot pi) (* 2.0 c))
         p20         (polar p10 (+ rot pi) w_b)
         p21         (polar p9 (+ rot pi) (+ (* c 2.0) r))
         p22         (polar p8 (+ rot pi) (* 2.0 c))
         p23         (polar p7 (+ rot pi) (* 2.0 c))
         p24         (polar p6 (+ rot pi) (+ (* 2.0 c) (* 2.0 r)))
         p25         (polar p5 (+ rot pi) w_b)
         p26         (polar p4 (+ rot pi) (- l (* 2.0 nn)))
         p27         (polar p3 (+ rot pi) l)
         p28         (polar p2 (+ rot pi) l)
         p29         (polar p1 (+ rot pi) (- l (* 2.0 n1)))
         mid_l2         (sqrt (- (* wr1 wr1) (* 0.25 (* w_b w_b))))
         mid_l3         (- wr1 mid_l2)
         p36         (polar        (polar start (+ rot pi) (/ l 2.0))
                        (+ rot (* 0.5 pi))
                        (+ (/ df2 2.0) mid_l3)
                 )
         p36         (polar p36 rot (/ w_b 2.0))
         mid_l2         (- (/ (- dw df2) 2.0) mid_l3)
         p37         (polar p36 (+ rot (* 0.5 pi)) (- mid_l2 n2))
         p38         (polar p37 (+ rot (* 0.75 pi)) (* (sqrt 2.0) n2))
         mid_l2         (- (/ (+ d1 d2) 2.0) (/ dw 2.0))
         mid_l3         (sqrt (- (* wr2 wr2) (* mid_l2 mid_l2)))
         p39         (polar p38 (+ rot pi) (- (- (/ w_b 2.0) mid_l3) n2))
         p40         (polar p39 (+ rot pi) (* mid_l3 2.0))
         p41         (polar p38 (+ rot pi) (- w_b (* n2 2.0)))
         p42         (polar p37 (+ rot pi) w_b)
         p43         (polar p36 (+ rot pi) w_b)
         p49         (polar p1 (+ rot (* -0.5 pi)) (/ (- d key_b) 2.0))
         p50         (polar p49 (+ rot pi) (- l (* 2.0 n1)))
         p52         (polar start (+ rot (* 0.5 pi)) (/ key_b 2.0))
         p51         (polar p52 (+ rot pi) l)
         pcenter (polar start (+ rot pi) (/ l 2.0))
         pcenter (polar pcenter (+ rot (* 0.5 pi)) (/ (+ d1 d2) 2.0))
         mid_l1         (/ w_b 2.0)
         mid_l2         (/ d1 2.0)
         mid_l3         (sqrt (- (* mid_l2 mid_l2) (* mid_l1 mid_l1)))
         p53         (polar pcenter (+ rot (* -0.5 pi)) mid_l3)
         p53         (polar p53 rot mid_l1)
         p55         (polar pcenter (+ rot (* -0.5 pi)) (/ d1 2.0))
         p54         (polar p53 (+ rot pi) (* mid_l1 2.0))
         p61         (polar start rot 0.5)
       )
      )
      ((= wtype 3)
       (setq
         p2         (polar start (+ rot (* 0.5 pi)) (+ (/ d 2.0) n1))
         p1         (polar p2 (+ rot (* -0.75 pi)) (* (sqrt 2.0) n1))
         p3         (polar start (+ rot (* 0.5 pi)) (- (/ d3 2.0) nn))
         p4         (polar p3 (+ rot (* 0.75 pi)) (* (sqrt 2.0) nn))
         p5         (polar        p4
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- l w_b) 2.0) nn)
                 )
         p11         (polar        p5
                        (+ rot (* 0.5 pi))
                        (+ (/ (- d5 d3) 2.0) (* sca 4.0))
                 )
         p12         (polar p11 (+ rot pi) (* sca 10))
         p13         (polar p12 (+ rot (* -0.5 pi)) (* sca 4.0))
         mid_l1         (- (- w_b l0)
                    (* sca 10)
                    (* (wtan (wdtr 30))
                       (- (/ (- d4 dist1) 2.0) (* sca 2.0))
                    )
                 )
         p14         (polar p13 (+ rot pi) mid_l1)
         p15         (polar        p14
                        (+ rot (* (/ -1.0 3.0) pi))
                        (* (/ 2.0 (sqrt 3.0)) (* sca 2.0))
                 )
         p16         (polar        p15
                        (+ rot (* (/ -2.0 3.0) pi))
                        (* (/ (- d4 dist1) 2.0) (/ 2.0 (sqrt 3.0)))
                 )
         p17         (polar p16 (+ rot pi) (- l0 l1))
         p18         (polar        p17
                        (+ rot (* -0.75 pi))
                        (* (sqrt 2.0) (/ dist1 2.0))
                 )
         p19         (polar p18 (+ rot pi) (- l1 (/ dist1 2.0)))
         p25         (polar p5 (+ rot pi) w_b)
         p26         (polar p4 (+ rot pi) (- l (* 2.0 nn)))
         p27         (polar p3 (+ rot pi) l)
         p28         (polar p2 (+ rot pi) l)
         p29         (polar p1 (+ rot pi) (- l (* 2.0 n1)))
         p35         (polar p11 (+ rot (* 0.5 pi)) (* sca 1.0))
         mid_l2         (sqrt (- (* wr1 wr1) (* 0.25 (* w_b w_b))))
         mid_l3         (- wr1 mid_l2)
         p36         (polar p35 (+ rot (* 0.5 pi)) (- (+ mid_l3 a) (* sca 5.0)))
         mid_l2         (/ (- dw d5) 2.0)
         p37         (polar p35 (+ rot (* 0.5 pi)) (- (- mid_l2 (* sca 5)) n2))
         p38         (polar p37 (+ rot (* 0.75 pi)) (* (sqrt 2.0) n2))
         mid_l2         (- (/ (+ d1 d2) 2.0) (/ dw 2.0))
         mid_l3         (sqrt (- (* wr2 wr2) (* mid_l2 mid_l2)))
         p39         (polar p38 (+ rot pi) (- (- (/ w_b 2.0) mid_l3) n2))
         p40         (polar p39 (+ rot pi) (* mid_l3 2.0))
         p41         (polar p38 (+ rot pi) (- w_b (* n2 2.0)))
         p42         (polar p37 (+ rot pi) w_b)
         p43         (polar p36 (+ rot pi) w_b)
         p44         (polar p19 (+ rot (* 0.5 pi)) d4)
         p45         (polar p18 (+ rot (* 0.5 pi)) d4)
         p46         (polar p17 (+ rot (* 0.5 pi)) (- d4 dist1))
         p47         (polar p16 (+ rot (* 0.5 pi)) (- d4 dist1))
         p48         (polar p35 (+ rot pi) (* sca 10.0))
         p49         (polar p1 (+ rot (* -0.5 pi)) (/ (- d key_b) 2.0))
         p50         (polar p49 (+ rot pi) (- l (* 2.0 n1)))
         p52         (polar start (+ rot (* 0.5 pi)) (/ key_b 2.0))
         p51         (polar p52 (+ rot pi) l)
         pcenter (polar start (+ rot pi) (/ l 2.0))
         pcenter (polar pcenter (+ rot (* 0.5 pi)) (/ (+ d1 d2) 2.0))
         mid_l1         (/ w_b 2.0)
         mid_l2         (/ d1 2.0)
         mid_l3         (sqrt (- (* mid_l2 mid_l2) (* mid_l1 mid_l1)))
         p53         (polar pcenter (+ rot (* -0.5 pi)) mid_l3)
         p53         (polar p53 rot mid_l1)
         p55         (polar pcenter (+ rot (* -0.5 pi)) (/ d1 2.0))
         p54         (polar p53 (+ rot pi) (* mid_l1 2.0))
         pn2         (polar p46 (+ rot pi) l1)
         pn1         (polar        pn2
                        (+ rot (* -0.5 pi))
                        (/ (- (- d4 dist1) dist2) 2.0)
                 )
         pn3         (polar        pn2
                        (+ rot (* 0.25 pi))
                        (* (/ dist1 2.0) (sqrt 2.0))
                 )
         pn4         (polar pn3 (+ rot (* -0.5 pi)) (/ (- d4 dist2) 2.0))
         pn5         (polar pn1 rot (* dist1 1.5))
         pn6         (polar pn5 (+ rot (* -0.5 pi)) dist2)
         pn7         (polar pn4 (+ rot (* -0.5 pi)) dist2)
         pn8         (polar pn3 (+ rot (* -0.5 pi)) d4)
         pn9         (polar pn2 (+ rot (* -0.5 pi)) (- d4 dist1))
         pn10         (polar pn1 (+ rot (* -0.5 pi)) dist2)
         p61         (polar start rot 0.5)
       )
      )
      ((= wtype 4)
       (setq
         p2         (polar start (+ rot (* 0.5 pi)) (+ (/ d 2.0) n1))
         p1         (polar p2 (+ rot (* -0.75 pi)) (* (sqrt 2.0) n1))
         p3         (polar start (+ rot (* 0.5 pi)) (- (/ d3 2.0) nn))
         p4         (polar p3 (+ rot (* 0.75 pi)) (* (sqrt 2.0) nn))
         p5         (polar        p4
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- l w_b) 2.0) nn)
                 )
         p6         (polar        p5
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- w_b c) 2.0) r)
                 )
         p7         (polar p6 (+ rot (* 0.75 pi)) (* (sqrt 2.0) r))
         mid_h         (/ (- (- d5 (* 2.0 b)) d3) 2.0)
         mid_h1         (* (- (/ (- l c) 2.0) (+ nn r)) 0.05)
         mid_h2         (* (- (/ (- w_b c) 2.0) r) 0.05)
         p8         (polar        p7
                        (+ rot (* 0.5 pi))
                        (- (- mid_h (* 2.0 r)) (+ mid_h1 mid_h2))
                 )
         p9         (polar p8 (+ rot (* 0.25 pi)) (* (sqrt 2.0) r))
         p10         (polar        p9
                        (+ rot (atan 0.05))
                        (* (- (/ (- w_b c) 2.0) r) (/ 1.0 (cos (atan 0.05))))
                 )
         p11         (polar p10 (+ rot (* 0.5 pi)) (+ b (* sca 4.0)))
         p12         (polar p11 (+ rot pi) (* sca 10))
         p13         (polar p12 (+ rot (* -0.5 pi)) (* sca 4.0))
         mid_l1         (- (- w_b l0)
                    (* sca 10)
                    (* (wtan (wdtr 30))
                       (- (/ (- d4 dist1) 2.0) (* sca 2.0))
                    )
                 )
         p14         (polar p13 (+ rot pi) mid_l1)
         p15         (polar        p14
                        (+ rot (* (/ -1.0 3.0) pi))
                        (* (/ 2.0 (sqrt 3.0)) (* sca 2.0))
                 )
         p16         (polar        p15
                        (+ rot (* (/ -2.0 3.0) pi))
                        (* (/ (- d4 dist1) 2.0) (/ 2.0 (sqrt 3.0)))
                 )
         p17         (polar p16 (+ rot pi) (- l0 l1))
         p18         (polar        p17
                        (+ rot (* -0.75 pi))
                        (* (sqrt 2.0) (/ dist1 2.0))
                 )
         p19         (polar p18 (+ rot pi) (- l1 (/ dist1 2.0)))
         p20         (polar p10 (+ rot pi) w_b)
         p21         (polar p9 (+ rot pi) (+ c (* r 2.0)))
         p22         (polar p8 (+ rot pi) c)
         p23         (polar p7 (+ rot pi) c)
         p24         (polar p6 (+ rot pi) (+ c (* 2.0 r)))
         p25         (polar p5 (+ rot pi) w_b)
         p26         (polar p4 (+ rot pi) (- l (* 2.0 nn)))
         p27         (polar p3 (+ rot pi) l)
         p28         (polar p2 (+ rot pi) l)
         p29         (polar p1 (+ rot pi) (- l (* 2.0 n1)))
         p30         (polar        (polar start (+ rot (* 0.5 pi)) (/ dd0 2.0))
                        (+ rot pi)
                        (/ (- l c) 2.0)
                 )
         p31         (polar p30 (+ rot (* 0.5 pi)) (/ d0 2.0))
         p32         (polar p31 (+ rot pi) c)
         p33         (polar p32 (+ rot (* -0.5 pi)) d0)
         p34         (polar p33 rot c)
         p35         (polar p11 (+ rot (* 0.5 pi)) (* sca 1.0))
         mid_l2         (sqrt (- (* wr1 wr1) (* 0.25 (* w_b w_b))))
         mid_l3         (- wr1 mid_l2)
         p36         (polar p35 (+ rot (* 0.5 pi)) (- (+ mid_l3 a) (* sca 5.0)))
         mid_l2         (/ (- dw d5) 2.0)
         p37         (polar p35 (+ rot (* 0.5 pi)) (- (- mid_l2 (* sca 5)) n2))
         p38         (polar p37 (+ rot (* 0.75 pi)) (* (sqrt 2.0) n2))
         mid_l2         (- (/ (+ d1 d2) 2.0) (/ dw 2.0))
         mid_l3         (sqrt (- (* wr2 wr2) (* mid_l2 mid_l2)))
         p39         (polar p38 (+ rot pi) (- (- (/ w_b 2.0) mid_l3) n2))
         p40         (polar p39 (+ rot pi) (* mid_l3 2.0))
         p41         (polar p38 (+ rot pi) (- w_b (* n2 2.0)))
         p42         (polar p37 (+ rot pi) w_b)
         p43         (polar p36 (+ rot pi) w_b)
         p44         (polar p19 (+ rot (* 0.5 pi)) d4)
         p45         (polar p18 (+ rot (* 0.5 pi)) d4)
         p46         (polar p17 (+ rot (* 0.5 pi)) (- d4 dist1))
         p47         (polar p16 (+ rot (* 0.5 pi)) (- d4 dist1))
         p48         (polar p35 (+ rot pi) (* sca 10.0))
         p49         (polar p1 (+ rot (* -0.5 pi)) (/ (- d key_b) 2.0))
         p50         (polar p49 (+ rot pi) (- l (* 2.0 n1)))
         p52         (polar start (+ rot (* 0.5 pi)) (/ key_b 2.0))
         p51         (polar p52 (+ rot pi) l)
         pcenter (polar start (+ rot pi) (/ l 2.0))
         pcenter (polar pcenter (+ rot (* 0.5 pi)) (/ (+ d1 d2) 2.0))
         mid_l1         (/ w_b 2.0)
         mid_l2         (/ d1 2.0)
         mid_l3         (sqrt (- (* mid_l2 mid_l2) (* mid_l1 mid_l1)))
         p53         (polar pcenter (+ rot (* -0.5 pi)) mid_l3)
         p53         (polar p53 rot mid_l1)
         p55         (polar pcenter (+ rot (* -0.5 pi)) (/ d1 2.0))
         p54         (polar p53 (+ rot pi) (* mid_l1 2.0))
         pn2         (polar p46 (+ rot pi) l1)
         pn1         (polar        pn2
                        (+ rot (* -0.5 pi))
                        (/ (- (- d4 dist1) dist2) 2.0)
                 )
         pn3         (polar        pn2
                        (+ rot (* 0.25 pi))
                        (* (/ dist1 2.0) (sqrt 2.0))
                 )
         pn4         (polar pn3 (+ rot (* -0.5 pi)) (/ (- d4 dist2) 2.0))
         pn5         (polar pn1 rot (* dist1 1.5))
         pn6         (polar pn5 (+ rot (* -0.5 pi)) dist2)
         pn7         (polar pn4 (+ rot (* -0.5 pi)) dist2)
         pn8         (polar pn3 (+ rot (* -0.5 pi)) d4)
         pn9         (polar pn2 (+ rot (* -0.5 pi)) (- d4 dist1))
         pn10         (polar pn1 (+ rot (* -0.5 pi)) dist2)
         alpha1         (atan (/ (/ (- l w_b) 2.0) (- dd0 d3)))
         p56         (polar p10 (- rot (- (* 0.5 pi) alpha1)) r)
         p56         (polar p56 (- rot (- pi alpha1)) r)
         p57         (polar p4 (+ rot (- (* 0.5 pi) (atan 0.05))) r)
         p57         (polar p57 (- rot (- pi alpha1)) r)
         x0         (car pcenter)
         y0         (cadr pcenter)
         x1         (car p43)
         y1         (+ y0
                    (* (wtan (+ rot (wdtr (/ (- 180 gama) 2.0)))) (- x1 x0))
                 )
         p58         (list x1 y1)
         y1         (cadr p41)
         x1         (+ x0 (* (wtan (+ rot (wdtr (/ gama 2.0)))) (- y1 y0)))
         p59         (list x1 y1)
         p60         (polar p59 rot (* (abs (- x0 x1)) 2.0))
         p61         (polar start rot 0.5)
       )
      )
      ((= wtype 5)
       (setq
         p2         (polar start (+ rot (* 0.5 pi)) (+ (/ d 2.0) n1))
         p1         (polar p2 (+ rot (* -0.75 pi)) (* (sqrt 2.0) n1))
         p3         (polar start (+ rot (* 0.5 pi)) (- (/ d3 2.0) nn))
         p4         (polar p3 (+ rot (* 0.75 pi)) (* (sqrt 2.0) nn))
         p5         (polar        p4
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- l w_b) 2.0) nn)
                 )
         p6         (polar        p5
                        (+ rot (- pi (atan 0.05)))
                        (- (/ (- w_b c) 2.0) r)
                 )
         p7         (polar p6 (+ rot (* 0.75 pi)) (* (sqrt 2.0) r))
         ppp         (polar        (polar start (+ rot pi) (/ l 2.0))
                        (+ rot (* 0.5 pi))
                        (+ (/ df2 2.0) wr1)
                 )
         mid_l1         (sqrt (- (* (+ wr1 w_f r) (+ wr1 w_f r))
                          (* (+ r (/ c 2.0)) (+ r (/ c 2.0)))
                       )
                 )
         p8         (polar (polar ppp (+ rot (* -0.5 pi)) mid_l1) rot (/ c 2.0))
         p9         (polar
                   ppp
                   (+ rot (+ (* -0.5 pi) (atan (/ (+ r (/ c 2.0)) mid_l1))))
                   (+ wr1 w_f)
                 )
         mid_l2         (sqrt (- (* wr1 wr1) (* 0.25 (* w_b w_b))))
         mid_l3         (- wr1 mid_l2)
         p10         (polar        (polar start (+ rot pi) (/ l 2.0))
                        (+ rot (* 0.5 pi))
                        (/ df2 2.0)
                 )
         p10         (polar        (polar p10 rot (/ w_b 2.0))
                        (+ rot (* -0.5 pi))
                        (- w_f mid_l3)
                 )
         p20         (polar p10 (+ rot pi) w_b)
         p21         (polar
                   ppp
                   (+ rot (- (* -0.5 pi) (atan (/ (+ r (/ c 2.0)) mid_l1))))
                   (+ wr1 w_f)
                 )
         p22         (polar p8 (+ rot pi) c)
         p23         (polar p7 (+ rot pi) c)
         p24         (polar p6 (+ rot pi) (+ c (* 2.0 r)))
         p25         (polar p5 (+ rot pi) w_b)
         p26         (polar p4 (+ rot pi) (- l (* 2.0 nn)))
         p27         (polar p3 (+ rot pi) l)
         p28         (polar p2 (+ rot pi) l)
         p29         (polar p1 (+ rot pi) (- l (* 2.0 n1)))
         p30         (polar        (polar start (+ rot (* 0.5 pi)) (/ dd0 2.0))
                        (+ rot pi)
                        (/ (- l c) 2.0)
                 )
         p31         (polar p30 (+ rot (* 0.5 pi)) (/ d0 2.0))
         p32         (polar p31 (+ rot pi) c)
         p33         (polar p32 (+ rot (* -0.5 pi)) d0)
         p34         (polar p33 rot c)
         p36         (polar p10 (+ rot (* 0.5 pi)) w_f)
         p37         (polar        p36
                        (+ rot (* 0.5 pi))
                        (- (/ (- dw df2) 2.0) mid_l3)
                 )
         p38         (polar p37 (+ rot (* 0.75 pi)) (* (sqrt 2.0) n2))
         mid_l2         (- (/ (+ d1 d2) 2.0) (/ dw 2.0))
         mid_l3         (sqrt (- (* wr2 wr2) (* mid_l2 mid_l2)))
         p39         (polar p38 (+ rot pi) (- (- (/ w_b 2.0) mid_l3) n2))
         p40         (polar p39 (+ rot pi) (* mid_l3 2.0))
         p41         (polar p38 (+ rot pi) (- w_b (* n2 2.0)))
         p42         (polar p37 (+ rot pi) w_b)
         p43         (polar p36 (+ rot pi) w_b)
         p49         (polar p1 (+ rot (* -0.5 pi)) (/ (- d key_b) 2.0))
         p50         (polar p49 (+ rot pi) (- l (* 2.0 n1)))
         p52         (polar start (+ rot (* 0.5 pi)) (/ key_b 2.0))
         p51         (polar p52 (+ rot pi) l)
         pcenter (polar start (+ rot pi) (/ l 2.0))
         pcenter (polar pcenter (+ rot (* 0.5 pi)) (/ (+ d1 d2) 2.0))
         mid_l1         (/ w_b 2.0)
         mid_l2         (/ d1 2.0)
         mid_l3         (sqrt (- (* mid_l2 mid_l2) (* mid_l1 mid_l1)))
         p53         (polar pcenter (+ rot (* -0.5 pi)) mid_l3)
         p53         (polar p53 rot mid_l1)
         p55         (polar pcenter (+ rot (* -0.5 pi)) (/ d1 2.0))
         p54         (polar p53 (+ rot pi) (* mid_l1 2.0))
         p61         (polar start rot 0.5)
       )
      )
    )
    (command "layer" "set" "draw" "")
    (if        (= ch_m 1)
      (progn
        (if (= wtype 1)
          (progn
            (command "pline"           p29          p28         "w"        0.3    ""
                     p27    p26           p25          p24         "arc"        "radius"
                     r            p23           "line" p33         p34        p7     "arc"
                     "radius"           r          p6         "line"        p5     p4
                     p3            p2           p1          "c"
                    )
            (setq grp0 (ssadd (entlast)))
            (command "pline"
                     p32
                     p22
                     "arc"
                     "radius"
                     r
                     p21
                     "line"
                     p20
                     pn9
                     pn8
                     p18
                     p17
                     p16
                     p15
                     p14
                     p13
                     (polar p12 (+ rot (* -0.5 pi)) (* sca 1.0))
                     (polar p12 rot (* sca 1.0))
                     p11
                     p10
                     p9
                     "arc"
                     "radius"
                     r
                     p8
                     "line"
                     p31
                     "c"
            )
            (setq grp1 (ssadd (entlast)))
            (command "mirror" grp0 "" start p61 "n")
            (setq grp0 (ssadd (entlast) grp0))
            (command "mirror" grp1 "" start p61 "n")
            (setq grp1 (ssadd (entlast) grp1))
            (command "pline" p31 p32 p33 p34 "c")
            (setq grp2 (ssadd (entlast)))
            (command "mirror" grp2 "" start p61 "n")
            (setq grp2 (ssadd (entlast) grp2))
            (command "pline"
                     p44
                     p43
                     "arc"
                     "radius"
                     wr1
                     p36
                     "line"
                     p35
                     p48
                     p12
                     (polar p13 (+ rot (* 0.5 pi)) (* sca 1.0))
                     (polar p13 (+ rot pi) (* sca 1.0))
                     p14
                     p47
                     p46
                     p45
                     pn3
                     pn2
                     "c"
            )
            (setq grp3 (ssadd (entlast)))
            (command "mirror" grp3 "" start p61 "n")
            (setq grp3 (ssadd (entlast) grp3))
            (command "pline" p11 p35 "")
            (setq grp10 (ssadd (entlast)))
            (command "mirror" grp10 "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))
            (command "pline" p5 p10 "")
            (setq grp10 (ssadd (entlast) grp10))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))
            (command "pline" p20 p25 "")
            (setq grp10 (ssadd (entlast) grp10))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))

            (command "pline" p1 p29 p50 p49 "cl")
            (setq grp14 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p51 p52 "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p2 start "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p28 (polar start (+ rot pi) l) "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))

            (command "pline" p19 p44 "")
            (setq grp4 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p18 p45 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p17 p46 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p16 p47 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn8 p19 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn3 p44 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline"
                     p14
                     (polar p46
                            (+ rot (* -0.5 pi))
                            (- (- (/ d4 2.0) (* sca 2.0)) (/ dist1 2.0))
                     )
                     ""
            )
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn1 pn5 pn6 pn10 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn2 pn1 pn4 pn3 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn8 pn7 pn10 pn9 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn2 p46 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn9 p17 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))

            (command "pline"           p43          p42         p41        p40    "arc"
                     "radius"           wr2          p39         "line"        p38    p37
                     p36    ""
                    )
            (setq grp5 (ssadd (entlast)))
            (command "mirror" grp5 "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))

            (command "layer" "set" "bhatch" "")
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp0 "")
            (setq grp6 (ssadd (entlast)))
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp1 "")
            (setq grp6 (ssadd (entlast) grp6))
            (command "hatch" "ansi31" (* 1.0 sca) 90 grp3 "")
            (setq grp7 (ssadd (entlast)))

            (command "layer" "s" "center" "")
            (command "line"
                     (polar start rot (* sca 3.0))
                     (polar start (+ rot pi) (+ l (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     (polar p30 rot (* sca 3.0))
                     (polar p30 (+ rot pi) (+ c (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     (polar p15 rot (* sca 3.0))
                     (polar p15 (+ rot pi) (+ l0 (* sca 5.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "arc" p54 p55 p53)
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     pcenter
                     (polar pcenter (+ rot (* -0.5 pi)) (+ d1 d2))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "layer" "s" "draw" "")
          )
        )
        (if (= wtype 2)
          (progn
            (command "pline"
                     p29
                     p28
                     "w"
                     0.3
                     ""
                     p27
                     p26
                     p25
                     p24
                     "arc"
                     "radius"
                     r
                     p23
                     "line"
                     p30
                     (polar p30 rot c)
                     p12
                     p11
                     p7
                     "arc"
                     "radius"
                     r
                     p6
                     "line"
                     p5
                     p4
                     p3
                     p2
                     p1
                     "c"
            )
            (setq grp0 (ssadd (entlast)))
            (command "pline"
                     (polar p13 (+ rot (* -0.5 pi)) (* sca 2.0))
                     (polar p13 (+ rot pi) (* sca 2.0))
                     p14
                     p19
                     (polar p19 rot c)
                     "c"
            )
            (setq grp1 (ssadd (entlast)))
            (command "mirror" grp0 "" start p61 "n")
            (setq grp0 (ssadd (entlast) grp0))
            (command "mirror" grp1 "" start p61 "n")
            (setq grp1 (ssadd (entlast) grp1))
            (command "pline" p17 p18 p30 p19 "c")
            (setq grp2 (ssadd (entlast)))
            (command "mirror" grp2 "" start p61 "n")
            (setq grp2 (ssadd (entlast) grp2))
            (command "pline" p11 p15 "")
            (setq grp2 (ssadd (entlast) grp2))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp2 (ssadd (entlast) grp2))
            (command "pline"
                     p13
                     p14
                     p22
                     "arc"
                     "radius"
                     r
                     p21
                     "line"
                     p20
                     p43
                     "arc"
                     "radius"
                     wr1
                     p36
                     "line"
                     p10
                     p9
                     "arc"
                     "radius"
                     r
                     p8
                     "line"
                     p17
                     (polar p17 (+ rot pi) c)
                     "c"
            )
            (setq grp3 (ssadd (entlast)))
            (command "mirror" grp3 "" start p61 "n")
            (setq grp3 (ssadd (entlast) grp3))
            (command "pline"
                     p15
                     (polar p16 rot (* sca 2.0))
                     (polar p16 (+ rot (* 0.5 pi)) (* sca 2.0))
                     (polar p18 (+ rot pi) c)
                     p18
                     "c"
            )
            (setq grp3 (ssadd (entlast) grp3))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp3 (ssadd (entlast) grp3))
            (command "pline" p5 p10 "")
            (setq grp10 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))
            (command "pline" p20 p25 "")
            (setq grp10 (ssadd (entlast) grp10))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))

            (command "pline" p1 p29 p50 p49 "cl")
            (setq grp14 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p51 p52 "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p2 start "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p28 (polar start (+ rot pi) l) "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))

            (command "pline"           p43          p42         p41        p40    "arc"
                     "radius"           wr2          p39         "line"        p38    p37
                     p36    ""
                    )
            (setq grp5 (ssadd (entlast)))
            (command "mirror" grp5 "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))
            (bodraw)
            (setq e3 (entlast))
            (command "mirror" grp20 "" start p61 "n")
            (setq e3 (entnext E3))
            (while e3
              (setq grp20 (ssadd e3 grp20))
              (setq e3 (entnext e3))
            )

            (command "layer" "set" "bhatch" "")
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp0 "")
            (setq grp6 (ssadd (entlast)))
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp1 "")
            (setq grp6 (ssadd (entlast) grp6))
            (command "hatch" "ansi31" (* 1.0 sca) 90 grp3 "")
            (setq grp7 (ssadd (entlast)))

            (command "layer" "s" "center" "")
            (command "line"
                     (polar start rot (* sca 3.0))
                     (polar start (+ rot pi) (+ l (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     (polar ppp rot (* sca 3.0))
                     (polar ppp (+ rot pi) (+ (* 2.0 c) (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "arc" p54 p55 p53)
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     pcenter
                     (polar pcenter (+ rot (* -0.5 pi)) (+ d1 d2))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "layer" "s" "draw" "")
          )
        )

        (if (= wtype 3)
          (progn
            (command "pline"
                     p29
                     p28
                     "w"
                     0.3
                     ""
                     p27
                     p26
                     (polar p25 (+ rot pi) r)
                     "arc"
                     "radius"
                     r
                     (polar p25 (+ rot (* 0.5 pi)) r)
                     "line"
                     p19
                     pn9
                     pn8
                     p18
                     p17
                     p16
                     p15
                     p14
                     p13
                     (polar p12 (+ rot (* -0.5 pi)) (* sca 1.0))
                     (polar p12 rot (* sca 1.0))
                     p11
                     (polar p5 (+ rot (* 0.5 pi)) r)
                     "arc"
                     "radius"
                     r
                     (polar p5 rot r)
                     "line"
                     p4
                     p3
                     p2
                     p1
                     "c"
            )
            (setq grp0 (ssadd (entlast)))
            (command "mirror" grp0 "" start p61 "n")
            (setq grp0 (ssadd (entlast) grp0))
            (command "pline"
                     p44
                     p43
                     "arc"
                     "radius"
                     wr1
                     p36
                     "line"
                     p35
                     p48
                     p12
                     (polar p13 (+ rot (* 0.5 pi)) (* sca 1.0))
                     (polar p13 (+ rot pi) (* sca 1.0))
                     p14
                     p47
                     p46
                     p45
                     pn3
                     pn2
                     "c"
            )
            (setq grp3 (ssadd (entlast)))
            (command "mirror" grp3 "" start p61 "n")
            (setq grp3 (ssadd (entlast) grp3))
            (command "pline" p11 p35 "")
            (setq grp10 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))

            (command "pline" p1 p29 p50 p49 "cl")
            (setq grp14 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p51 p52 "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p2 start "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p28 (polar start (+ rot pi) l) "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))

            (command "pline" p19 p44 "")
            (setq grp4 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p18 p45 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p17 p46 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p16 p47 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn8 p19 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn3 p44 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline"
                     p14
                     (polar p46
                            (+ rot (* -0.5 pi))
                            (- (- (/ d4 2.0) (* sca 2.0)) (/ dist1 2.0))
                     )
                     ""
            )
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn1 pn5 pn6 pn10 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn2 pn1 pn4 pn3 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn8 pn7 pn10 pn9 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn2 p46 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn9 p17 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))

            (command "pline"           p43          p42         p41        p40    "arc"
                     "radius"           wr2          p39         "line"        p38    p37
                     p36    ""
                    )
            (setq grp5 (ssadd (entlast)))
            (command "mirror" grp5 "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))

            (command "layer" "set" "bhatch" "")
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp0 "")
            (setq grp6 (ssadd (entlast)))
            (command "hatch" "ansi31" (* 1.0 sca) 90 grp3 "")
            (setq grp7 (ssadd (entlast)))

            (command "layer" "s" "center" "")
            (command "line"
                     (polar start rot (* sca 3.0))
                     (polar start (+ rot pi) (+ l (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     (polar p15 rot (* sca 3.0))
                     (polar p15 (+ rot pi) (+ l0 (* sca 5.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "arc" p54 p55 p53)
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     pcenter
                     (polar pcenter (+ rot (* -0.5 pi)) (+ d1 d2))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "layer" "s" "draw" "")
          )
        )
        (if (= wtype 4)
          (progn
            (command "pline"           p25          "w"         0.3        ""     p26
                     "arc"  "radius"          nn         p27        "line" p28
                     p29    p1           p2          p3         "arc"        "radius"
                     nn            p4           "line" p5         ""
                    )
            (setq grp0 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp0 (ssadd (entlast) grp0))
            (command "pline" p25     p24     "arc"   "radius"
                     r             p23     "line"  p33     p34     p7
                     "arc"   "radius"             r             p6             "line"
                     p5             ""
                    )
            (setq grp0 (ssadd (entlast) grp0))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp0 (ssadd (entlast) grp0))
            (command "pline"
                     p32
                     p22
                     "arc"
                     "radius"
                     r
                     p21
                     "line"
                     p20
                     pn9
                     pn8
                     p18
                     p17
                     p16
                     p15
                     p14
                     p13
                     (polar p12 (+ rot (* -0.5 pi)) (* sca 1.0))
                     (polar p12 rot (* sca 1.0))
                     p11
                     p10
                     p9
                     "arc"
                     "radius"
                     r
                     p8
                     "line"
                     p31
                     "c"
            )
            (setq grp1 (ssadd (entlast)))
            (command "mirror" grp1 "" start p61 "n")
            (setq grp1 (ssadd (entlast) grp1))
            (command "pline" p31 p32 p33 p34 "c")
            (setq grp2 (ssadd (entlast)))
            (command "mirror" grp2 "" start p61 "n")
            (setq grp2 (ssadd (entlast) grp2))
            (command "pline"
                     p44
                     p43
                     "arc"
                     "radius"
                     wr1
                     p36
                     "line"
                     p35
                     p48
                     p12
                     (polar p13 (+ rot (* 0.5 pi)) (* sca 1.0))
                     (polar p13 (+ rot pi) (* sca 1.0))
                     p14
                     p47
                     p46
                     p45
                     pn3
                     pn2
                     "c"
            )
            (setq grp3 (ssadd (entlast)))
            (command "mirror" grp3 "" start p61 "n")
            (setq grp3 (ssadd (entlast) grp3))
            (command "pline" p11 p35 "")
            (setq grp10 (ssadd (entlast)))
            (command "mirror" grp10 "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))

            (command "pline" p1 p29 p50 p49 "cl")
            (setq grp14 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p51 p52 "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p2 start "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p28 (polar start (+ rot pi) l) "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))

            (command "pline" p19 p44 "")
            (setq grp4 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p18 p45 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p17 p46 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" p16 p47 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn8 p19 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn3 p44 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline"
                     p14
                     (polar p46
                            (+ rot (* -0.5 pi))
                            (- (- (/ d4 2.0) (* sca 2.0)) (/ dist1 2.0))
                     )
                     ""
            )
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn1 pn5 pn6 pn10 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn2 pn1 pn4 pn3 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "pline" pn8 pn7 pn10 pn9 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn2 p46 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))
            (command "line" pn9 p17 "")
            (setq grp4 (ssadd (entlast) grp4))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp4 (ssadd (entlast) grp4))

            (command "zoom" "all")
            (command "pline"
                     p43
                     p58
                     p59
                     p40
                     "arc"
                     "radius"
                     wr2
                     p39
                     "line"
                     p60
                     (polar p58 rot w_b)
                     p36
                     ""
            )
            (setq grp5 (ssadd (entlast)))
            (command "mirror" grp5 "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))
            (command "pline" p10     "arc"   "radius"             r
                     p56     "line"  p57     "arc"   "radius"
                     r             p4             ""
                    )
            (setq grp05 (ssadd (entlast)))
            (setq grp5 (ssadd (entlast) grp5))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))
            (command "mirror"
                     (entlast)
                     ""
                     pcenter
                     (polar pcenter (+ rot (* 0.5 pi)) 1.0)
                     "n"
            )
            (setq grp5 (ssadd (entlast) grp5))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))
            (command "pline" p5 p10 "")
            (command "zoom" "window" p3 p9)
            (command "trim"
                     grp05
                     ""
                     (polar p5 (+ rot (* 0.5 pi)) (* sca 10))
                     ""
            )
            (setq grp5 (ssadd (entlast) grp5))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))
            (command "mirror"
                     (entlast)
                     ""
                     pcenter
                     (polar pcenter (+ rot (* 0.5 pi)) 1.0)
                     "n"
            )
            (setq grp5 (ssadd (entlast) grp5))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))


            (command "layer" "set" "bhatch" "")
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp0 "")
            (setq grp6 (ssadd (entlast)))
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp1 "")
            (setq grp6 (ssadd (entlast) grp6))
            (command "hatch" "ansi31" (* 1.0 sca) 90 grp3 "")
            (setq grp7 (ssadd (entlast)))

            (command "layer" "s" "center" "")
            (command "line"
                     (polar start rot (* sca 3.0))
                     (polar start (+ rot pi) (+ l (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     (polar p30 rot (* sca 3.0))
                     (polar p30 (+ rot pi) (+ c (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     (polar p15 rot (* sca 3.0))
                     (polar p15 (+ rot pi) (+ l0 (* sca 5.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "arc" p54 p55 p53)
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     pcenter
                     (polar pcenter (+ rot (* -0.5 pi)) (+ d1 d2))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "layer" "s" "draw" "")
          )
        )
        (if (= wtype 5)
          (progn
            (command "pline"           p29          p28         "w"        0.3    ""
                     p27    p26           p25          p24         "arc"        "radius"
                     r            p23           "line" p33         p34        p7     "arc"
                     "radius"           r          p6         "line"        p5     p4
                     p3            p2           p1          "c"
                    )
            (setq grp0 (ssadd (entlast)))
            (command "mirror" grp0 "" start p61 "n")
            (setq grp0 (ssadd (entlast) grp0))
            (command "pline" p9             "arc"   "radius"             r
                     p8             "line"  p31     p32     p22     "arc"
                     "radius"             r             p21     ""
                    )
            (setq grp1 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp1 (ssadd (entlast) grp1))
            (command "pline" p20 "arc" "radius" (+ wr1 w_f) p21 "")
            (setq grp1 (ssadd (entlast) grp1))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp1 (ssadd (entlast) grp1))
            (command "pline" p9 "arc" "radius" (+ wr1 w_f) p10 "")
            (setq grp1 (ssadd (entlast) grp1))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp1 (ssadd (entlast) grp1))
            (command "pline" p20 p43 "arc" "radius" wr1        p36 "line" p10
                     "")
            (setq grp1 (ssadd (entlast) grp1))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp1 (ssadd (entlast) grp1))
            (command "pline" p31 p32 p33 p34 "c")
            (setq grp2 (ssadd (entlast)))
            (command "mirror" grp2 "" start p61 "n")
            (setq grp2 (ssadd (entlast) grp2))
            (command "pline" p5 p10 "")
            (setq grp10 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))
            (command "pline" p20 p25 "")
            (setq grp10 (ssadd (entlast) grp10))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp10 (ssadd (entlast) grp10))

            (command "pline" p1 p29 p50 p49 "cl")
            (setq grp14 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p51 p52 "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p2 start "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))
            (command "pline" p28 (polar start (+ rot pi) l) "")
            (setq grp14 (ssadd (entlast) grp14))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp14 (ssadd (entlast) grp14))

            (command "pline"           p43          p42         p41        p40    "arc"
                     "radius"           wr2          p39         "line"        p38    p37
                     p36    ""
                    )
            (setq grp5 (ssadd (entlast)))
            (command "mirror" grp5 "" start p61 "n")
            (setq grp5 (ssadd (entlast) grp5))

            (command "layer" "set" "bhatch" "")
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp0 "")
            (setq grp6 (ssadd (entlast)))
            (command "hatch" "ansi31" (* 1.0 sca) 0 grp1 "")
            (setq grp6 (ssadd (entlast) grp6))

            (command "layer" "s" "center" "")
            (command "line"
                     (polar start rot (* sca 3.0))
                     (polar start (+ rot pi) (+ l (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast)))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     (polar p30 rot (* sca 3.0))
                     (polar p30 (+ rot pi) (+ c (* sca 3.0)))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "arc" p54 p55 p53)
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "line"
                     pcenter
                     (polar pcenter (+ rot (* -0.5 pi)) (+ d1 d2))
                     ""
            )
            (setq grp8 (ssadd (entlast) grp8))
            (command "mirror" (entlast) "" start p61 "n")
            (setq grp8 (ssadd (entlast) grp8))
            (command "layer" "s" "draw" "")
          )
        )
      )
    )

    (if        (= ch_s 1)
      (progn
        (setq
          mid_h1 (/ (sqrt (- (* d d) (* key_b key_b))) 2.0)
          mid_h2 (/ (sqrt (- (* (+ d (* 2.0 n1)) (+ d (* 2.0 n1)))
                             (* key_b key_b)
                          )
                    )
                    2.0
                 )
          p71         (polar        (polar start1 (+ rot (* 0.5 pi)) mid_h1)
                        (+ rot pi)
                        (/ key_b 2.0)
                 )
          p72         (polar        (polar start1 (+ rot (* 0.5 pi)) mid_h2)
                        (+ rot pi)
                        (/ key_b 2.0)
                 )
          p73         (polar
                   (polar start1 (+ rot (* 0.5 pi)) (+ (/ d 2.0) key_t1))
                   (+ rot pi)
                   (/ key_b 2.0)
                 )
          p74         (polar p73 rot key_b)
          p75         (polar p72 rot key_b)
          p76         (polar p71 rot key_b)
        )
        (if (= wtype 1)
          (progn
            (setq
              p77    (polar start1 (+ rot (* 0.5 pi)) (- (/ d3 2.0) nn))
              p78    (polar start1 (+ rot (* 0.5 pi)) (/ d3 2.0))
              p80    (polar start1 (+ rot (* 0.5 pi)) (- (/ d5 2.0) b))
              p81    (polar start1 (+ rot (* 0.5 pi)) (/ d5 2.0))
              p82    (polar start1 (+ rot (* 0.5 pi)) (- (/ dw 2.0) n2))
              p83    (polar start1 (+ rot (* 0.5 pi)) (/ dw 2.0))
              p84    (polar start1 (+ rot (* 0.5 pi)) (/ dd0 2.0))
              p85    (polar start1 (+ rot (* 0.5 pi)) (/ d2 2.0))
              p86    (polar p84 (+ rot (* 0.5 pi)) (/ d0 2.0))
              p87    (polar start1
                            (+ rot (* 0.5 pi))
                            (- (/ d5 2.0) (* sca 2.0))
                     )
              mid_l1 (/ (sqrt (- (* d4 d4) (* dist2 dist2))) 2.0)
              p88    (polar (polar p87 (+ rot (* 0.75 pi)) (/ dist2 2.0))
                            (+ rot (* 0.25 pi))
                            mid_l1
                     )
              p89    (polar (polar p87 (+ rot (* 0.75 pi)) (/ dist2 2.0))
                            (+ rot (* -0.75 pi))
                            mid_l1
                     )
              p90    (polar (polar p87 (+ rot (* -0.25 pi)) (/ dist2 2.0))
                            (+ rot (* 0.25 pi))
                            mid_l1
                     )
              p91    (polar (polar p87 (+ rot (* -0.25 pi)) (/ dist2 2.0))
                            (+ rot (* -0.75 pi))
                            mid_l1
                     )
            )
            (command "pline"
                     p71
                     "arc"
                     "radius"
                     (/ d 2.0)
                     (polar start1 (+ rot pi) (/ d 2.0))
                     p76
                     ""
            )
            (setq grp15 (ssadd (entlast)))
            (command "pline"
                     p72
                     "arc"
                     "radius"
                     (+ (/ d 2.0) n1)
                     (polar start1 (+ rot pi) (+ (/ d 2.0) n1))
                     p75
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline" p71 p72 p73 p74 p75 p76 "")
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p77
                     "arc"
                     "radius"
                     (- (/ d3 2.0) nn)
                     (polar start1 (+ rot pi) (- (/ d3 2.0) nn))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p78
                     "arc"
                     "radius"
                     (/ d3 2.0)
                     (polar start1 (+ rot pi) (/ d3 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p80
                     "arc"
                     "radius"
                     (- (/ d5 2.0) b)
                     (polar start1 (+ rot pi) (- (/ d5 2.0) b))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p81
                     "arc"
                     "radius"
                     (/ d5 2.0)
                     (polar start1 (+ rot pi) (/ d5 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p82
                     "arc"
                     "radius"
                     (- (/ dw 2.0) nn)
                     (polar start1 (+ rot pi) (- (/ dw 2.0) nn))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p83
                     "arc"
                     "radius"
                     (/ dw 2.0)
                     (polar start1 (+ rot pi) (/ dw 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p86
                     "arc"
                     "radius"
                     (/ d0 2.0)
                     (polar p86 (+ rot (* -0.5 pi)) d0)
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )

            (command "pline"
                     (polar p87 (+ rot (* 0.5 pi)) (/ d4 2.0))
                     "arc"
                     "radius"
                     (/ d4 2.0)
                     (polar p87 (+ rot (* -0.5 pi)) (/ d4 2.0))
                     "cl"
            )
            (setq grp16 (ssadd (entlast)))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp16 (ssadd (entlast) grp16))
            )
            (setq e0 (entlast))
            (setq jjj 0)
            (repeat nm
              (command
                "zoom"
                "window"
                (polar
                  (polar start1
                         (+ rot (+ (* jjj (/ (* 2.0 pi) nm)) (* 0.5 pi)))
                         (- (/ d5 2.0) (* sca 2.0))
                  )
                  (+ rot (* -0.25 pi))
                  d4
                )
                (polar
                  (polar start1
                         (+ rot (+ (* jjj (/ (* 2.0 pi) nm)) (* 0.5 pi)))
                         (- (/ d5 2.0) (* sca 2.0))
                  )
                  (+ rot (* 0.75 pi))
                  d4
                )
              )
              (command
                "trim"
                grp16
                ""
                (polar start1
                       (+ rot (+ (* jjj (/ (* 2.0 pi) nm)) (* 0.5 pi)))
                       (/ d5 2.0)
                )
                ""
              )
              (setq grp15 (ssadd (entlast) grp15))
              (setq jjj (+ jjj 1))
            )
            (setq e0 (ENTNEXT E0))
            (while e0
              (setq grp15 (ssadd e0 grp15))
              (setq e0 (ENTNEXT E0))
            )
            (command "zoom" "all")
            (command "arc"
                     (polar p87 rot (/ (- d4 dist1) 2.0))
                     (polar p87 (+ rot (* 0.5 pi)) (/ (- d4 dist1) 2.0))
                     (polar p87 (+ rot (* -0.5 pi)) (/ (- d4 dist1) 2.0))
            )
            (setq grp17 (ssadd (entlast)))
            (command "pline" p88 p89 "")
            (setq grp17 (ssadd (entlast) grp17))
            (command "pline" p90 p91 "")
            (setq grp17 (ssadd (entlast) grp17))
            (command "circle" p87 "D" d4)
            (setq grp17 (ssadd (entlast) grp17))
            (setq e1 (entlast))
            (command "array" grp17 "" "p" start1 nm "" "n")
            (setq e1 (ENTNEXT E1))
            (while e1
              (setq grp17 (ssadd e1 grp17))
              (setq e1 (ENTNEXT E1))
            )
            (command "layer" "s" "center" "")
            (command "line"
                     (polar start1 rot (+ (/ dw 2.0) 4.0))
                     (polar start1 (+ rot pi) (+ (/ dw 2.0) 4.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command
              "line"
              (polar start1 (+ rot (* 0.5 pi)) (+ (/ dw 2.0) 4.0))
              (polar start1 (+ rot (* -0.5 pi)) (+ (/ dw 2.0) 4.0))
              ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "circle" start1 (/ dd0 2.0))
            (setq grp15 (ssadd (entlast) grp15))
            (command "circle" start1 (/ d2 2.0))
            (setq grp15 (ssadd (entlast) grp15))
            (command "line"
                     (polar p86 (+ rot (* 0.5 pi)) 3.0)
                     (polar p86 (+ rot (* -0.5 pi)) (+ d0 3.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )
            (command "line"
                     (polar p87 rot (+ (/ d4 2.0) 3.0))
                     (polar p87 (+ rot pi) (+ (/ d4 2.0) 3.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )
            (command "line"
                     (polar p87 (+ rot (* 0.5 pi)) (+ (/ d4 2.0) 3.0))
                     (polar p87 (+ rot (* -0.5 pi)) (+ (/ d4 2.0) 3.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )
            (command "layer" "s" "draw" "")
          )
        )
        (if (= wtype 2)
          (progn
            (BODRAW)
            (setq
              p77 (polar start1 (+ rot (* 0.5 pi)) (- (/ d3 2.0) nn))
              p78 (polar start1 (+ rot (* 0.5 pi)) (/ d3 2.0))
              p80 (polar start1
                         (+ rot (* 0.5 pi))
                         (- (cadr p10) (cadr start1))
                  )
              p81 (polar start1 (+ rot (* 0.5 pi)) (/ d5 2.0))
              p82 (polar start1 (+ rot (* 0.5 pi)) (- (/ dw 2.0) n2))
              p83 (polar start1 (+ rot (* 0.5 pi)) (/ dw 2.0))
              p85 (polar start1 (+ rot (* 0.5 pi)) (/ d2 2.0))
              p86 (polar start1 (+ rot (* 0.5 pi)) (- (/ df2 2.0) a))
            )
            (command "pline"
                     p71
                     "arc"
                     "radius"
                     (/ d 2.0)
                     (polar start1 (+ rot pi) (/ d 2.0))
                     p76
                     ""
            )
            (setq grp15 (ssadd (entlast)))
            (command "pline"
                     p72
                     "arc"
                     "radius"
                     (+ (/ d 2.0) n1)
                     (polar start1 (+ rot pi) (+ (/ d 2.0) n1))
                     p75
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline" p71 p72 p73 p74 p75 p76 "")
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p77
                     "arc"
                     "radius"
                     (- (/ d3 2.0) nn)
                     (polar start1 (+ rot pi) (- (/ d3 2.0) nn))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p78
                     "arc"
                     "radius"
                     (/ d3 2.0)
                     (polar start1 (+ rot pi) (/ d3 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command
              "pline"
              p80
              "arc"
              "radius"
              (- (cadr p10) (cadr start1))
              (polar start1 (+ rot pi) (- (cadr p10) (cadr start1)))
              "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p82
                     "arc"
                     "radius"
                     (- (/ dw 2.0) nn)
                     (polar start1 (+ rot pi) (- (/ dw 2.0) nn))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p83
                     "arc"
                     "radius"
                     (/ dw 2.0)
                     (polar start1 (+ rot pi) (/ dw 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p86
                     "arc"
                     "radius"
                     (- (/ df2 2.0) a)
                     (polar start1 (+ rot pi) (- (/ df2 2.0) a))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     (polar p81 (+ rot (* 0.5 pi)) (/ bdd0 2.0))
                     "arc"
                     "radius"
                     (/ bdd0 2.0)
                     (polar p81 (+ rot pi) (/ bdd0 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )
            (setq brr2 (/ bdd0 (sqrt 3.0)))
            (setq pbs1 (polar p81 (+ rot (* 0.5 pi)) brr2)
                  pbs2 (polar p81 (+ rot (* (/ 5.0 6.0) pi)) brr2)
                  pbs3 (polar p81 (+ rot (* (/ 7.0 6.0) pi)) brr2)
                  pbs4 (polar p81 (+ rot (* -0.5 pi)) brr2)
                  pbs5 (polar p81 (+ rot (* (/ -1.0 6.0) pi)) brr2)
                  pbs6 (polar p81 (+ rot (* (/ 1.0 6.0) pi)) brr2)
            )
            (command "pline" pbs1 pbs2 pbs3 pbs4 pbs5 pbs6 "cl")
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )

            (command "layer" "s" "center" "")
            (command "line"
                     (polar start1 rot (+ (/ dw 2.0) 4.0))
                     (polar start1 (+ rot pi) (+ (/ dw 2.0) 4.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command
              "line"
              (polar start1 (+ rot (* 0.5 pi)) (+ (/ dw 2.0) 4.0))
              (polar start1 (+ rot (* -0.5 pi)) (+ (/ dw 2.0) 4.0))
              ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "circle" start1 (/ d5 2.0))
            (setq grp15 (ssadd (entlast) grp15))
            (command "circle" start1 (/ d2 2.0))
            (setq grp15 (ssadd (entlast) grp15))
            (command "line"
                     (polar p81 (+ rot (* 0.5 pi)) (+ (/ d4 2.0) 3.0))
                     (polar p81 (+ rot (* -0.5 pi)) (+ (/ d4 2.0) 3.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )
            (command "layer" "s" "draw" "")
          )
        )
        (if (= wtype 3)
          (progn
            (setq
              p77    (polar start1 (+ rot (* 0.5 pi)) (- (/ d3 2.0) nn))
              p78    (polar start1 (+ rot (* 0.5 pi)) (/ d3 2.0))
              p81    (polar start1 (+ rot (* 0.5 pi)) (/ d5 2.0))
              p82    (polar start1 (+ rot (* 0.5 pi)) (- (/ dw 2.0) n2))
              p83    (polar start1 (+ rot (* 0.5 pi)) (/ dw 2.0))
              p85    (polar start1 (+ rot (* 0.5 pi)) (/ d2 2.0))
              p87    (polar start1
                            (+ rot (* 0.5 pi))
                            (- (/ d5 2.0) (* sca 2.0))
                     )
              mid_l1 (/ (sqrt (- (* d4 d4) (* dist2 dist2))) 2.0)
              p88    (polar (polar p87 (+ rot (* 0.75 pi)) (/ dist2 2.0))
                            (+ rot (* 0.25 pi))
                            mid_l1
                     )
              p89    (polar (polar p87 (+ rot (* 0.75 pi)) (/ dist2 2.0))
                            (+ rot (* -0.75 pi))
                            mid_l1
                     )
              p90    (polar (polar p87 (+ rot (* -0.25 pi)) (/ dist2 2.0))
                            (+ rot (* 0.25 pi))
                            mid_l1
                     )
              p91    (polar (polar p87 (+ rot (* -0.25 pi)) (/ dist2 2.0))
                            (+ rot (* -0.75 pi))
                            mid_l1
                     )
            )
            (command "pline"
                     p71
                     "arc"
                     "radius"
                     (/ d 2.0)
                     (polar start1 (+ rot pi) (/ d 2.0))
                     p76
                     ""
            )
            (setq grp15 (ssadd (entlast)))
            (command "pline"
                     p72
                     "arc"
                     "radius"
                     (+ (/ d 2.0) n1)
                     (polar start1 (+ rot pi) (+ (/ d 2.0) n1))
                     p75
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline" p71 p72 p73 p74 p75 p76 "")
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p77
                     "arc"
                     "radius"
                     (- (/ d3 2.0) nn)
                     (polar start1 (+ rot pi) (- (/ d3 2.0) nn))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p78
                     "arc"
                     "radius"
                     (/ d3 2.0)
                     (polar start1 (+ rot pi) (/ d3 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p81
                     "arc"
                     "radius"
                     (/ d5 2.0)
                     (polar start1 (+ rot pi) (/ d5 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p82
                     "arc"
                     "radius"
                     (- (/ dw 2.0) nn)
                     (polar start1 (+ rot pi) (- (/ dw 2.0) nn))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "pline"
                     p83
                     "arc"
                     "radius"
                     (/ dw 2.0)
                     (polar start1 (+ rot pi) (/ dw 2.0))
                     "cl"
            )
            (setq grp15 (ssadd (entlast) grp15))

            (command "pline"
                     (polar p87 (+ rot (* 0.5 pi)) (/ d4 2.0))
                     "arc"
                     "radius"
                     (/ d4 2.0)
                     (polar p87 (+ rot (* -0.5 pi)) (/ d4 2.0))
                     "cl"
            )
            (setq grp16 (ssadd (entlast)))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp16 (ssadd (entlast) grp16))
            )
            (setq e0 (entlast))
            (setq jjj 0)
            (repeat nm
              (command
                "zoom"
                "window"
                (polar
                  (polar start1
                         (+ rot (+ (* jjj (/ (* 2.0 pi) nm)) (* 0.5 pi)))
                         (- (/ d5 2.0) (* sca 2.0))
                  )
                  (+ rot (* -0.25 pi))
                  d4
                )
                (polar
                  (polar start1
                         (+ rot (+ (* jjj (/ (* 2.0 pi) nm)) (* 0.5 pi)))
                         (- (/ d5 2.0) (* sca 2.0))
                  )
                  (+ rot (* 0.75 pi))
                  d4
                )
              )
              (command
                "trim"
                grp16
                ""
                (polar start1
                       (+ rot (+ (* jjj (/ (* 2.0 pi) nm)) (* 0.5 pi)))
                       (/ d5 2.0)
                )
                ""
              )
              (setq grp15 (ssadd (entlast) grp15))
              (setq jjj (+ jjj 1))
            )
            (setq e0 (ENTNEXT E0))
            (while e0
              (setq grp15 (ssadd e0 grp15))
              (setq e0 (ENTNEXT E0))
            )
            (command "zoom" "all")
            (command "arc"
                     (polar p87 rot (/ (- d4 dist1) 2.0))
                     (polar p87 (+ rot (* 0.5 pi)) (/ (- d4 dist1) 2.0))
                     (polar p87 (+ rot (* -0.5 pi)) (/ (- d4 dist1) 2.0))
            )
            (setq grp17 (ssadd (entlast)))
            (command "pline" p88 p89 "")
            (setq grp17 (ssadd (entlast) grp17))
            (command "pline" p90 p91 "")
            (setq grp17 (ssadd (entlast) grp17))
            (command "circle" p87 "D" d4)
            (setq grp17 (ssadd (entlast) grp17))
            (setq e1 (entlast))
            (command "array" grp17 "" "p" start1 nm "" "n")
            (setq e1 (ENTNEXT E1))
            (while e1
              (setq grp17 (ssadd e1 grp17))
              (setq e1 (ENTNEXT E1))
            )
            (command "layer" "s" "center" "")
            (command "line"
                     (polar start1 rot (+ (/ dw 2.0) 4.0))
                     (polar start1 (+ rot pi) (+ (/ dw 2.0) 4.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command
              "line"
              (polar start1 (+ rot (* 0.5 pi)) (+ (/ dw 2.0) 4.0))
              (polar start1 (+ rot (* -0.5 pi)) (+ (/ dw 2.0) 4.0))
              ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (command "circle" start1 (/ d2 2.0))
            (setq grp15 (ssadd (entlast) grp15))
            (command "line"
                     (polar p87 rot (+ (/ d4 2.0) 3.0))
                     (polar p87 (+ rot pi) (+ (/ d4 2.0) 3.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )
            (command "line"
                     (polar p87 (+ rot (* 0.5 pi)) (+ (/ d4 2.0) 3.0))
                     (polar p87 (+ rot (* -0.5 pi)) (+ (/ d4 2.0) 3.0))
                     ""
            )
            (setq grp15 (ssadd (entlast) grp15))
            (repeat nm
              (command "array" (entlast) "" "p" start1 2 (/ 360 nm) "")
              (setq grp15 (ssadd (entlast) grp15))
            )
            (command "layer" "s" "draw" "")
          )
        )
        (if (= wtype 4)
          (progn
            (setq
              p78    (polar start1 (+ rot (* 0.5 pi)) (/ d3 2.0))
              p80    (polar start1 (+ rot (* 0.5 pi)) (- (/ d5 2.0) b))
              p81    (polar start1 (+ rot (* 0.5 pi)) (/ d5 2.0))
              p82    (polar start1 (+ rot (* 0.5 pi)) (- (/ dw 2.0) n2))
              p83    (polar start1 (+ rot (* 0.5 pi)) (/ dw 2.0))
              p84    (polar start1 (+ rot (* 0.5 pi)) (/ dd0 2.0))
              p85    (polar start1 (+ rot (* 0.5 pi)) (/ d2 2.0))
              p86    (polar p84 (+ rot (* 0.5 pi)) (/ d0 2.0))
              p87    (polar start1
                            (+ rot (* 0.5 pi))
                            (- (/ d5 2.0) (* sca 2.0))
                     )
              mid_l1 (/ (sqrt (- (* d4 d4) (* dist2 dist2))) 2.0)
              p88    (polar (polar p87 (+ rot (* 0.75 pi)) (/ dist2 2.0))
                            (+ rot (* 0.25 pi))
                            mid_l1
                     )
              p89    (polar (polar p87 (+ rot (* 0.75 pi)) (/ dist2 2.0))
                            (+ rot (* -0.75 pi))
                            mid_l1
                     )
              p90    (polar (polar p87 (+ rot (* -0.25 pi)) (/ dist2 2.0))
                            (+ rot (* 0.25 pi))
                            mid_l1
                     )
              p91    (polar (polar p87 (+ rot (* -0.25 pi)) (/ dist2 2.0))
                            (+ rot (* -0.75 pi))
                            mid_l1
                     )
              rrr    (- (/ d5 2.0) b)
              ss     (* 0.8 w_f)
              mid_l2 (sqrt (- (* rrr rrr)
                              (* (+ (/ ss 2.0) r) (+ (/ ss 2.0) r))
                           )
                     )
              mid2   (sqrt (- (* rrr rrr) (* (/ ss 2.0) (/ ss 2.0))))
              alph2  (atan (/ (+ (/ ss 2.0) r) mid_l2))
              mid_l3 (sqrt (- (* (/ d3 2.0) (/ d3 2.0))
                              (* (+ (/ ss 2.0) r) (+ (/ ss 2.0) r))
                           )
                     )
              mid3   (sqrt (- (* (/ d3 2.0) (/ d3 2.0))
                              (* (/ ss 2.0) (/ ss 2.0))
                           )
                     )
              alph3  (atan (/ (+ (/ ss 2.0) r) mid_l3))
              pr1    (polar start1 (+ rot (- (* 0.5 pi) alph2)) rrr)
              pr2    (polar (polar (polar start1 (+ rot (* 0.5 pi)) mid2)
                                   rot
                                   (/ ss 2.0)
                            )
                            (+ rot (* -0.5 pi))
                            r
                     )
              pr3    (polar pr2
                            (+ rot (* -0.5 pi))
                            (- (- mid2 mid3) (* r 2.0))
                     )
              pr4    (polar start1 (+ rot (- (* 0.5 pi) alph3)) (/ d3 2.0))
              pr8    (polar
                       start1
                       (+
发表于 2002-12-2 10:00 | 显示全部楼层

你的代码实在太长了

要仔细分析你的代码需要很长时间,而且代码很大部分是没有问题的。你认为你的程序哪部分真正需要分析?能不能仅将部分代码帖出来?
发表于 2002-12-8 21:06 | 显示全部楼层

呵呵

能写出这样的程序,还有什么要分析的呢?
你都应该可以给别人分析了吧!
呵呵
发表于 2002-12-11 17:03 | 显示全部楼层

呵呵,不会简化以下你的程序吗?

呵呵,不会简化以下你的程序吗?
相同的或是近似的.做“子程序”
发表于 2002-12-22 13:37 | 显示全部楼层

晕,这是不是用来画裹脚布的呀!

发表于 2002-12-29 14:43 | 显示全部楼层

你的程序拷完了吗,

怎么了,不知道你的程序写完了没有呀,
拷在lisp编辑器上去看看,
根本没有写完呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 05:11 , Processed in 0.349686 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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