批量测量弧长半径弓高
(defun c:hgg ();;;;;;批量测量弧长半径弓高(setq ssg (ssget '((0 . "ARC"))))
(setq i 0)
(repeat (setq en (sslength ssg))
(progn (setq ee (ssname ssg i))
(setq ve (vlax-ename->vla-object ee)
pt (vlax-curve-getPointAtDist
ve
(* 0.5 (vla-get-ArcLength ve))
)
)
(setq al (vla-get-ArcLength ve))
(setq banjing (vla-get-Radius ve))
(setq jiaodu (vla-get-TotalAngle ve))
(setq gonggao (- banjing (* banjing (cos (/ jiaodu 2)))))
(command "ucs" "v" )
(vl-cmdf "text"
"j"
"m"
(trans pt 0 1)
""
""
(strcat "\n半径:"(rtos banjing 2 0 )""
"拱高:"(rtos gonggao 2 0)""
"弧长:"(rtos al 2 0)) "" "")
)
(command "ucs" "p" )
(setq i (1+ i))
)
) 全是Vlisp函数啊,不懂啊? 好东西多谢分享 要是能保留两位小数,同时附上单位,就好了。 不错感谢分享! 这个好像很强大,下来试试,多谢楼主分享!
;;;改了一下
(defun c:ggg()
(vl-load-com)
(setq DOC (vla-get-activedocument (vlax-get-acad-object))
zg2.5;文字高度
)
(if (= (tblsearch "style" (setq ztm "stz0.7")) nil)
(command "_style" ztm"宋体" "" 0.7 "" "" "")
)
(if (setq ssa (ssget '((0 . "arc"))))
(vlax-for ent (vla-get-activeselectionset DOC)
(setq p0 (vlax-curve-getstartpoint ent)
pn (vlax-curve-getendpoint ent)
pz (mapcar '* '(0.5 0.5) (mapcar '+ p0 pn))
rr (vla-get-Radius ent)
ll (vla-get-ArcLength ent)
pm (vlax-curve-getPointAtDist ent (* 0.5 ll))
gg (distance pm pz)
an (- (angle pz pm) (* 0.5 pi))
)
(setq obj (vla-addtext (vla-get-modelspace DOC)
(strcat "半径:" (rtos rr 2 3 ) ""
"拱高:" (rtos gg 2 3) ""
"弧长:" (rtos ll 2 3)
)
(vlax-3D-point pm)
zg
)
)
(vla-put-StyleName obj ztm)
(vla-put-Alignment obj 10)
(vla-put-TextAlignmentPoint obj (vlax-3D-point pm))
(vla-put-Rotation obj an)
)
)
(princ)
)
页:
[1]