找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 711|回复: 3

[求助] [求助]:想向“柔柔”要个源代码

[复制链接]
发表于 2005-4-21 13:56:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
向柔柔要个标高符号的源代码。谢谢。

邮箱:lxuming@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-22 00:17:48 | 显示全部楼层
我这是编着玩玩的,不合适地方请自己修改。
这个版块不大来,没及时看到。

  1.   [FONT=courier new]
  2. ;
  3. ; LEVEL.LSP  建筑标高标注程序  CYN 2003.8.7
  4. ; 最近一次修改: 2003.8.7
  5. ; 全局变量: #dwg_scl_cyn     图纸比例因子
  6. ;           #level_0_cyn     坐标值与标注值差
  7. ;           #bg_strhigh_cyn  标注文字字高
  8. ;;-----------------------------------------------------------------------------------------
  9. (defun level_err(s)
  10.       (if (/= s "Function cancelled")
  11.         (princ (strcat "\nError: " s))
  12.       )
  13.       (setvar "OSMODE" os)
  14.       (setvar "CMDECHO" cmd)
  15.       (command "_.UNDO" "_E")
  16. )
  17. ;;-----------------------------------------------------------------------------------------
  18. (defun c:level (/ os cmd temp xx ename move_pt pt0 pt1 pt2 pt3 pt4 pt5 pt6
  19.                   p1 p2  ang a b c ang1 ang2 angstr levelbg_cyn str)
  20.   (setq os (getvar "OSMODE"))
  21.   (setq cmd (getvar "CMDECHO"))
  22.   (setq *error* level_err)
  23.   (setvar "CMDECHO" 0)
  24.   (if (= #dwg_scl_cyn nil) (setq #dwg_scl_cyn (getvar "DIMSCALE")))
  25.   (if (= #dwg_scl_cyn 0.0) (setq #dwg_scl_cyn 1.0))
  26.   (if (= #bg_strhigh_cyn nil) (setq #bg_strhigh_cyn 2.5))
  27.   (setq temp T)
  28.   (while temp
  29.      (prompt (strcat "\n文字字高 High = " (rtos #bg_strhigh_cyn)
  30.                      ", 比例因子 Scale = " (rtos #dwg_scl_cyn)))
  31.      (initget "High Scale")
  32.      (setq pt0 (getpoint "\n指示标注位置 或 [字高(H), 比例因子(S)] : "))
  33.      (cond
  34.        ((= pt0 "High")
  35.           (setq xx (getreal (strcat "\n字体高度 <"(rtos #bg_strhigh_cyn)">:")))
  36.           (if xx (setq #bg_strhigh_cyn xx))
  37.        )
  38.        ((= pt0 "Scale")
  39.           (setq xx (getreal (strcat "\n比例因子 <"(rtos #dwg_scl_cyn)">:")))
  40.           (if xx (setq #dwg_scl_cyn xx))
  41.        )
  42.        (T
  43.          (setq temp nil)
  44.        )
  45.      )
  46.    )
  47.    (setvar "OSMODE" 0)
  48.    (setq pt1 pt0)  
  49.    (level_dwg 0.0 0.5 pi 0.0)
  50. ;;-----------------------------------------------------------------------------------------
  51.    (prompt "\n指示引出标注位置< 原地标注 >:")
  52.    (setq temp T)
  53.    (while temp
  54.      (setq move_pt (grread T 4 0))
  55.      (cond
  56.        ((= 5 (car move_pt))
  57.          (setq pt1 (cadr move_pt))
  58.          (setq pt1 (polar pt1 (* pi 0.5) (* #dwg_scl_cyn 2.5)))
  59.          (if (> (car pt1) (car pt0))
  60.            (progn
  61.               (level_dwg 0.0 0.5 pi 0.0)
  62.               (setq p1 (polar pt1 pi (* #dwg_scl_cyn 3.0)))
  63.               (setq p2 (polar p1 0.0 (* #dwg_scl_cyn 5.0)))
  64.            )
  65.            (progn
  66.               (level_dwg 0.0 0.5 0.0 pi)
  67.               (setq p1 (polar pt1 0.0 (* #dwg_scl_cyn 3.0)))
  68.               (setq p2 (polar p1 pi (* #dwg_scl_cyn 5.0)))
  69.            )
  70.          )
  71.          (redraw)
  72.          (grdraw pt0 p1 3 1)
  73.          (grdraw p1 p2 3 1)
  74.        )
  75.        ((= 3 (car move_pt))
  76.          (setq pt1 (cadr move_pt))
  77.          (setq pt1 (polar pt1 (* pi 0.5) (* #dwg_scl_cyn 2.5)))
  78.          (redraw)
  79.          (command "_pline" pt0 "w" "0.0" "" p1 p2 "")
  80.          (setq temp nil)
  81.          (setq ang 0.0)
  82.        )
  83.        ((or (= 12 (car move_pt)) (= 25 (car move_pt)))
  84.           (redraw)
  85.           (setq pt1 pt0)
  86.           (level_dwg 0.0 0.5 pi 0.0)
  87.           (setq temp nil)
  88.        )
  89.      )
  90.    )
  91. ;;-----------------------------------------------------------------------------------------
  92.    (defun level_xz_cyn ()
  93.       (prompt "\n指示旋转方向点< 正交 >:")
  94.       (setq temp T)
  95.       (while temp
  96.         (setq move_pt (grread T 4 0))
  97.         (cond
  98.           ((= 5 (car move_pt))
  99.             (setq move_pt (cadr move_pt))
  100.             (redraw)
  101.             (grdraw pt1 move_pt 5 1)
  102.             (setq ang (angle pt1 move_pt))
  103.             (level_dwg ang 0.5 pi 0.0)
  104.           )
  105.           ((= 3 (car move_pt)) (setq temp nil))
  106.           ((or (= 12 (car move_pt)) (= 25 (car move_pt)))
  107.             (cond
  108.               ((equal ang 0.0 0.78)  (setq ang 0.0))
  109.               ((equal ang (* pi 0.5) 0.78)  (setq ang (* pi 0.5)))
  110.               ((equal ang pi 0.78)  (setq ang pi))
  111.               ((equal ang (* pi 1.5) 0.78)  (setq ang (* pi 1.5)))
  112.             )
  113.             (level_dwg ang 0.5 pi 0.0)
  114.             (setq temp nil)
  115.           )
  116.         )
  117.       )
  118.    )
  119. ;;-----------------------------------------------------------------------------------------
  120.    (if (= pt1 pt0) (level_xz_cyn))
  121.    (prompt "\n指示标高标记方向:")
  122.    (setq temp T)
  123.    (while temp     
  124.      (setq move_pt (grread T 4 0))
  125.      (if (= 5 (car move_pt))
  126.        (progn
  127.           (setq move_pt (cadr move_pt))
  128.           (redraw)
  129.           (grdraw pt1 move_pt 2 1)
  130.           (setq ang1 (angle pt1 move_pt))
  131.           (setq ang2 (- ang1 ang))
  132.            (cond
  133.              ((and (< ang2 0.0) (> ang2 (* pi -0.5)))            (level_dwg ang 1.5 pi 0.0))
  134.              ((and (< ang2 (* pi -0.5)) (> ang2 (* pi -1.0)))    (level_dwg ang 1.5 0.0 pi))
  135.              ((and (< ang2 (* pi -1.0)) (> ang2 (* pi -1.5)))    (level_dwg ang 0.5 0.0 pi))
  136.              ((and (< ang2 (* pi -1.5)) (> ang2 (* pi -2.0)))    (level_dwg ang 0.5 pi 0.0))
  137.              ((and (> ang2 0.0) (< ang2 (* pi 0.5)))             (level_dwg ang 0.5 pi 0.0))
  138.              ((and (> ang2 (* pi 0.5)) (< ang2 pi))              (level_dwg ang 0.5 0.0 pi))
  139.              ((and (> ang2  pi) (< ang2 (* pi 1.5)))             (level_dwg ang 1.5 0.0 pi))
  140.              ((and (> ang2 (* pi 1.5)) (< ang2 (* pi 2.0)))      (level_dwg ang 1.5 pi 0.0))
  141.           )
  142.         )
  143.         (setq temp nil)   
  144.      )
  145.    )
  146.    (redraw)
  147. ;;-----------------------------------------------------------------------------------------
  148.    (if (= #level_0_cyn nil)
  149.        (setq levelbg_cyn (/ (fix (cadr pt0)) 1000.0))
  150.        (setq levelbg_cyn (/ (fix (- (cadr pt0) #level_0_cyn)) 1000.0))
  151.    )

  152.    (setq xx (getreal (strcat "\n标高值 <" (rtos levelbg_cyn 2 3) ">:")))
  153.    (if xx
  154.        (setq levelbg_cyn xx
  155.              #level_0_cyn (- (cadr pt0) (* xx 1000.0))
  156.        )
  157.    )

  158.    (if (= (fix levelbg_cyn) levelbg_cyn)
  159.       (setq str (strcat (rtos levelbg_cyn) ".000"))
  160.       (progn
  161.          (if (= (/ (fix (* levelbg_cyn 10.0)) 10.0) levelbg_cyn)
  162.             (setq str (strcat (rtos levelbg_cyn) "00"))
  163.             (progn
  164.               (if (= (/ (fix (* levelbg_cyn 100.0)) 100.0) levelbg_cyn)
  165.                 (setq str (strcat (rtos levelbg_cyn) "0"))
  166.                 (setq str (rtos levelbg_cyn 2 3))
  167.               )
  168.             )
  169.          )
  170.       )
  171.    )

  172.    (if (= levelbg_cyn 0.0) (setq str "%%p0.000"))
  173.    (if (and (> (angle pt2 pt5) 1.95) (<= (angle pt2 pt5) 4.85))        
  174.         (setq angstr (/ (* (angle pt5 pt2) 180) pi))
  175.         (setq angstr (/ (* (angle pt2 pt5) 180) pi))
  176.    )
  177.    (command "text" "_middle" pt6 (* #bg_strhigh_cyn #dwg_scl_cyn) angstr str)   
  178.    (setvar "CMDECHO" cmd)
  179.    (setvar "OSMODE" os)
  180. )
  181. ;;-----------------------------------------------------------------------------------------
  182.    (defun level_dwg (ang a b c)
  183.       (if ename (entdel ename))
  184.       (setq pt2 (polar pt1 (+ ang (* pi a)) (* #dwg_scl_cyn 2.5))
  185.             pt3 (polar pt2 (+ ang b) (* #dwg_scl_cyn 2.5))
  186.             pt4 (polar pt3 (+ ang c) (* #dwg_scl_cyn 5.0))
  187.             pt5 (polar pt3 (+ ang c) (* #dwg_scl_cyn 14.0))
  188.             pt6 (polar pt2 (+ ang c) (* #dwg_scl_cyn 5.0))
  189.             pt6 (polar pt6 (+ ang (* pi a)) (* #dwg_scl_cyn 2.5))
  190.       )
  191.       (command "_pline" pt4 "w" "0.0" "" pt1 pt3 pt5 "")
  192.       (setq ename (entlast))
  193.    )
  194. ;;-----------------------------------------------------------------------------------------

  195.   [/FONT]


本程序的优点是几乎不用键盘,因为本人不习惯“快捷键”,尽量让鼠标一统天下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-22 07:37:05 | 显示全部楼层
谢谢,柔柔。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-22 07:57:27 | 显示全部楼层
标高符号与数值是分开的,觉得还是利用属性块比较方便。
还应强制标注到一个类似的“标高”层。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 03:50 , Processed in 0.173610 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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