找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5049|回复: 16

[LISP程序]:道路桩号lisp程序

[复制链接]

已领礼包: 2074个

财富等级: 金玉满堂

发表于 2006-8-19 10:56:01 | 显示全部楼层 |阅读模式

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

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

×
对直线,多义线进行桩号标注,标注与线的方向有关系,桩号标注是根据我们单位的设计习惯编制,如果不习惯请自己修改代码!对于多段直线的情况,请转换为多线段再操作!
2006年8月22日增加输入起始桩号功能,可是由于时间紧迫,有事出差,所以起始桩号最好是你桩号间距的整数倍,否则后果很严重,结果很糟糕!
2006.09.02修改删除原来桩号的代码,更加快捷。修改起始桩号问题。改变字体及桩号间距设置情况,如果设置运行sz。
2006.09.09程序定型,可以选择标注方向,文字方向,起始点,起始桩号,桩号前缀以及千米桩号在破桩位是否标注等等。
[PHP]
;;;;;以下信息请在转载,修改的时候保留,谢谢!
;;;;;作者:dabingrain,网络硬盘:dabingrain.ys168.com,信箱:dabingrain@163.com

(terpri)
   (If (= (Tblsearch "layer" "道路桩号") nil)
       (Command "layer" "m" "道路桩号" "c" 7 "道路桩号" "")
   )
(If (= (Tblsearch "layer" "道路中心线") nil)
    (Command "layer" "m" "道路中心线" "c" 1 "道路中心线" "")
)
   (setq dq 0.0)
   (setq wf 1.0)
   (setq fx 1.0)
   (setq th 2.0)
   (setq zk 0.67)
   (Command "-style" "道路桩号" "仿宋_GB2312" "" zk ""  "n" "n")
   (setq dist 20.0)
   (setq qszh 0.0)
   (setq qz "")
   (setq qmw 0)


