hi,
sure it can. check the following code. block 'c45' should be defined in the drawing.
(defun c:mark_segment_angle ( / param repeat_count vector_1 vector_2 cos_alpha sin_alpha alpha)
(if (setq pline_sset (ssget '((0 . "lwpolyline"))))
(foreach pline (vl-remove-if 'listp (mapcar 'cadr (ssnamex pline_sset)))
(setq param 0
repeat_count (fix (vlax-curve-getendparam pline))
)
(repeat (1- repeat_count)
(setq vector_1 (vlax-curve-getfirstderiv pline param)
vector_2 (vlax-curve-getfirstderiv pline (setq param (1+ param)))
cos_alpha (/ (apply '+ (mapcar '* vector_1 vector_2))
(* (sqrt (apply '+ (mapcar 'expt vector_1 '(2 2))))
(sqrt (apply '+ (mapcar 'expt vector_2 '(2 2))))
)
)
)
(cond
(
(equal 0 cos_alpha 1e-8)
(setq alpha (* 0.5 pi))
)
(
(equal 1.0 cos_alpha 1e-8)
(setq alpha 0)
)
(
t
(setq sin_alpha (sqrt (- 1 (expt cos_alpha 2)))
alpha (atan (/ sin_alpha cos_alpha))
)
)
)
(cond
(
(< (/ (* 40 pi) 180) alpha (/ (* 47 pi) 180))
(vla-insertblock (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
(vlax-3d-point (vlax-curve-getpointatparam pline param))
"c45"
0.0254 0.0254 0.0254 0
)
)
(
t
)
)
; (print (angtos alpha 1 6))
)
)
)
(princ)
)