(defun c:1 () (C:ROAD))
(defun c:ROAD ( / js n AcDoc Space ename obj pr nb typ_obj oldim oldlay
a_base a_dir pt_start pt_end pt_cen rad alpha pt_vtx dist_start dist_end
seg_len seg_bulge )
(defun grdraw-id_arc ()
(setvar "CLAYER" "LINE")
(command "._line" "_none" (polar pt_vtx (angle pt_vtx pt_start) 20) "_none" pt_vtx "")
(command "._line" "_none" pt_vtx "_none" (polar pt_vtx (angle pt_vtx pt_end) 20) "")
(command "._line" "_none" pt_start "_none" (polar pt_start (angle pt_start pt_cen) 35) "")
(command "._line" "_none" (polar pt_end (angle pt_start pt_cen) 35) "_none" pt_end "")
(setvar "CLAYER" "TG")
) ; ****Drawing the notable point in perpendicular this almost OK, obs...the last alignment was not perpendicular
(defun TGTEXTO (ins_txt value_str a / nw_obj)
(initget 9)
;;;To add the text perpendicular to the points noted this fragment could be written in this way
(setq ins_txt (ANGLE pt_end pt_cen) ;****Add PC text perpendicular
(vla-addMtext Space
(vlax-3d-point (trans ins_txt 1 0))
0.0
(strcat
"{\\fArial Narrow|b0|i0|c0|p34;"
"PC" (itoa nb) "}" )
)
(entmod
(vl-remove-if
(function
(lambda (x)
(or (member (car x) '(90 63 421 45))
(< 419 (car x) 440)
)
)
)
(entget (entlast))
)
)
(entupd (entlast))
) ;****Add PC text perpendicular
(setq ins_txt (ANGLE pt_start pt_cen) ;****Add PT text perpendicular
(vla-addMtext Space
(vlax-3d-point (trans ins_txt 1 0))
0.0
(strcat
"{\\fArial Narrow|b0|i0|c0|p34;"
"PT" (itoa nb) "}" )
)
(entmod
(vl-remove-if
(function
(lambda (x)
(or (member (car x) '(90 63 421 45))
(< 419 (car x) 440)
)
)
)
(entget (entlast))
)
)
(entupd (entlast))
) ;****Add PT text perpendicular
(setq ins_txt pt_vtx) ;****Add text in vertex, it´s OK
(vla-addMtext Space
(vlax-3d-point (trans ins_txt 1 0))
0.0
(strcat
"{\\fArial Narrow|b0|i0|c0|p34;"
"PI" (itoa nb) "}" )
)
(entmod
(vl-remove-if
(function
(lambda (x)
(or (member (car x) '(90 63 421 45))
(< 419 (car x) 440)
)
)
)
(entget (entlast))
)
)
(entupd (entlast))
) ;****Add text in vertex, it´s OK
(setq nw_obj (vla-addmtext spc (vlax-3d-point m_pt) 0.0 t_str))
(vla-getboundingbox nw_obj 'll 'ur)
(setq ll (vlax-safearray->list ll)
ur (vlax-safearray->list ur)
t_width (+ (* (distance ll ur) (cos (angle ll ur))) 5.0)
);end_setq
(if (>= t_width seg_len)
(setq att_pt 5
t_width seg_len
);end_setq
(setq att_pt 8
m_pt (polar m_pt (+ t_ang (/ pi 2)) (* (getvar 'TEXTSIZE) OFFSEText ))
);end_setq******* I need this fragment back, because I found that this snippet control the offset of the text from the project axis up or down with the use of the variable with the help of the OFFSETEXT that I created.
);end_if
(mapcar
'(lambda (pr val)
(vlax-put nw_obj pr val))
(list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation)
(list 5 (getvar "TEXTSIZE") 5 ins_txt "TGdim" "TGCOTA"
(if (and (< a (* pi 0.5)) (> a (* pi 1.5))) (setq a (+ a pi)) a)) )
(entmod
(append
(vl-remove-if
(function
(lambda (x)
(or (member (car x) '(90 63 421 45))
(< 419 (car x) 440))))
(entget (entlast)))
(list
'(90 . 1)
'(63 . 41)
'(421 . 16770196)
'(45 . 1.5) ) ) )
(entupd (entlast)))
(princ "\nSélectionner des Arcs/PolyArcs .")
(setq
js
(ssget
'((-4 . "<OR")
(-4 . "<AND")
(0 . "POLYLINE")
(-4 . "<NOT")
(-4 . "&") (70 . 126)
(-4 . "NOT>")
(-4 . "AND>")
(0 . "LWPOLYLINE,ARC")
(-4 . "OR>"))
)
n -1
)
(cond
(js
(setq
AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Space
(if (= 1 (getvar "CVPORT"))
(vla-get-PaperSpace AcDoc)
(vla-get-ModelSpace AcDoc) ) nb 0 )
(cond
((null (tblsearch "LAYER" "TG"))
(vlax-put (vla-add (vla-get-layers AcDoc) "TG") 'Color "252") )
);*****Add for control text, its ok
(cond
((null (tblsearch "LAYER" "LINE"))
(vlax-put (vla-add (vla-get-layers AcDoc) "LINE") 'Color "252") )
);*****Add for control line color, its ok
(cond
((null (tblsearch "LAYER" "TGCOTA"))
(vlax-put (vla-add (vla-get-layers AcDoc) "TGCOTA") 'Color 7) ) )
(cond
((null (tblsearch "STYLE" "TGdim"))
(setq nw_style (vla-add (vla-get-textstyles AcDoc) "TGdim")
nw_font (strcat (getenv "systemroot") "\\Fonts\\Arial.ttf") )
(mapcar '(lambda (pr val) (vlax-put-property nw_style pr val))
(list 'FontFile 'Height 'ObliqueAngle 'Width )
(list nw_font 0.0 (/ (* 0.0 pi) 180) 1.0 0.0) ) ) )
(setq
oldim (getvar "dimzin")
oldlay (getvar "clayer")
a_base (getvar "ANGBASE")
a_dir (getvar "ANGDIR")
)
(setvar "dimzin" 0)
(setvar "clayer" "TGCOTA")
(setvar "ANGBASE" 0)
(setvar "ANGDIR" 0)
(initget 6)
(setq h_t ((getdist (getvar "VIEWCTR") (strcat "\n Enter TEXT "))))
(setq OFFSEText ((getdist (getvar "VIEWCTR") (strcat "\n Enter OFFSET TEXT: "))))
;;I created this variable to give the text OFFSET, but it will work if the fragment above is re-add
(if (null h_t) (setq h_t (getvar "textsize")) (setvar "textsize" h_t))
(repeat (sslength js)
(setq
ename (ssname js (setq n (1+ n)))
obj (vlax-ename->vla-object ename) pr -1 nb 0 )
(setq typ_obj (vla-get-ObjectName obj))
(if (eq typ_obj "AcDbArc")
(progn
(setq
pt_start (vlax-get obj 'StartPoint)
pt_end (vlax-get obj 'EndPoint)
pt_cen (vlax-get obj 'Center)
rad (vlax-get obj 'Radius)
alpha (* (vlax-get obj 'TotalAngle) 0.5)
seg_len (vlax-get obj 'ArcLength)
pt_vtx (polar pt_cen (+ (vlax-get obj 'StartAngle) alpha)
(+ rad (* rad (1- (/ 1 (cos alpha))))))
nb (1+ nb))
)
(grdraw-id_arc)
(add_mt_arc)
)
(TGTEXTO
(mapcar '* (mapcar '+ pt_start pt_end) '(0.5 0.5 0.5))
(strcat
"{\\fARIAL|b0|i0|c0;\\C7"
"CURVA " (itoa nb)
"\\P AC:" (vl-string-subst "%%d" "d" (angtos (- pi (* 2 alpha)) 1 4))
"\\P TG:" (rtos (distance pt_start pt_vtx) 2 3)
"m\\P Raio:" (rtos rad 2 3)
"m\\P Distância: " (rtos seg_len 2 3) "m" "}" ) (angle pt_start pt_end) ) )
(repeat (fix (vlax-curve-getEndParam obj))
(setq
dist_start (vlax-curve-GetDistAtParam obj (setq pr (1+ pr)))
dist_end (vlax-curve-GetDistAtParam obj (1+ pr))
pt_start (vlax-curve-GetPointAtParam obj pr)
pt_end (vlax-curve-GetPointAtParam obj (1+ pr))
seg_len (- dist_end dist_start)
seg_bulge (vla-GetBulge obj pr) )
(if (not (zerop seg_bulge))
(progn
(setq
rad (if (zerop seg_bulge) 0.0 (abs (/ seg_len (* 4.0 (atan seg_bulge)))))
alpha (+ (angle pt_start pt_end) (- (* pi 0.5) (* 2.0 (atan seg_bulge))))
pt_cen (polar pt_start alpha rad)
pt_vtx (polar pt_start (- alpha (* pi 0.5)) (* rad (/ (sin (* 2.0 (atan seg_bulge)))
(cos (* 2.0 (atan seg_bulge))))))
alpha (if (< (* 2.0 (atan seg_bulge)) 0) (- pi (* 2.0 (atan seg_bulge)))
(* 2.0 (atan seg_bulge)))
nb (1+ nb))
)
(grdraw-id_arc)
(add_mt_arc)
)
(TGTEXTO
(vlax-curve-GetPointAtParam obj (+ 0.5 pr))
(strcat
"{\\fARIAL|b0|i0|c0;\\C7"
"CURVA " (itoa nb)
"\\P AC:" (vl-string-subst "%%d" "d" (angtos
(- pi (* 2 alpha)) 1 4))
"\\P TG:" (rtos (distance pt_start pt_vtx) 2 3)
"m.\\P Raio:" (rtos rad 2 3)
"m.\\P Distância: " (rtos seg_len 2 3) "m" "}" )
(angle pt_start pt_end) ) )
(TGTEXTO
(vlax-curve-GetPointAtParam obj (+ 0.5 pr))
(strcat
;"{\\fARIAL|b0|i0|c0;\\C7"
"{\\pxqc;"
"Distância: " (rtos seg_len 2 3)
" m.\\P Az: " (vl-string-subst "%%d" "d"
(angtos (+ (angle pt_start pt_end)
(- (* pi 0.5) (* 2.0 (atan seg_bulge)))) 1 4)) "}" )
(angle pt_start pt_end)
)
)
)
)
)
(setvar "dimzin" oldim)
(setvar "clayer" oldlay)
(setvar "ANGBASE" a_base)
(setvar "ANGDIR" a_dir)
)
)
(prin1)
)