找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1263|回复: 10

[编程申请]:请求一个能自动标注所量取距离的小程序

[复制链接]
发表于 2005-11-9 21:29:44 | 显示全部楼层 |阅读模式

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

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

×
我是做市政排水的,有时需要标注管道长度。我想实现以下功能:先点取需修改的文字如“d300-40.5”然后运行测量距离的命令点选起始点(要支持对象捕捉),命令运行完毕以后前面所点选文字中的“40.5”变为所测量的长度,最好保留的小数位可调。在论坛里发现了一个类似的,但是更我的要求还是差一点。请高手们借鉴一下。http://www.xdcad.net/forum/showthre...threadid=406895
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-11-10 11:05:38 | 显示全部楼层
;请试用以下程序
(defun c:etext()
   (setq xtblm '("cmdecho" "osmode" "dimzin")
         xtblz (mapcar 'getvar xtblm)
          ws   (getint "\n请指定要保留的小数位:")
   )
   (mapcar 'setvar xtblm '(0 33 0))
   (while (setq ent (entsel "\n请选取需修改的文字:"))
      (setq ent (car ent)  db (entget ent))
      (if (wcmatch (cdr (assoc 0 db)) "*TEXT")
          (progn
             (redraw  ent 3)
             (setq zf (cdr (assoc 1 db))
                   zf (vl-string-subst
                          (rtos (getdist (getpoint "\n请选取起点:") "\n请选取止点:") 2 ws)
                          (substr zf (+ 2 (vl-string-search "-" zf )))
                          zf
                      )
                   db (subst (cons 1 zf) (assoc 1 db) db)
             )
             (entmod db)
          )
          (alert "所选取的图元不是文字,请重新选取!")
      )
                
   )
   (mapcar 'setvar xtblm xtblz)(princ)
)

这样就更可读了
  1. [FONT=courier new]
  2. (defun c:etext ()
  3.   (setq        xtblm '("cmdecho" "osmode" "dimzin")
  4.         xtblz (mapcar 'getvar xtblm)
  5.         ws    (getint "\n请指定要保留的小数位:")
  6.   )
  7.   (mapcar 'setvar xtblm '(0 33 0))
  8.   (while (setq ent (entsel "\n请选取需修改的文字:"))
  9.     (setq ent (car ent)
  10.           db  (entget ent)
  11.     )
  12.     (if        (wcmatch (cdr (assoc 0 db)) "*TEXT")
  13.       (progn
  14.         (redraw ent 3)
  15.         (setq zf (cdr (assoc 1 db))
  16.               zf (vl-string-subst
  17.                    (rtos (getdist (getpoint "\n请选取起点:") "\n请选取止点:")
  18.                          2
  19.                          ws
  20.                    )
  21.                    (substr zf (+ 2 (vl-string-search "-" zf)))
  22.                    zf
  23.                  )
  24.               db (subst (cons 1 zf) (assoc 1 db) db)
  25.         )
  26.         (entmod db)
  27.       )
  28.       (alert "所选取的图元不是文字,请重新选取!")
  29.     )
  30.   )
  31.   (mapcar 'setvar xtblm xtblz)
  32.   (princ)
  33. )
  34. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-10 15:11:26 | 显示全部楼层
Sub JLZJ()  
     AppActivate AcadApp.Caption
    Dim txtobj As AcadText
    Dim returnObj As AcadObject
    Dim basePnt As Variant
    Dim p1 As Variant
    Dim p2 As Variant
    Dim distance As Double
    Dim sp(0 To 2) As Double
    Dim ep(0 To 2) As Double   
    On Error Resume Next   
RETRY:
    acaddoc.Utility.GetEntity returnObj, basePnt, "请选择要修改的文本对象:"
    If Err <> 0 Then
        Err.Clear
        GoTo RETRY
    Else
    End If
    If returnObj.EntityName = "AcDbText" Then
        Set txtobj = returnObj
    Else
        GoTo RETRY
    End If
    p1 = acaddoc.Utility.GetPoint(, "请点取第一点:")
    p2 = acaddoc.Utility.GetPoint(, "请点取第二点:")
    sp(0) = Val(p1(0)): sp(1) = Val(p1(1)): sp(2) = Val(p1(2))
    ep(0) = Val(p2(0)): ep(1) = Val(p2(1)): ep(2) = Val(p2(2))
    distance = Sqr((ep(0) - sp(0)) ^ 2 + (ep(1) - sp(1)) ^ 2 + (ep(2) - sp(2)) ^ 2)
    distance = QUWEI(distance, 2)
    txtobj.TextString = Str(distance)
END SUB


Public Function QUWEI(X As Double, Y As Integer) As Double '数据四舍五入取位函数
     'X为需要四舍五入的字符串数据,Y为小数点后保留的位数
     Dim p As String
          Dim g As Integer
        Dim dotback As String '小数点后数据
    Dim dotbefore As String '小数点前数据
    Dim n As String
        Dim k As String
   
    p = Str(X)
    p = RTrim(LTrim(p))
    g = InStr(1, p, ".")
    dotbefore = Left(p, g - 1)
    dotback = Right$(p, Len(p) - g)
    dotback = Left(dotback, Y + 1)
    n = Right(dotback, 1)
    dotback = Left(dotback, Y)
    k = Right(dotback, 1)
    dotback = Left(dotback, Y - 1)
    If Val(n) > 5 Then
        k = Str(Val(k) + 1)
    End If
    dotback = dotback + k
    QUWEI = Val(dotbefore + "." + dotback)
End Function
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-10 21:11:02 | 显示全部楼层
谢谢楼上2位的帮忙,由于我不会生成VBA的程序,所以3楼楼主的程序我没有用,但是仍深深地表示感谢!!
2楼楼主的lisp我用了,完全满足我的要求。我测试了一下,支持捕捉、支持任意坐标系、支持文字倾斜、标注出的数字为实际距离。但是我还有一个小请求,就是有时我们的表示方法为“d400-30.00”意思是“管径-管长”,而有时是“d400-30.00-1%”意思是“管径-管长-坡度”,可不可以改进一下您的程序,让它只改中间的“管长”,我试了一下您的程序即使文字是“管径-管长-坡度”的形式,运行程序以后“管长”的数字是对的,而“坡度”就没了。能不能编一个同时支持以上两种表示形式的程序,谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-11-10 23:29:31 | 显示全部楼层
;请试用以下程序
(defun c:etext()
     (setq xtblm '("cmdecho" "osmode" "dimzin")
             xtblz (mapcar 'getvar xtblm)
             ws (getint "\n请指定要保留的小数位:")
     )
  (mapcar 'setvar xtblm '(0 33 0))
  (while (setq ent (entsel "\n请选取需修改的文字:"))
     (setq ent (car ent) db (entget ent))
     (if (wcmatch (cdr (assoc 0 db)) "*TEXT")
        (progn
          (redraw ent 3)
          (setq zf (cdr (assoc 1 db))
                   z1 (substr zf (1+ (vl-string-search "-" zf )))
                   n2 (vl-string-search "-" z1 2)
                  dd (strcat"-" (rtos (getdist (getpoint "\n请选取起点:") "\n请选取止点:") 2 ws))
         )
         (if (/= n2 nil)
             (setq z1 (substr z1 1 (1+ n2))
                   dd (strcat dd "-")
             )
         )
         (setq zf (vl-string-subst dd z1 zf)
               db (subst (cons 1 zf) (assoc 1 db) db)
         )
         (entmod db)
       )
       (alert "所选取的图元不是文字,请重新选取!")
    )
  )
  (mapcar 'setvar xtblm xtblz)(princ)
)
程序不错,就是看起来有点累,再替你改一次。by xyp1964[/COLOR]
  1. [FONT=courier new]
  2. (defun c:etext ()
  3.   (setq        xtblm '("cmdecho" "osmode" "dimzin")
  4.         xtblz (mapcar 'getvar xtblm)
  5.         ws    (getint "\n请指定要保留的小数位:")
  6.   )
  7.   (mapcar 'setvar xtblm '(0 33 0))
  8.   (while (setq ent (entsel "\n请选取需修改的文字:"))
  9.     (setq ent (car ent)
  10.           db  (entget ent)
  11.     )
  12.     (if        (wcmatch (cdr (assoc 0 db)) "*TEXT")
  13.       (progn
  14.         (redraw ent 3)
  15.         (setq zf (cdr (assoc 1 db))
  16.               z1 (substr zf (1+ (vl-string-search "-" zf)))
  17.               n2 (vl-string-search "-" z1 2)
  18.               dd (strcat "-"
  19.                          (rtos (getdist (getpoint "\n请选取起点:") "\n请选取止点:")
  20.                                2
  21.                                ws
  22.                          )
  23.                  )
  24.         )
  25.         (if (/= n2 nil)
  26.           (setq        z1 (substr z1 1 (1+ n2))
  27.                 dd (strcat dd "-")
  28.           )
  29.         )
  30.         (setq zf (vl-string-subst dd z1 zf)
  31.               db (subst (cons 1 zf) (assoc 1 db) db)
  32.         )
  33.         (entmod db)
  34.       )
  35.       (alert "所选取的图元不是文字,请重新选取!")
  36.     )
  37.   )
  38.   (mapcar 'setvar xtblm xtblz)
  39.   (princ)
  40. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-11-22 14:36:57 | 显示全部楼层
xyp1964版主,"code或php代码发布程序"具体是怎样操作,热切盼望您发一份到hrycly@126.com,不然以后说不定又要麻烦您帮修改了,真是不好意思。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-11-26 10:35:48 | 显示全部楼层
我想问问如果原来没有文字如何通过测量两点距离把结果写出文字,要写在自己希望的位置上,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-26 19:25:00 | 显示全部楼层
最初由 lijinglq 发布
[B]十分感谢yshf 同志的热心帮忙,完全满足我的要求,谢谢,谢谢。 [/B]

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-21 20:12 , Processed in 0.202438 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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