也看过一些楼主发的帖子,我想这应该不能难倒楼主啊,如下是帮你改了以后的程序,试试看看是否是你想要的结果。 - ;;;多义线边长标注
- (defun c:bcbz (/ obj pianju sHandle pt np gx bj np xc rr cp n ang1 zjp ms AddText pen-n pen-all)
- ;;;构造text
- (command "layer" "M" "边长标注" "C" "3" "" "LT" "CONTINUOUS" "" "");设置一个标注图层
- (command "style" "tukou" "宋体" "0" "" "0" "" "")
- (defun AddText (obj TextString InsertionPoint Height xz kb qx Alignment style / obj1 err)
- (setq obj1 (vla-addtext obj TextString (vlax-3d-point InsertionPoint) Height))
- (vla-put-Rotation obj1 xz)
- (vla-put-ScaleFactor obj1 kb)
- (vla-put-ObliqueAngle obj1 qx)
- (vla-put-alignment obj1 Alignment)
- (if (/= Alignment acAlignmentLeft)
- (vla-put-TextAlignmentPoint obj1 (vlax-3d-point InsertionPoint))
- (vla-put-InsertionPoint obj1 (vlax-3d-point InsertionPoint))
- )
- (VL-CATCH-ALL-APPLY 'vla-put-StyleName (list obj1 style))
- obj1
- )
- (setq pi2 (/ pi 2))
- (setq ms (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
- (setq bcHeight (getdist "\n输入标注文字高度:");文字高度
- kgb 0.8 ; 宽高比
- Style "BG_ST" ; 字体
- ZJWS 2 ;_ 注记位数
- DimScale 1 ; 边长尺度,若单位为mm,该值为1000
- flag nil ;标注在多段线走向的右侧,T 左侧
- ) ;_ setq
- (setq pen-n 0)
- (if (setq pen-all (ssget '((0 . "*polyline"))))
- (repeat (sslength pen-all)
- (setq pianju (* bcHeight 0.7)) ;边长离线距离
- (setq pen-en (ssname pen-all pen-n))
- (setq obj (vlax-ename->vla-object pen-en)
- n 0)
- (while (and (setq pt (vlax-curve-getPointAtParam obj n))
- (setq np (vlax-curve-getPointAtParam obj (1+ n)))
- ) ;_ 结束and
- (if (/= 0.0 (setq bugle (vla-GetBulge obj n)))
- (progn
- (setq midpt (vlax-curve-getPointAtParam obj (+ 0.5 n))
- bj (* (atan (abs bugle)) 4)
- xc (* 0.5 (distance Pt np))
- gg (abs (* bugle xc))
- rr (/ (+ (* xc xc) (* gg gg)) (* 2 gg))
- ang1 (angle pt np)
- cp (polar Pt ang1 xc)
- cp (polar midpt (angle midpt cp) rr)
- bc (rtos (/ (- (vlax-curve-getDistAtParam obj (1+ n)) (vlax-curve-getDistAtParam obj n)) DimScale) 2 ZJWS)
- )
- (if flag
- (setq zjp (polar midpt (cond ((> bugle 0)(angle midpt cp))(t (angle cp midpt))) pianju))
- (setq zjp (polar midpt (cond ((> bugle 0)(angle cp midpt))(t (angle midpt cp))) pianju))
- )
- (if (not (or (and (>= ang1 0) (< ang1 (* 0.666666 pi))) (and (> ang1 (* 1.666666 pi)) (< ang1 (* 2.0 pi)))))
- (setq ang1 (- ang1 pi))
- )
- (AddText ms bc zjp bcHeight ang1 kgb 0 acAlignmentMiddle Style)
- );progn
- (progn
- (setq midpt (vlax-curve-getPointAtParam obj (+ 0.5 n))
- ang1 (angle pt np)
- bc (rtos (/ (- (vlax-curve-getDistAtParam obj (1+ n)) (vlax-curve-getDistAtParam obj n)) DimScale) 2 ZJWS)
- )
- (if flag
- (setq zjp (polar midpt (+ pi2 ang1) pianju))
- (setq zjp (polar midpt (- ang1 pi2) pianju))
- )
- (if (not (or (and (>= ang1 0) (< ang1 (* 0.666666 pi))) (and (> ang1 (* 1.666666 pi)) (<= ang1 (* 2.0 pi)))))
- (setq ang1 (- ang1 pi))
- )
- (AddText ms bc zjp bcHeight ang1 kgb 0 acAlignmentMiddle Style)
- );progn
- ) ;结束if
- (setq n (1+ n))
- ) ; 结束while
- (setq pen-n (1+ pen-n)))
- )
- (princ)
- )
|