hey there,
check the code below
(defun c:pline_dim (/ divider_saved pline_sset division_list division_count index dim_object _angle)
(if (null divider) (setq divider 3.75))
(setq divider_saved divider
pline_sset (ssget '((0 . "lwpolyline") (-4 . "<not") (-4 . "&") (70 . 1) (-4 . "not>")))
divider (getreal (strcat "\nEnter divider <" (rtos divider_saved 2 2) ">: "))
)
(if (null divider) (setq divider divider_saved))
(if pline_sset
(foreach pline (vl-remove-if 'listp (mapcar 'cadr (ssnamex pline_sset)))
(setq division_list (mapcar '(lambda (vertex) (cons (vlax-curve-getdistatpoint pline vertex) (list vertex)))
(mapcar 'cdr (vl-remove-if-not '(lambda (group) (= 10 (car group))) (entget pline)))
)
division_count (fix (/ (getpropertyvalue pline "length") divider))
index 0
)
(repeat division_count
(setq division_list (append division_list (list (cons (setq _distance (* (setq index (1+ index)) divider))
(list (vlax-curve-getpointatdist pline _distance))
)
)
)
)
)
(setq division_list (vl-sort division_list '(lambda (point_1 point_2) (< (car point_1) (car point_2)))))
(mapcar '(lambda (point_1 point_2) (progn
(setq dim_object (vla-adddimrotated (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
(vlax-3d-point (cadr point_1))
(vlax-3d-point (cadr point_2))
(vlax-3d-point (polar (cadr point_2)
(cond
(
(< (* 0.5 pi)
(setq _angle (angle '(0 0) (vlax-curve-getfirstderiv
pline
(vlax-curve-getparamatpoint pline (cadr point_1))
)
)
)
(* 1.5 pi)
)
(- _angle (* 0.5 pi))
)
(
t
(+ _angle (* 0.5 pi))
)
)
(* 2 (getvar 'dimtxt))
)
)
_angle
)
)
(vla-put-textoverride dim_object (rtos (car point_2) 2 2))
(vla-put-textrotation dim_object (cond
(
(< (* 0.5 pi) _angle (* 1.5 pi))
(+ pi _angle)
)
(
t
_angle
)
)
)
)
)
division_list
(cdr division_list)
)
)
)
(princ)
)