明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 788|回复: 3

[基础] 画一条多段线在它的子段注记长度

[复制链接]
发表于 2014-12-16 15:20 | 显示全部楼层 |阅读模式
求解lisp编程,画一条多段线在它的子段注记长度
发表于 2014-12-17 06:53 | 显示全部楼层
论坛里有了,找一下就是。
发表于 2014-12-21 08:49 | 显示全部楼层
  1. ;多段线边长标注.lsp
  2. ;本源代码由 Gu_xl 编写发布! 联系方式: Email: Gu_xl@sohu.com
  3. ;;多段线边长标注2011.4
  4. (defun c:tt (/ obj pianju sHandle  pt np gx bj np xc  rr  cp n ang1 zjp ms AddText)
  5. ;;;构造text
  6.   (defun AddText (obj TextString  InsertionPoint  Height xz kb qx Alignment style / obj1 err)
  7.   (setq obj1 (vla-addtext obj TextString  (vlax-3d-point InsertionPoint)  Height))
  8.   (vla-put-Rotation obj1 xz)
  9.   (vla-put-ScaleFactor obj1 kb)
  10.   (vla-put-ObliqueAngle obj1 qx)
  11.   (vla-put-alignment obj1 Alignment)
  12.   (if (/= Alignment acAlignmentLeft)
  13.     (vla-put-TextAlignmentPoint obj1 (vlax-3d-point InsertionPoint))
  14.     (vla-put-InsertionPoint obj1 (vlax-3d-point InsertionPoint))
  15.    )
  16.    (VL-CATCH-ALL-APPLY 'vla-put-StyleName (list obj1 style))
  17.   obj1
  18.   )
  19. (setq pi2 (/ pi 2))
  20.   (setq ms (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
  21. (while (setq pen (car (entsel "\n选择多段线:")))
  22.   (setq        bcHeight 0.28 ;_ 字高
  23.         kgb         0.8 ;_ 宽高比
  24.         Style         "standard" ;_ 字体
  25.         ZJWS         2 ;_ 注记位数
  26.         DimScale 1 ;_ 边长尺度,若单位为mm,该值为1000
  27.         flag         nil ;_ 标注在多段线走向的右侧,T 左侧
  28.   ) ;_ setq
  29.   (setq pianju (* bcHeight 0.7)) ;_ 边长离线距离
  30.   (setq obj (vlax-ename->vla-object pen)
  31.         n 0)
  32.   (while (and (setq pt (vlax-curve-getPointAtParam obj n))
  33.               (setq np (vlax-curve-getPointAtParam obj (1+ n)))
  34.          ) ;_ 结束and
  35.     (if        (/= 0.0 (setq bugle (vla-GetBulge obj n)))
  36.       (progn
  37.         (setq midpt (vlax-curve-getPointAtParam obj (+ 0.5 n))
  38.              bj (* (atan (abs bugle)) 4)
  39.             xc (* 0.5 (distance Pt np))
  40.             gg (abs (* bugle xc))
  41.             rr (/ (+ (* xc xc) (* gg gg)) (* 2 gg))
  42.             ang1 (angle pt np)
  43.             cp (polar Pt ang1 xc)
  44.             cp (polar midpt (angle midpt cp) rr)
  45.             bc (rtos (/ (- (vlax-curve-getDistAtParam obj (1+ n)) (vlax-curve-getDistAtParam obj n)) DimScale) 2 ZJWS)
  46.               )
  47.         (if flag
  48.             (setq zjp (polar midpt (cond ((> bugle 0)(angle midpt cp))(t (angle  cp midpt))) pianju))
  49.             (setq zjp  (polar midpt (cond ((> bugle 0)(angle  cp midpt))(t (angle midpt cp))) pianju))
  50.       )
  51.         (if (not (or (and (>= ang1 0) (< ang1 (* 0.666666 pi))) (and (> ang1 (* 1.666666 pi)) (< ang1 (* 2.0 pi)))))
  52.           (setq ang1 (- ang1 pi))
  53.           )
  54.         (AddText ms bc  zjp  bcHeight ang1 kgb 0 acAlignmentMiddle Style)
  55.       );progn
  56.       (progn
  57.         (setq midpt (vlax-curve-getPointAtParam obj (+ 0.5 n))
  58.               ang1 (angle pt np)
  59.               bc (rtos (/ (- (vlax-curve-getDistAtParam obj (1+ n)) (vlax-curve-getDistAtParam obj n)) DimScale)  2 ZJWS)
  60.               )
  61.         (if flag
  62.             (setq zjp (polar midpt (+ pi2 ang1) pianju))
  63.           (setq zjp (polar midpt (- ang1 pi2) pianju))
  64.                )
  65.         (if (not (or (and (>= ang1 0) (< ang1 (* 0.666666 pi))) (and (> ang1 (* 1.666666 pi)) (<= ang1 (* 2.0 pi)))))
  66.           (setq ang1 (- ang1 pi))
  67.           )
  68.         (AddText ms bc  zjp  bcHeight ang1 kgb 0 acAlignmentMiddle Style)
  69.       );progn
  70.     ) ;_ 结束if
  71.     (setq n (1+ n))
  72.   ) ;_ 结束while
  73. )
  74.   (princ)
  75.   )
看看这个gu版的是不是您想要的。
 楼主| 发表于 2014-12-23 11:27 | 显示全部楼层
newbuser 发表于 2014-12-21 08:49
看看这个gu版的是不是您想要的。

可能没有你找的好,不过你可以看看
(defun pline-text (ent-nume / ent i pline-lst text-ang text-dis text-pt)
        (setq ent(entget ent-nume))
        (setq pline-lst '())
        (foreach key ent
                (if (= (car key) 10)
                          (setq pline-lst (append pline-lst (list (cdr key))))
          )
        )
        (setq i 0)
        (repeat (1- (length pline-lst))
                (setq text-pt(mid-pt (nth i pline-lst) (nth (1+ i) pline-lst)))
                (setq text-dis (distance (nth i pline-lst) (nth (1+ i) pline-lst)))
                (setq text-ang (angle (nth i pline-lst) (nth (1+ i) pline-lst)))
          (entmakex (list '(0 . "TEXT") '(100 . "AcDbEntity") '
    (100 . "AcDbText") (cons 1 (rtos text-dis 2 3))
    (cons 10 text-pt)'(62 . 5)(cons 40 100)(cons 50 text-ang)
     ))
                (setq i (1+ i))                 
)
        )

(defun mid-pt (pt1 pt2)
        (mapcar '(lambda (pt1 pt2)
                (/ (+ pt1 pt2) 2)       
        )
        pt1 pt2
)
)
(defun c:5()
        (pline-text (car (entsel)))
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 15:58 , Processed in 0.246162 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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