(prompt "\n标注桩号,加载命令:bz,设置(SZ)。")
(defun c:bz ()
   (setvar "cmdecho" 0)
   (setq os (getvar "osmode"))
   (setq FltLst '((0 . "LWPOLYLINE,POLYLINE,LINE,ARC")))
    (princ "\n\n\n\n     请先把预标注的曲线连接在一起,如果已经连接好,回车跳过即可 ")
   (setq SelSet (cond ((ssget "_I" FltLst)) ((ssget FltLst))))
    (if (/= nil selset) (command "change" SelSet "" "p" "la" "道路中心线" ""))
       (if (/= nil selset)
       (if (> (sslength selset) 1)
           (command "_.PEDIT" "_M" SelSet "" "_Y" "_J" "_J" "_B" "0" "")
       )
       )
     (setq en (car (entsel "\n选择标注曲线:")))
         (while (= nil en)
         (setq en (car (entsel "\n选择标注曲线:")))
           )
   (if (vlax-curve-isClosed en)
               (progn
                    (print "曲线为环路!请先打开个缺口!")
                    (exit)
               )
   )
     (redraw en 3)

   (command "change" en "" "p" "la" "道路中心线" "")

   (setq qd (getpoint "\n选取起始点:"))
   (while (not (vlax-curve-getDistAtPoint en qd))
   (setq qd (getpoint "\n\n\n没有选在标注曲线上,重新选择:"))
   )

   

    (if (= nil (setq qszh (getreal "\n起点桩号<0>:"))) (setq qszh 0))
   
   (setq qszh (- qszh (* (vlax-curve-getDistAtPoint en qd) fx)))
   
     
       (command "._erase" (ssget "x" (list (cons 8 "道路桩号"))) "")     (setq pzh (fix(/ qszh dist)))
    (setq pzh (- qszh (* pzh dist)))
     (if (= fx 1.0)
     (setq pt1 (vlax-curve-getStartPoint en))
     (setq pt1 (vlax-curve-getEndPoint en))
      )
   (if (= fx 1.0)
    (setq zhz 0)
    (setq zhz (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en)))
     )
     (setq zhz (+ zhz (* qszh fx)))
   (setq zhz (* zhz fx))
     (xrbz)
     (setq nn 0)
     (while
     (setq pt1 (vlax-curve-getPointAtDist en (abs(- (* nn (* dist fx)) pzh))))
     (setq zhz (* nn (* dist fx)))
     (setq zhz (+ zhz (- qszh pzh)))
     (xrbz)
     (setq nn (1+ nn))
     )
     (if (= fx 1.0)
         (setq pt1 (vlax-curve-getEndPoint en))
         (setq pt1 (vlax-curve-getStartPoint en))
     )
   (if (= fx 1.0)
    (setq zhz (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en)))
    (setq zhz 0)
     )
    (setq zhz (+ zhz (* qszh fx)))
      (setq zhz (* zhz fx))
    (xrbz)

   )
  (defun xrbz(/)
    (Command "layer" "s" "道路桩号"  "")
    (if (< zhz 0.0) (setq fh "-") (setq fh "+"))
     (setq nn1 (fix (/ zhz 1000.0)))
     (setq nn2 (abs(- zhz (* 1000.0 nn1))))
     (if  (= nn2 0.0) (setq str_1 (strcat fh "000" )))
     (if  (and (> nn2 0) (< nn2 10.0)) (setq str_1 (strcat (strcat fh "00" ) (rtos nn2 2 3))))
     (if  (and (> nn2 10.0) (< nn2 100.0)) (setq str_1 (strcat (strcat fh "0" ) (rtos nn2 2 3))))
     (if  (>= nn2 100.0)  (setq str_1 (strcat fh (rtos nn2 2 3))))
   (if (= qmw 0)
     (if (=  (fix (/ nn2 100.0)) (/ nn2 100.0))
       (progn
         (setq str_1 (strcat (rtos nn1 2)  str_1 ))
         (setq str_1 (strcat qz str_1 ))
       )
     )
         (progn
     (setq str_1 (strcat (rtos nn1 2)  str_1 ))
             (setq str_1 (strcat qz str_1 ))
    )
   )
     (setq ang (a-get-Angle en pt1))
     (setq pt2 (polar pt1 (+ ang (/ pi 2)) (* th 0.5)))
     (setq pt3 (polar pt1 (+ ang (* pi 1.5)) (* th 0.5)))
     (setq st1 (substr str_1 1 1))
     (if (/=  st1 fh)
       (progn
       (if (= wf 1.0)
           (setq pt4 (polar pt1 (+ (* pi 1.5) ang) (* th (* 1.65406 zk))))
           (setq pt4 (polar pt1 (+ (* pi 0.5) ang) (* th (* 1.65406 zk))))
       )
       )
       (progn
       (if (= wf 1.0)
           (setq pt4 (polar pt1 (+ (* pi 1.5) ang) (* th (* 1.3582 zk))))
           (setq pt4 (polar pt1 (+ (* pi 0.5) ang) (* th (* 1.3582 zk))))
       )
       )
     )
   
     (command "line" pt3 pt2 "")
     (if (= wf 1.0)
     (setq ang2 (angtos (angle pt1 pt2)0 4) )
     (setq ang2 (angtos (angle pt2 pt1)0 4) )
     )
     (command "text"  pt4 th ang2 str_1 )
  )

