明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1441|回复: 1

请教能否把下面画二线的程序改为四线,谢谢!

[复制链接]
发表于 2010-4-22 17:16:00 | 显示全部楼层 |阅读模式

(defun C:2x(/ th ss bp sp ep pt1 pt2 pt3 pt4 n tmp bbp ssp)
  (setq old_err *error*)
  (setvar "CMDECHO" 0)
  (setvar "BLIPMODE" 0)
  (command "layer" "m" "wall" "c" "w" "wall" "")
  (setvar "osmode" 32)

  (if (= thw nil) (setq thw 240.0))
  (setq th (getreal (strcat "\n外墙厚<" (rtos thw 2 0) ">:")))
    (if (= th nil) (setq th thw))
    (setq thw th)

  (if (= thlsw nil) (setq thlsw 120.0))
  (setq thls (getreal (strcat "\n轴线外的墙厚<" (rtos thlsw 2 0) ">:")))
    (if (= thls nil) (setq thls thlsw))           ;thls轴线外墙厚
    (setq thlsw thls)

  (setq thrx (- th thls))                         ;thrx轴线内墙厚

  (setq bp (getpoint "\n第一点: "))
  (setq bbp bp)                                   ;bbp记录下第一点
  (if (= nil bp) (quit))
  (setq sp (getpoint bp "\n下一点(注意:按顺时针): "))
  (setq ssp sp)                                   ;ssp记录下第二点
  (setvar "osmode" 0)
  (if (= nil sp) (quit))
  (setq n 0 tmp 0)         ;n=0为第一条线  ;tmp=0
  (while T
    (setq ang1 (angle bp sp))
    (setq dis1 (distance bp sp)) 
    (setq pt1 (polar bp (+ ang1 (* pi 0.5)) thls))
    (setq pt2 (polar pt1 ang1 dis1))
    (if (= 0 n)
      (command "line" pt1 pt2 "")
      (command "line" pt11 pt2 "")
    )
    (setq ss (ssadd))
    (setq ss (ssget "L"))
    (setq pt3 (polar bp (- ang1 (* pi 0.5)) thrx))
    (setq pt4 (polar pt3 ang1 dis1))
    (if (= 0 n)
      (command "line" pt3 pt4 "")
      (command "line" pt33 pt4 "")
    )
    (setq ss (ssadd (entlast) ss))
    (if (= 1 tmp) (command "erase" ss ""))
    (if (= nil ep)
      (progn
 (if (= 1 tmp)
   (progn
     (redraw)
     (quit)
   )
   (progn
     (setvar "osmode" 32)
     (initget "C")
     (setq ep (getpoint sp "\nC闭合/下一点: "))
     (setvar "osmode" 0)
   )
 )
 (if (= nil ep) (quit))
 (if (eq ep "C") (setq ep bbp))
 (setq ang2 (angle sp ep))
 (setq ang3 (- pi ang1))
 (setq ang4 (- (* pi 2) ang2))
 (setq ang3 (- (/ pi 2) (/ (- ang3 ang4) 2)))
 (setq dis2 (distance sp ep))
 (setq dis3 (* thls (tan ang3)))
 (setq dis4 (* thrx (tan ang3)))

 (setq pt1 (polar bp (+ ang1 (* pi 0.5)) thls))
 (setq pt2 (polar pt1 ang1 (+ dis1 dis3)))
 (command "erase" ss "")
 (if (= 0 n)
   (progn
     (command "line" pt1 pt2 "")
     (setq sss (ssadd))
     (setq sss (ssget "L"))
   )
   (command "line" pt11 pt2 "")
 )
 (setq pt3 (polar bp (- ang1 (* pi 0.5)) thrx))
 (setq pt4 (polar pt3 ang1 (- dis1 dis4)))
 (if (= 0 n)
   (progn
     (command "line" pt3 pt4 "")
     (setq sss (ssadd (entlast) sss))
   )
   (command "line" pt33 pt4 "")
 )
      )
      (progn
 (command "erase" sss "")
 (setq ang2 (angle sp ep))
 (setq ang3 (- pi ang1))
 (setq ang4 (- (* pi 2) ang2))
 (setq ang3 (- (/ pi 2) (/ (- ang3 ang4) 2)))
 (setq dis2 (distance sp ep))
 (setq dis3 (* thls (tan ang3)))
 (setq dis4 (* thrx (tan ang3)))
 (setq pt1 (polar bp (+ ang1 (* pi 0.5)) thls))
 (setq pt2 (polar pt1 ang1 (+ dis1 dis3)))
 (command "erase" ss "")
 (command "line" pt11 pt2 "")
 (setq ss (ssadd))
 (setq ss (ssget "L"))
 (setq pt3 (polar bp (- ang1 (* pi 0.5)) thrx))
 (setq pt4 (polar pt3 ang1 (- dis1 dis4)))
 (command "line" pt33 pt4 "")
 (setq ss (ssadd (entlast) ss))
 (command "line" pt2 pte1 "")
 (command "line" pt4 pte2 "")
 (setq tmp 1)
      )
    )
    (if (= 0 n)
      (setq pte1 pt2 pte2 pt4)
    )
    (setq pt11 pt2 pt33 pt4)
    (setq bp sp sp ep n 1)
    (if (equal bbp ep)
      (setq ep ssp)
      (setq ep nil)
    )
  )
  (princ) 
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2010-4-28 09:54:00 | 显示全部楼层
错误: no function definition: TAN
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 01:39 , Processed in 0.343926 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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