找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 941|回复: 3

[求助]:谁帮我写一个标注标高的宏(AutoCADLT用)

[复制链接]
发表于 2002-12-5 15:11:52 | 显示全部楼层 |阅读模式

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

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

×
像这样斜线水平线构成的折线上面标注标高值,斜线指向标注点,自动获得标高值。
AutoCADLT的按钮用

标高值
------
/
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

发表于 2002-12-6 11:19:17 | 显示全部楼层
请说明清查点,如标高值保存在哪里,如何读取?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2002-12-6 13:59:36 | 显示全部楼层
提供个简单的例子,你可以参考一下。

  1.   [FONT=courier new]
  2. Sub Test()
  3.     On Error Resume Next
  4.     Dim pPt(0 To 7) As Double
  5.     Dim sPt As Variant
  6.     sPt = ThisDrawing.Utility.GetPoint(, "指定起点: ")
  7.     If Err Then Exit Sub
  8.     pPt(0) = sPt(0): pPt(1) = sPt(1)
  9.     Dim ePt As Variant
  10.     ePt = ThisDrawing.Utility.GetPoint(sPt, "指定终点: ")
  11.     If Err Then Exit Sub
  12.     sPt = ThisDrawing.Utility.PolarPoint(sPt, ThisDrawing.Utility.AngleFromXAxis(sPt, ePt), 2.5) '用于设置箭头长度
  13.     pPt(2) = sPt(0): pPt(3) = sPt(1)
  14.     pPt(4) = ePt(0): pPt(5) = ePt(1)
  15.     Dim sText As String
  16.     sText = ThisDrawing.Utility.GetString(0, "输入标高值: ")
  17.     If sText = "" Then Exit Sub
  18.     Dim iPt As Variant
  19.     iPt = ePt
  20.     Dim TextObj As AcadText
  21.     Set TextObj = ThisDrawing.ModelSpace.AddText(sText, iPt, ThisDrawing.GetVariable("TEXTSIZE"))
  22.     TextObj.GetBoundingBox sPt, ePt '用于计算文本长度
  23.     iPt = ThisDrawing.Utility.PolarPoint(iPt, 0, (ePt(0) - sPt(0)) / 2 + 1)
  24.     iPt = ThisDrawing.Utility.PolarPoint(iPt, 3.1415927 / 2, 1) '设置文本与线的间隔为1mm
  25.     TextObj.Alignment = acAlignmentBottomCenter
  26.     TextObj.TextAlignmentPoint = iPt
  27.     pPt(6) = pPt(4) + ePt(0) - sPt(0) + 2: pPt(7) = pPt(5)
  28.     Dim lwpLineObj As AcadLWPolyline
  29.     Set lwpLineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(pPt)
  30.     lwpLineObj.SetWidth 0, 0, 1 '设置箭头的大小
  31. End Sub

  32.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-12-7 23:20:06 | 显示全部楼层
谢谢回复。标高等于y坐标值。
只是想用在LT版的按钮上(按钮里的命令用),似乎最多能容纳200多个字符。

:::::::::::::::::::::::::::::::::
看来对LT是比较难办,autocad R版安装成功,将别人的LSP拿来用了
:::::::::::::::::::::::::::::::::

;*******************************************************************
;  错误处理
;*******************************************************************
(defun cof_err (s)
(princ (strcat "\nError: " s))
(setq *ERROR* old_err)
(if echo
  (setvar "CMDECHO" echo)
)
(if clay
  (setvar "CLAYER" clay)
)
(if old_osmode
  (setvar "OSMODE" old_osmode)
)
(princ)
)
;*******************************************************************
;  标高TXT(带指示线)
;*******************************************************************
(defun c:level_ltxt ()
(setq old_err *ERROR*)
(setq *ERROR* cof_err)
(setq old_osmode (getvar "OSMODE"))
(setq clay (getvar "CLAYER"))
(setq echo (getvar "CMDECHO"))
;单位显示
  (setq uni_h (getvar "DIMLFAC"))
  (if (= uni_h 1000)(setq uni_h 1))
;字符高
  (setq txt_h (getvar "DIMTXT"))
  (setq txt_h (* txt_h (getvar "DIMSCALE")))
;字符偏移
  (setq oft 2)
  (setq oft (* oft (getvar "DIMSCALE")))
;标高小数位数
  (if (= dec_n nil)
   (progn
    (setq old_dec_n 2)
   )
   (progn
    (setq old_dec_n dec_n)
   )
  )
  (prompt "\n小数位数:<")(princ old_dec_n)(princ ">")
  (setq dec_n (getint ""))
  (if (= dec_n nil)(setq dec_n old_dec_n))
;hft指定点
  (setq hft (getpoint "\n标高点:"))
  (setvar "OSMODE" 0)
;hft取得点的坐标
  (setq hftx (nth 0 hft))
  (setq hfty (nth 1 hft))
  (setq hfty (* hfty uni_h))
  (setq hftyp (rtos hfty 2 dec_n))
;形式分支
  (if (= chp nil)
   (progn
    (setq old_chp 1)
   )
   (progn
    (setq old_chp chp)
   )
  )
  (prompt "\n指示线:无<1>,有<2> <")(princ old_chp)(princ ">")
  (setq chp (getint ""))
  (if (= chp nil)(setq chp old_chp))
  (if (= chp 2)
   (progn
    ;图层操作
    (setvar "CMDECHO" 0)
    (command "-layer" "M" "-leader" "")
    ;指示线
    (setq ldx (* (+ 1 (strlen hftyp)) txt_h))
    (setvar "CMDECHO" 1)
    (command "LINE" hft pause "")
    (setq lp2 (getvar "LASTPOINT"))
    (setq lp2x (nth 0 lp2))
    (setq lp2y (nth 1 lp2))
    ;方向点
    (setq muki_p (getpoint "\n方向点:"))
    (setq muki_px (nth 0 muki_p))
    (if (< lp2x muki_px)
     (progn
      (setq p0 lp2)
      (setq ep (list (+ lp2x ldx) lp2y))
     )
     (progn
      (setq p0 (list (- lp2x ldx) lp2y))
      (setq ep lp2)
     )
    )
    (command "LINE" p0 ep "")
    (setq pn 1)
   )
   (progn
    (setq p0 hft)
    (setq pn 0)
   )
  )
  (setvar "CMDECHO" 0)
;字符位置
  (setq p0x (nth 0 p0))
  (setq p0y (nth 1 p0))
  (setq tg (* (getvar "DIMGAP") (getvar "DIMSCALE")))
  (setq tp (list (+ p0x (* chp txt_h)) (+ tg p0y)))
;图层操作-------------------------------------------------------
  (command "-layer" "M" "-txt" "")
;画标记---------------------------------------------------------
  ;(setq p0x (+ p0x (* pn txt_h)))
  ;(setq p0 (list p0x p0y))
  ;(setq p1x (- p0x (/ txt_h (sqrt 3))))
  ;(setq p1y (+ p0y txt_h))
  ;(setq p1 (list p1x p1y))
  ;(setq p2x (+ p0x (/ txt_h (sqrt 3))))
  ;(setq p2y p1y)
  ;(setq p2 (list p2x p2y))
  ;(command "PLINE" p0 p1 p2 "C")

;写文字-----------------------------------------------------
  (command "TEXT" tp txt_h 0 hftyp)
  (setvar "OSMODE" old_osmode)
  (setvar "CLAYER" clay)
  (setvar "CMDECHO" echo)
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 13:00 , Processed in 0.433525 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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