(defun a-get-Angle(ename point / p1 v1 pt-ang)
  (setq v1 (vlax-curve-getfirstderiv ename (vlax-curve-getparamatpoint ename point))
        p1 (mapcar '+ point v1)
        pt-ang (angle point p1))
        pt-ang
  )


(defun c:sz ()
   (setq xz 1)
   (while (/= xz "")
   (setq xz (getstring "\n\n\n\n [回车退出/文字高度(H)/文字宽度比例(B)/桩号间距(J)/桩号标注方向(F)/文字方向(X)/前缀(Z)/千米位(Q)]:"))
  (cond
     ((= xz "H") "h")
     ((= xz "B") "b")
     ((eq xz "J") "j")
     ((eq xz "F") "f")
     ((eq xz "X") "x")
     ((eq xz "Z") "z")
     ((eq xz "Q") "q")
     (T xz)
)
   (if (= xz nil) exit)
   (if (= xz "h")
     (progn
   (setq str_2 (strcat "\n\n\n\n 文字高度<" (rtos (getvar "textsize") 2) ">:"))
   (setq th (getreal str_2))
    (if (= th nil) (setq th (getvar "textsize")))
   )
     )

   (if (= xz "b")
     (progn
   (setq zk (getreal "\n\n\n\n\n [文字宽高比例]<0.67>:"))
   (if (= zk nil)  (setq zk 0.67))
   (Command "-style" "道路桩号" "仿宋_GB2312" "" zk ""  "n" "n")
     )
)

(if (= xz "j")
   (if (= nil (setq dist (getreal "\n\n\n\n\n [桩号间距]<20>:"))) (setq dist 20.0))
  )
   
   (if (= xz "f")
     (progn
   (setq fxxz (getstring "\n\n\n\n\n [桩号标注方向[正(Z)/反(F)]<Z>:"))
   (if (= fxxz nil) (setq fxxz "z"))
   (if (= fxxz "z")
       (setq fx 1.0)
       (setq fx -1.0)
    )
   
     (setq wf (* wf fx))
    )
     )

     
(if (= xz "x")
  (progn
(if (= nil (setq WZFX (getstring "\n\n\n\n\n 文字方向[前进(Q)/后退(H)]<Q>:"))) (setq WZFX "q"))
      (if (= wzfx "q")
       (setq wf 1.0)
       (setq wf -1.0)
    )
  )
)
(if (= xz "z")
(setq qz (getstring "\n\n\n\n\n 前缀(去除前缀请直接回车):"))
  )

     
;;;(initget 1 "1 0")
(if (= xz "q")
(if (= nil (setq qmw (getint "[整百桩位标注(0)/全部标注(1)]<0>:"))) (setq qmw 0))
)

     
     )
   )



[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-8-20 17:24:04 | 显示全部楼层
这个确实有用,下载下来看看



我用了一下,可以,要是能够自己设定起点开始标注就好啦,又不知道修改,楼主能否帮忙在完善一下哎
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-21 19:21:26 | 显示全部楼层
楼主,为什么我运行bz后在直线或曲线上不能画上桩号?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2074个

财富等级: 金玉满堂

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

使用道具 举报

发表于 2006-8-22 08:26:46 | 显示全部楼层
最初由 8550225 发布
[B]这个确实有用,下载下来看看



我用了一下,可以,要是能够自己设定起点开始标注就好啦,又不知道修改,楼主能否帮忙在完善一下哎 [/B]

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

使用道具 举报

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

使用道具 举报

已领礼包: 2074个

财富等级: 金玉满堂

 楼主| 发表于 2006-8-30 08:25:41 | 显示全部楼层
旅游回来,过来看看,楼上不能标注的请检查自己的比例,字体或者图层,至于标注的时候选择起点,标注前后缀,起始桩号,桩号方向我正在编程实现,期待中……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-31 15:16:14 | 显示全部楼层
标注后除标注文字之外,其他所有的东西都没有了,请问是何缘故?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2074个

财富等级: 金玉满堂

 楼主| 发表于 2006-9-2 11:10:25 | 显示全部楼层
桩号图层的文字将被删除,便于重复标注,不喜欢可以去掉这段代码:
[php]
   ;;删除原来标注
   (Command "layer" "f" "*"  "")
   (Command "erase" "all"  "")
   (Command "layer" "t" "*"  "")

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

使用道具 举报

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

使用道具 举报

已领礼包: 2074个

财富等级: 金玉满堂

 楼主| 发表于 2006-11-16 11:58:44 | 显示全部楼层
程序位两步,第一步选择中心线,然后把中心线连接成一条直线并移动到特定图层上,第二步选择以后就直接标注桩号了,由于本人水平有限,桩号只能处理一条线段,因此要把多条直线连接成一条来标注。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-26 12:28:24 | 显示全部楼层
呵呵,非常好用的程序,如果能输入标注间距以及初始自定义字高、前缀就更好了,还有保留的小数位。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-28 11:45:17 | 显示全部楼层
dabingrain  
我运行了为什么桩号都重叠在一起了呢?请楼主认真帮忙看一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2074个

财富等级: 金玉满堂

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

使用道具 举报

发表于 2009-4-24 14:56:13 | 显示全部楼层
13楼的情况我也碰到了,但如果要标注之间将起点处视图放至最大,则不会出现重叠现象。好象我还上你网站说起过这事1.如果一条线的全部或部分显示在屏幕上,标注时文字和短线就不能在正确位置上标,CAD视图可见的部分重叠在起点上了,要先将起点放大到见不到第二个桩
号,才能在正确位置上标注;2.SZ设置命令有时不起作用,选择项目时并无相关对话出现,不知为什么?另外插件设置成功时未提示采用的设置,不知道设置是否成功,要反复操作才明白,不甚方便;
3.最好注明起点,终点;4.文字偏离短线段距离较小,按现在两倍距离就差不多; 
5.不能单独取点进行标注,如起点为136.789,,需要先标注到140,再标注后面桩号.7最好将文字与横线成块.谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 16:13 , Processed in 0.542652 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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