明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5961|回复: 14

[基础] 求高手看看“沿曲线标注桩号”的小问题

  [复制链接]
发表于 2011-6-30 01:24:45 | 显示全部楼层 |阅读模式
(defun c:ezhbz ()
   (setvar "cmdecho" 0)
   (setq os (getvar "osmode"))
   (setvar "osmode" 0)
   (setq str_2 (strcat "\n给定文字高度<" (rtos (getvar "textsize") 2) ">:"))
   (setq th (getreal str_2))
   (if (= th nil) (setq th (getvar "textsize")))
   (if (setq en (car (entsel "\n选择路径曲线:")))
   (redraw en 3)
   (*error* "\n没有选到曲线!")
   )
   (if (= nil (setq dist (getreal "\n给定间距<50m>:"))) (setq dist 50.0))
   (setq nn 1)
   (while
   (setq pt1 (vlax-curve-getPointAtDist en (* nn dist)))
   (setq zhz (* nn dist))
   (if (< zhz 1000.0) (setq str_1 (strcat "K0+" (rtos zhz 2 3) "m")))
   (if (>= zhz 1000.0)
   (progn
   (setq nn1 (fix (/ zhz 1000.0)))
   (setq nn2 (- zhz (* 1000.0 nn1)))
   (setq str_1 (strcat "K" (rtos nn1 2) "+" (rtos nn2 2 3) "m"))
   (if (= nn2 0.0) (setq str_1 (strcat "K" (rtos nn1 2) "+000m")))
   )
   )
   (setq ang (a-get-Angle en pt1))
   (setq pt2 (polar pt1 (+ (/ pi 2) ang) (* th 8)))
   (command "line" pt1 pt2 "")
   (setq ang2 (r2d (angle pt2 pt1)))
   (command "text" "bl" pt2 th ang2 str_1 )
  
   (setq nn (1+ nn))
   )
   (redraw en 4)
   (setvar "osmode" os)
   (princ)
  )
  
  ;切线角度pt-ang
  (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
  )
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2011-7-1 02:19:37 | 显示全部楼层
此程序急用,但是有错误,高手能改一下么
发表于 2011-7-1 06:32:05 | 显示全部楼层
修改了一下

本帖子中包含更多资源

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

x
发表于 2011-7-1 08:29:27 | 显示全部楼层
我也改了一下

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-7-1 17:39:38 | 显示全部楼层
感谢两位的精彩演绎,同学们都可以进来看看,学习一下。还可以在此基础上适当发挥,搞成合适自己的。
 楼主| 发表于 2011-7-1 17:42:40 | 显示全部楼层
我把两位的源码贴出来,LJPNJ的
(defun c:ezhbz ()
  (setvar "cmdecho" 0)
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
  (command "undo" "be")
  (setq
    str_2 (strcat "\n给定文字高度<" (rtos (getvar "textsize") 2) ">:")
  )
  (setq th (getreal str_2))
  (if (= th nil)
    (setq th (getvar "textsize"))
    (setvar "textsize" th)
  )
  (if (setq en (car (entsel "\n选择路径曲线:")))
    (progn
      (redraw en 3)
      (if (= nil (setq dist (getreal "\n给定间距<50m>:")))
        (setq dist 50.0)
      )
      (setq nn 1)
      (setq endpoint (vlax-curve-getEndPoint en))
      (setq l (vlax-curve-getDistAtPoint en endpoint))
      (while (<= (setq zhz (* nn dist)) l)
        (setq pt1 (vlax-curve-getPointAtDist en zhz))
        (if (< zhz 1000.0)
          (setq str_1 (strcat "K0+" (rtos zhz 2 3) "m"))
          (progn
            (setq nn1 (fix (/ zhz 1000.0)))
            (setq nn2 (- zhz (* 1000.0 nn1)))
            (setq
              str_1 (strcat "K" (rtos nn1 2) "+" (rtos nn2 2 3) "m")
            )
            (if        (= nn2 0.0)
              (setq str_1 (strcat "K" (rtos nn1 2) "+000m"))
            )
          )
        )
        (setq ang (a-get-Angle en pt1))
        (setq pt2 (polar pt1 (+ (/ pi 2) ang) (* th 8)))
        (command "line" "non" pt1 "non" pt2 "")
        (setq ang2 (angle pt2 pt1))
        (command "text" "bl" "non" pt2 th ang2 str_1)
        (setq nn (1+ nn))
      )
      (redraw en 4)
    )
    (princ "\n没有选到曲线!")
  )
  (setvar "osmode" os)
  (command "undo" "e")
  (setvar "cmdecho" 1)
  (princ)
)
  
  
;;;切线角度pt-ang
(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
)
 楼主| 发表于 2011-7-1 17:44:57 | 显示全部楼层
