明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3442|回复: 4

[源码]测绘画房子

[复制链接]
发表于 2014-5-11 02:19 | 显示全部楼层 |阅读模式
本帖最后由 004 于 2014-5-11 02:37 编辑


  1. ;;;测绘画房子
  2. ;;;四个,三个,两个边长画房子
  3. ;;;wkq004  20140402
  4. (defun c:df (/ e pt pt2 pt3 ang fxang fxline)
  5.     (defun *error* (msg)
  6.     (princ "\n取消!")
  7.     (if e
  8.     (entdel e)
  9.   )
  10.     (command ".undo" "end")
  11.     (setq *error* nil)
  12.   )
  13.     (if (>= (setq os (getvar "osmode")) 16384)
  14.     (setvar "osmode" (- os 16384))
  15.     (setvar "osmode" (+ os 16384))
  16.   )

  17.   (setq pt (getpoint "\n拾取房角点:"))
  18.   (setq pt2 (getpoint pt "\n拾取房边方向线:"))
  19.   (entmake (list '(0 . "LINE")
  20.        '(100 . "AcDbEntity")
  21.        '(100 . "AcDbLine")
  22.        (cons 10 pt)
  23.        (cons 11 (polar pt (angle pt pt2) 1000))
  24.        '(62 . 1)
  25.        '(210 0. 0. 1.)
  26.        )
  27.     )
  28.   (setq dist (getdist pt "\n输入房边长:"))
  29.   (entdel (entlast))
  30.   (setq startpt pt)
  31.   (setq ang (angle pt pt2))
  32.   (command "line" pt (setq pt2 (polar pt ang dist)) "")
  33.   (setq co 2)
  34.   (setq elst '())
  35.   (setq elst (cons (entlast) elst))
  36.   (defun fxline  (pta ptb /)
  37.     (setq ang (angle pta ptb))
  38.     (cond ((and (>= ang 0) (< ang (/ pi 2)))
  39.      (setq fxang (+ ang (/ pi 2)))
  40.     ) ;_0-90
  41.     ((and (>= ang (/ pi 2)) (< ang pi))
  42.      (setq fxang (- ang (/ pi 2)))
  43.     ) ;_90-180
  44.     ((and (>= ang pi) (< ang (/ (* 3 pi) 2)))
  45.      (setq fxang (+ (- ang pi) (/ pi 2)))
  46.     ) ;_180-270
  47.     ((and (>= ang (/ (* 3 pi) 2)) (< ang (* 2 pi)))
  48.      (setq fxang (- (- ang pi) (/ pi 2)))
  49.     ) ;_270-0
  50.     )
  51.     (setq ptc (polar ptb fxang 1000))
  52.     (entmake (list '(0 . "LINE")
  53.        '(100 . "AcDbEntity")
  54.        '(100 . "AcDbLine")
  55.        (cons 10 ptb)
  56.        (cons 11 ptc)
  57.        '(62 . 1)
  58.        '(210 0. 0. 1.)
  59.        )
  60.     )
  61.     (setq e (entlast))
  62.   )
  63.   (fxline pt pt2)
  64.   (setq xh T)

  65.   (while (and xh
  66.        (/= (setq world
  67.       (getstring
  68.         "\n测绘画房,负距离反方向线绘制[闭合(C)/延长(Y)/撤销(U)]<房边长>: "
  69.       )
  70.      )
  71.      ""
  72.        )
  73.    )
  74.     (if  (/= 0.0 (setq num (atof world)))
  75.       (if (>= num 0.0)
  76.   (progn
  77.     (entdel e)
  78.     (command "line" pt2 (setq pt3 (polar pt2 fxang num)) "")
  79.     (setq elst (cons (entlast) elst))
  80.     (fxline pt2 pt3)
  81.    
  82.     (setq pt2 pt3)
  83.   )
  84.   (progn
  85.     (if (> fxang pi)
  86.       (setq fxang (- fxang pi))
  87.       (setq fxang (+ fxang pi))
  88.     )
  89.     (entdel e)
  90.     (command "line"
  91.        pt2
  92.        (setq pt3 (polar pt2 fxang (abs num)))
  93.        ""
  94.     )
  95.     (setq elst (cons (entlast) elst))
  96.     (fxline pt2 pt3)
  97.    
  98.     (setq pt2 pt3)
  99.   )
  100.       )
  101.       (cond
  102.   ((= (strcase world) "C")
  103.    (setq xh nil)
  104.    (setq elst (cons (entlast) elst))
  105.    (entdel e)
  106.    (command "line" pt3 startpt "")
  107.   )
  108.   ((= (strcase world) "Y")
  109.    (if (/= (setq world (getstring "\n请输入延长距离:")) "")
  110.      (if (> (setq num (atof world)) 0.0)
  111.        (progn
  112.          (entdel e)
  113.          (setq pt3 (polar pt2 ang num))
  114.          (if (> (setq co (1+ co)) 5)
  115.      (setq co 2)
  116.      )
  117.          (entmake  (list '(0 . "LINE")
  118.             '(100 . "AcDbEntity")
  119.             '(100 . "AcDbLine")
  120.             (cons 10 pt2)
  121.             (cons 11 pt3)
  122.             (cons 62 co)
  123.             '(210 0. 0. 1.)
  124.       )
  125.          )

  126.          (fxline pt2 pt3)

  127.          (setq pt2 pt3)
  128.        )
  129.        (princ "   延长距离只能为正实数!")
  130.      )
  131.    )
  132.   )
  133.   ((= (strcase world) "U")
  134.    (entdel e) ;_删辅助线
  135.    (entdel (car elst)) ;_删线
  136.    (setq elst (cdr elst))
  137.    (setq laste (car elst))
  138.    (setq el (entget laste))
  139.    (setq pt (cdr (assoc 10 el)))
  140.    (setq pt2 (cdr (assoc 11 el)))
  141.    (fxline pt pt2)
  142.    (setq pt2 pt3)
  143.   )
  144. ;;;  (t
  145. ;;;   
  146. ;;;  )
  147.       )
  148.     )
  149.   )
  150.   (if (= world "")
  151.     (entdel e)
  152.   )
  153.     (if (>= (setq os (getvar "osmode")) 16384)
  154.     (setvar "osmode" (- os 16384))
  155.     (setvar "osmode" (+ os 16384))
  156.   )

  157.   (princ)
  158. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +2 金钱 +30 收起 理由
yfy2003 + 2 + 30

查看全部评分

发表于 2014-5-11 08:20 | 显示全部楼层
j继续了  大师  我是个初学者   支持你了
发表于 2018-3-23 08:13 来自手机 | 显示全部楼层
拿来试一试,谢谢
发表于 2019-10-15 12:01 来自手机 | 显示全部楼层
谢谢分享,支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 17:36 , Processed in 0.214565 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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