This is a program I wrote almost 20 years ago, it needs other functions to run (now I have no time to prepare everything). To understand the type of dimension I use a "*** image" menu (see file JPG), I think it's quite complex to use grread for previewing the dimension.
; Quotatura automatica: orizzontale, verticale, allineata, isometrica. **** 22/12/94
(defun C:Q_ALIGN ( / PatNam pt1 pt2 pt3 pt4 ang2 count prmpt snpstl CurDst DwgScl)
;...
(setvar "ORTHOMODE" 1)
(setq
DwgScl (cond ((ALE_XData_DwgVar_GetBySpace "DWGSCALE")) (1.0))
pt1 (upoint 40 "" "First reference point" nil nil)
prmpt "Next reference point"
snpstl (getvar "SNAPSTYL") CurDst (getvar "DIMSTYLE")
pt3 pt1 pt4 pt1 ang2 nil count 0
)
(if (zerop snpstl)
(setq #ang (- (uangle 40 "" "Extension lines angle" (+ #ang (gar 90.0)) pt1) (gar 90.0)))
(progn
(or
(tblsearch "BLOCK" "$Iso_Dim_Sty")
(progn
(setq PatNam (strcat PatNam "Symbols\\$Iso_Dim_Sty"))
(command "_.INSERT" (strcat "$Iso_Dim_Sty=" PatNam)) (command)
(ALE_ReSetUp "" DwgScl DwgScl 1 nil 0)
)
)
(cond
( (= #mdiso "spsx")
(setvar "SNAPISOPAIR" 2) (setvar "TEXTSTYLE" "$ISO_SX")
(ALE_FINDDS "ISO_SX") (setq #ang (gar 30.0) ang2 (gar 90.0))
)
( (= #mdiso "spdx")
(setvar "SNAPISOPAIR" 0) (setvar "TEXTSTYLE" "$ISO_DX")
(ALE_FINDDS "ISO_DX") (setq #ang (gar 330.0) ang2 (gar 90.0))
)
( (= #mdiso "insx")
(setvar "SNAPISOPAIR" 0) (setvar "TEXTSTYLE" "$ISO_DX")
(ALE_FINDDS "ISO_DX") (setq #ang (gar 150.0) ang2 (gar 90.0))
)
( (= #mdiso "indx")
(setvar "SNAPISOPAIR" 2) (setvar "TEXTSTYLE" "$ISO_SX")
(ALE_FINDDS "ISO_SX") (setq #ang (gar 210.0) ang2 (gar 90.0))
)
( (= #mdiso "avsx")
(setvar "SNAPISOPAIR" 2) (setvar "TEXTSTYLE" "$ISO_DX")
(ALE_FINDDS "ISO_DX") (setq #ang (gar 90.0) ang2 (gar 30.0))
)
( (= #mdiso "avdx")
(setvar "SNAPISOPAIR" 0) (setvar "TEXTSTYLE" "$ISO_SX")
(ALE_FINDDS "ISO_SX") (setq #ang (gar 270.0) ang2 (gar 150.0))
)
( (= #mdiso "pvsx")
(setvar "SNAPISOPAIR" 2) (setvar "TEXTSTYLE" "$ISO_SX")
(ALE_FINDDS "ISO_SX") (setq #ang (gar 90.0) ang2 (gar 150.0))
)
( (= #mdiso "pvdx")
(setvar "SNAPISOPAIR" 0) (setvar "TEXTSTYLE" "$ISO_DX")
(ALE_FINDDS "ISO_DX") (setq #ang (gar 270.0) ang2 (gar 30.0))
)
( (= #mdiso "aosx")
(setvar "SNAPISOPAIR" 1) (setvar "TEXTSTYLE" "$ISO_SX")
(ALE_FINDDS "ISO_SX") (setq #ang (gar 150.0) ang2 (gar 30.0))
)
( (= #mdiso "aodx")
(setvar "SNAPISOPAIR" 1) (setvar "TEXTSTYLE" "$ISO_DX")
(ALE_FINDDS "ISO_DX") (setq #ang (gar 210.0) ang2 (gar 150.0))
)
( (= #mdiso "posx")
(setvar "SNAPISOPAIR" 1) (setvar "TEXTSTYLE" "$ISO_DX")
(ALE_FINDDS "ISO_DX") (setq #ang (gar 30.0) ang2 (gar 150.0))
)
( (= #mdiso "podx")
(setvar "SNAPISOPAIR" 1) (setvar "TEXTSTYLE" "$ISO_SX")
(ALE_FINDDS "ISO_SX") (setq #ang (gar 330.0) ang2 (gar 30.0))
)
(T (MYERROR "---> Modo di quotatura isometrica non specificato") (quit))
);cond
)
);if zerop
(setq
;|e|; #mdist (udist 46 "" "Dimension line distance" #mdist pt1)
pt2 (polar pt1 (+ #ang (gar 90.0)) #mdist)
)
(setvar "ORTHOMODE" 0)
(command) (command "_.DIM")
(while (setq pt3 (upoint 40 "" prmpt nil pt3))
(command "_ROTATED" (angtoc #ang) "_NONE" pt1 "_NONE" pt3 "_NONE" pt2 "")
(or (zerop snpstl) (command "_OBLIQUE" "_LAST" "" (angtoc ang2)))
;|e|; (setq pt1 pt3 count (1+ count) prmpt (strcat "<" (itoa (1+ count)) "° Point>/Return to quit"))
(and (= count 1) (setvar "DIMSE1" 1))
);while
(if (> count 1)
(if
;|e|; (= "Yes" (setq #si_no (ukword 0 "Yes No" "Total dimension? Y/N" #si_no)))
(progn
(setvar "DIMSE1" 0)
(command
"_ROTATED" (angtoc #ang) "_NONE" pt4 "_NONE" pt1 (polar pt2 (+ #ang (gar 90.0))
(* (getvar "DIMSCALE") (getvar "DIMDLI"))) ""
)
(or (zerop snpstl) (command "_OBLIQUE" "_LAST" "" (angtoc ang2)))
);progn
)
);if count
(command "_RESTORE" CurDst "_EXIT")
;...
(princ)
)
(princ)