ZHYNT的
(defun c:ezhbz ()
  (setvar "cmdecho" 0)
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
  (setq
    str_2 (strcat "\n给定文字高度<" (rtos (getvar "textsize") 2) ">:")
  )
  (setq th (getreal str_2))
  (if (= th nil)
    (setq th (getvar "textsize"))
  )
  (if (setq en (car (entsel "\n选择路径曲线:")))
    (redraw en 3)
    (*error* "\n没有选到曲线!")
  )
  (if (= nil (setq dist (getreal "\n给定间距<50m>:")))
    (setq dist 50.0)
  )
  (setq objen (vlax-ename->vla-object en))  
  (setq        objen_l        (vlax-curve-getDistAtPoint
                  objen
                  (vlax-curve-getEndPoint objen)
                )
  )
  (setq nn (fix (/ objen_l dist)))
  (repeat nn
    (setq pt1 (vlax-curve-getPointAtDist objen (* nn dist)))
    (setq zhz (* nn dist))
    (if        (< zhz 1000.0)
      (setq str_1 (strcat "K0+" (rtos zhz 2 3) "m"))
    )
    (if        (>= zhz 1000.0)
      (progn
        (setq nn1 (fix (/ zhz 1000.0)))
        (setq nn2 (- zhz (* 1000.0 nn1)))
        (setq str_1 (strcat "K" (rtos nn1 2) "+" (rtos nn2 2 3) "m"))
        (if (= nn2 0.0)
          (setq str_1 (strcat "K" (rtos nn1 2) "+000m"))
        )
      )
    )
    (setq ang (a-get-Angle objen pt1))
      
    (setq pt2 (polar pt1 (+ (/ pi 2) ang) (* th 8)))
      
    (command "line" pt1 pt2 "")
      
    (setq ang2 (/ (* (angle pt2 pt1) 180) pi))
    (command "text" "bl" pt2 th ang2 str_1)
      
    (setq nn (1- nn))
  )
    
  ;; (redraw en 4)
    
  (setvar "osmode" os)
    
  (princ)
)
  
;;切线角度pt-ang
  
(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
    
)
发表于 2012-5-14 17:14:17 | 显示全部楼层
yfanzi 发表于 2011-7-1 17:44
ZHYNT的
(defun c:ezhbz ()
  (setvar "cmdecho" 0)

出现错误,错误: no function definition: VLAX-ENAME->VLA-OBJECT
怎么回事,谢谢。
发表于 2012-5-15 06:58:19 | 显示全部楼层
yxh1202 发表于 2012-5-14 17:14
出现错误,错误: no function definition: VLAX-ENAME->VLA-OBJECT
怎么回事,谢谢。

加上(vl-load-com)就可以了。有一部分扩展函数高版本CAD没有自动加载,需要手动加载。
发表于 2012-5-15 08:14:10 | 显示全部楼层
zdqwy19 发表于 2012-5-15 06:58
加上(vl-load-com)就可以了。有一部分扩展函数高版本CAD没有自动加载,需要手动加载。

谢谢,俺的lisp知识还是太浅了,再次感谢各位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 06:22 , Processed in 0.213498 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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