明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1015|回复: 3

[提问] 求高手帮实现一简单功能

  [复制链接]
发表于 2014-7-28 09:10 | 显示全部楼层 |阅读模式
画线标注板标高, 并使标高尺寸与直线平行。如图:

本帖子中包含更多资源

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

x
发表于 2014-7-28 11:56 | 显示全部楼层
  1. ;;画线标高绘制主程序
  2. ;;code by edta 2014-7-28 @mjtd.com
  3. ;;命令bg2
  4. (defun c:bg2(/ p1 p2 sk_level_s ang p3)
  5.   (vl-load-com)
  6.   (vla-StartUndoMark(vla-get-ActiveDocument (vlax-get-acad-object)))
  7.   (setq *error*_Old *error*)                ;保存出错处理函数
  8.   (setq *error* *error*_New)  
  9.   (or sk_scale (setq sk_scale(cond((getint (strcat "\n输入标高比例<100>: ")))(100))))
  10.   (or sk_level (setq sk_level 0.000))
  11.   (setq bak_dimzin(getvar 'dimzin))
  12.   (setvar 'dimzin 0)
  13.   
  14.   (if(and(setq sk_level(cond((getreal (strcat "\n输入标高值<"(rtos sk_level 2 3)">:")))(sk_level)))
  15.          (list t (initget "s _s"))
  16.          (setq p1(getpoint (strcat "\n指定第一点/(S)标高比例<" (itoa sk_scale) ">:")))
  17.          (if (= p1 "s")
  18.            (progn
  19.              (setq sk_scale(cond((getint (strcat "\n输入标高比例<"(itoa sk_scale)">: ")))(sk_scale)))
  20.              (setq p1(getpoint (strcat "\n指定第一点,当前标高比例<"(itoa sk_scale)">: "))))
  21.            t
  22.            )
  23.          (setq p2(getpoint p1 "\n指定第二点:"))
  24.          )
  25.     (progn
  26.       (if  (equal sk_level 0.000)
  27.         (setq sk_level_s "%%P0.000")
  28.         (setq sk_level_s (rtos sk_level 2 3))
  29.         )
  30.       (setq ang(angle p1 p2))
  31.       (if (and (>= ang (* pi 0.5))(<= ang (* pi 1.5)))
  32.         (setq p3 p1 p1 p2 p2 p3))            
  33.       (sk_mk_level p1 p2 sk_level_s sk_scale)
  34.       (entmake (list '(0 . "LINE") (cons 10 p1) (cons 11 p2)))      
  35.       )
  36.     )
  37.   (and bak_dimzin(setvar 'dimzin bak_dimzin))
  38.   (and *error*_Old(setq *error* *error*_Old))
  39.   (vla-EndUndoMark(vla-get-ActiveDocument (vlax-get-acad-object)))
  40.   (princ)
  41.   )
  42. ;;标高生成函数
  43. (defun sk_mk_level(p1 p2 sk_level sk_scale / ang lst mpt mpt1 p4 pt pt1 pt3 pt4 pt5 pt6)
  44.   (setq mpt(mapcar '(lambda(x y)(* 0.5 (+ x y))) p1 p2)
  45.         ang(angle p1 p2)
  46.         mpt1(polar mpt (+ ang (* 0.5 pi)) (* 3 sk_scale))
  47.         pt1(polar mpt1 ang (* 3 sk_scale))
  48.         pt3(polar mpt1 ang (* -3 sk_scale))
  49.         pt4(polar mpt1 ang (* 15 sk_scale))
  50.         pt5(polar mpt1 ang (* 9 sk_scale))       
  51.         lst (list pt1 mpt pt3 pt4)
  52.         )
  53.   (entmake (append
  54.              (list '(0 . "LWPOLYLINE")
  55.                    '(100 . "AcDbEntity")
  56.                    '(100 . "AcDbPolyline")
  57.                    (cons 90 (length lst)))
  58.              (mapcar '(lambda (pt)(cons 10 pt)) lst ))
  59.            )
  60.   (entmake (list '(0 . "TEXT")
  61.                  (cons 1 sk_level)
  62.                  (cons 73 1)
  63.                  (cons 72 1)
  64.                  (cons 10 pt4)
  65.                  (cons 11 pt5)
  66.                  (cons 40 (* sk_scale 2.5))
  67.                  (cons 50 ang))
  68.            )
  69.   )
  70. ;;出错处理函数
  71. (defun *error*_New (msg)  
  72.   (and *error*_Old(setq *error* *error*_Old))
  73.   (and bak_dimzin(setvar 'dimzin bak_dimzin))
  74.   (if (wcmatch (strcase msg t) "*break,*cancel*,*exit*,*取消*")
  75.     (if        (= (getvar "LOCALE") "CHS")
  76.       (princ "\n用户按了<Esc>强制退出")
  77.       (princ "\nYou cancelled The operation!")
  78.     )
  79.     (princ (strcat "\n" msg))
  80.   )
  81.   (vla-EndUndoMark(vla-get-ActiveDocument (vlax-get-acad-object)))
  82.   (princ)
  83. )
  84. (vl-load-com)
  85. (prompt "\n画线标高 命令bg2")
  86. (princ)

评分

参与人数 2明经币 +2 收起 理由
风树 + 1 赞一个!
lucas_3333 + 1 E大的程序,我当宝收藏了!

查看全部评分

 楼主| 发表于 2014-7-28 12:44 | 显示全部楼层
十分感谢 收益良多
发表于 2014-7-28 12:47 | 显示全部楼层


本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 22:55 , Processed in 0.478918 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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