Command: (LOAD "C:/Users/rolis/OneDrive/Área de Trabalho/TG ROAD - Copia - Copia.lsp") C:ROAD
Command: TG
Select polylines/Arc :
Select objects: 1 found
Select objects:
Taille du texte <59.9340>:
ERRO : Parâmetro não opcional
Cannot invoke (command) from *error* without prior call to (*push-error-using-command*).
Converting (command) calls to (command-s) is recommended.
, AND NEED CLICKING ON SITE TO INSERT TEXT,
I TRIED TO IMPROVE WITH MY MOUNT, TO ADD THE TEXT TO THE SIZE I HAVE SELECTED, BUT IS ERRORING THE LIST
The Lisp loaded down this clean wheel 100%, but still does not have all the calculation parings, but ADD the texts altomatically
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(vl-load-com)
(DEFUN C:TG () (C:ROAD))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:ROAD ( / *error* c_doc spc sv_lst sv_vals nw_style nw_font htx ss o_type pr
pt_start pt_end seg_len seg_bulge rad alpha m_pt t_ang t_str nw_obj
ll ur att_pt t_width)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun *error* ( msg )
(mapcar 'setvar sv_lst sv_vals)
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")) (princ (strcat "\nOops an Error : " msg " occurred.")))
(princ)
);end_*error*_defun
(setq c_doc (vla-get-activedocument (vlax-get-acad-object))
spc (if (= 1 (getvar 'cvport))
(vla-get-paperspace c_doc)
(vla-get-modelspace c_doc)
);end_if
sv_lst (list 'osmode 'cmdecho 'textstyle 'TEXTSIZE);;system variable names list
sv_vals (mapcar 'getvar sv_lst);;get current values
);end_setq
(cond ( (null (tblsearch "LAYER" "TGCOTA")) (vlax-put (vla-add (vla-get-layers c_doc) "TGCOTA") 'color 7)))
(cond ( (null (tblsearch "STYLE" "DIM"))
(setq nw_style (vla-add (vla-get-textstyles c_doc) "DIM")
nw_font (strcat (getenv "systemroot") "\\Fonts\\Arial.ttf")
);end_setq
(mapcar '(lambda (pr val) (vlax-put-property nw_style pr val))
(list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag)
(list nw_font 0.0 (/ (* 0.0 pi) 180) 1.0 0.0)
);end_mapcar
)
);end_cond
; (mapcar 'setvar sv_lst (list 0 0 1 90.0))
(initget 6)
(setq htx (getreal (strcat "\nSpecify text height <" (rtos (getvar "TEXTSIZE")) "> : ")))
(if (not htx) (setq htx (getvar 'TEXTSIZE)))
(mapcar 'setvar sv_lst (list 0 0 "DIM" htx)); give them the values you want
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(vla-startundomark c_doc)
(prompt "\nSelect polylines : ")
(while (null (setq ss (ssget '((0 . "LWPOLYLINE")))))
(princ "\nSelection is Empty. Selected Items were not LWPolylines!")
);end_while
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IMPROVISATION
(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)
)
(sublisp01_draw_lines_in_arc)
(sublisp02_CHANGENT)
(sublisp03_draw_CHMARKS)
)
(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 (/ 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)
)
(sublisp01_draw_lines_in_arc)
(sublisp02_CHANGENT)
(sublisp03_draw_CHMARKS)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IMPROVISATION
(if (< (/ pi 2) t_ang (* (/ pi 2) 3)) (setq t_ang (+ t_ang pi)))
(if (= seg_bulge 0.0)
(setq t_str (strcat "Az:" (vl-string-subst "%%d" "d" (angtos alpha 1 4)) "\\P DISTANCE:" (rtos seg_len 2 3) "m" ))
(setq t_str (strcat "CURVE ?" "m\\P AC:" (angtos (- pi (* 2 alpha)) 0 4) "%%d" "d" "m\\P TG: ?" "m\\P RAY:" (rtos rad 2 3) "m\\P DISTANCE:" (rtos seg_len 2 3)"m."))
);end_if
(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) 0.5))
);end_setq
);end_if
(mapcar '(lambda (pr val) (vlax-put nw_obj pr val))
;(list 'AttachmentPoint 'Insertionpoint 'Height 'DrawingDirection 'StyleName 'Layer 'Rotation 'Width)
;(list att_pt m_pt (getvar 'TEXTSIZE) 5 "DIM" "TGCOTA" t_ang t_width)
(list 'AttachmentPoint 'Insertionpoint 'Height 'DrawingDirection 'Rotation 'Width)
(list att_pt m_pt (getvar 'TEXTSIZE) 5 t_ang 0.0)
);end_mapcar
);end_repeat
);end_for
(mapcar 'setvar sv_lst sv_vals)
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(princ)
);end_defun
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SUBLISP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq chainage_pi 3.1415926535897932384626433832795
chainage_halfpi 1.5707963267948966192313216916398
chainage_twopi 6.2831853071795864769252867665590
chainage_oneandahalfpi 4.7123889803846898576939650749193)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SUBLISP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C: sublisp01_draw_lines_in_arc ( / )
(command "._line" pt_start pt_vtx "")
(command "._line" pt_vtx pt_end "")
(command "._line" pt_start pt_cen "")
(command "._line" pt_cen pt_end "")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SUBLISP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CHANGENT - Draw tangent marks where segments join (but not at start or end of polyline)
(defun sublisp02_CHANGENT ( / SOURCEpolyline COUNThrough TANGENTmark i1 ANGLEand ANGLE_start POINTangent)
(if (/= (setq SOURCEpolyline (chainage_selectpline)) nil)
(progn
(setq COUNThrough 0 TANGENTmark (* (getvar "TEXTSIZE") 0.75))
(repeat (length SOURCEpolyline)
(setq i1 (nth COUNThrough SOURCEpolyline))
(if (> COUNThrough 0)
(progn
(if (= (car i1) "LINE")
(setq ANGLE_start (+ (angle (nth 1 i1) (nth 2 i1)) chainage_halfpi))
(progn
(setq ANGLE_start (nth 6 i1))
(if (< ANGLE_start (nth 7 i1))
(setq ANGLE_start (+ ANGLE_start chainage_pi))
)
)
)
(setq ANGLEand (/ (+ ANGLEand ANGLE_start) 2.0) POINTangent (nth 1 i1))
(entmake (list (cons 0 "LINE") (cons 100 "AcDbEntity") (cons 100 "AcDbLine")
(append (list 10) (polar POINTangent ANGLEand TANGENTmark))
(append (list 11) (polar POINTangent (+ ANGLEand chainage_pi) (* TANGENTmark 60)))))
(entmake (list (cons 0 "CIRCLE") (cons 100 "AcDbEntity") (cons 100 "AcDbCircle")
(append (list 10) (polar POINTangent ANGLEand (* TANGENTmark 1.35)))
(cons 40 (* TANGENTmark 0.35))))
(entmake (list (cons 0 "CIRCLE") (cons 100 "AcDbEntity") (cons 100 "AcDbCircle")
(append (list 10) (polar POINTangent (+ ANGLEand chainage_pi) (* TANGENTmark 1.35)))
(cons 40 (* TANGENTmark 0.35))))
)
)
(if (= (car i1) "LINE")
(setq ANGLEand (+ (angle (nth 1 i1) (nth 2 i1)) chainage_halfpi))
(progn
(setq ANGLEand (nth 7 i1))
(if (< (nth 6 i1) ANGLEand)
(setq ANGLEand (+ ANGLEand chainage_pi))
)
)
)
(setq COUNThrough (1+ COUNThrough))
)
(princ "\nCommand finished")
)
)
(chainage_atend)
(princ)
)
; SOURCEpolyline = source polyline parsed list
; COUNThrough = count through list SOURCEpolyline
; TANGENTmark = size of tangent mark
; i1 = item in list SOURCEpolyline
; ANGLEand = angle at end of segment
; ANGLE_start = angle at start of next segment
; POINTangent = position of tangent mark on polyline
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SUBLISP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:sublisp03_draw_CHMARKS (/ SOURCEpolyline CHAINAGEmark CHAINAGEmarklength REGULARinterval CHAINAGEstyle CHAINAGEinitial CHAINAGEend)
(chainage_atstart)
(if (/= (setq SOURCEpolyline (chainage_selectpline)) nil)
(progn
(setq CHAINAGEmark (chainage_getglobalvalue "\nEnter chainage value at start of polyline"
chainage_chatstart 0.0 nil))
(setq chainage_chatstart CHAINAGEmark)
(setq CHAINAGEmarklength (getvar "TEXTSIZE"))
(setq REGULARinterval (chainage_getglobalvalue "\nEnter interval between chainage marks (min. interval of 1.0)"
chainage_reginterval 10.0 nil))
(if (< REGULARinterval 1.0)
(setq REGULARinterval 1.0)
)
(setq chainage_reginterval REGULARinterval)
(setq CHAINAGEstyle (chainage_getglobalvalue "\nEnter chainage mark style (1=n.nnn 2=n+nn 3=n+nn.nn)"
chainage_markstyle 1 T))
(if (or (< CHAINAGEstyle 1) (> CHAINAGEstyle 3))
(setq CHAINAGEstyle 1)
)
(setq chainage_markstyle CHAINAGEstyle)
(setq CHAINAGEinitial (- CHAINAGEmark (rem CHAINAGEmark REGULARinterval)))
(if (< CHAINAGEinitial CHAINAGEmark)
(setq CHAINAGEinitial (+ CHAINAGEinitial REGULARinterval))
)
(setq CHAINAGEend (+ CHAINAGEmark (parse_polyline_getlen SOURCEpolyline)))
(while (<= CHAINAGEinitial CHAINAGEend)
(chmark_draw SOURCEpolyline CHAINAGEmark CHAINAGEinitial CHAINAGEstyle CHAINAGEmarklength)
(setq CHAINAGEinitial (+ CHAINAGEinitial REGULARinterval))
)
(princ "\nCommand finished")
)
)
(chainage_atend)
(princ)
)
; Draw chainage marks (e.g. "100.000 -") at regular intervals along source polyline
; Global Variables:
; =================
; chainage_chatstart = chainage value at start of polyline
; chainage_reginterval = regular interval between chainage marks
; chainage_markstyle = how to display chainage 1 = n.nnn 2 = n+nn 3 = n+nn.nn
; Internal Variables:
; ===================
; SOURCEpolyline = source polyline parsed list
; CHAINAGEmark = chainage value at start of polyline
; CHAINAGEmarklength = chainage mark line length
; REGULARinterval = regular interval between chainage marks
; CHAINAGEstyle = chainage mark number style
; CHAINAGEinitial = chainage of initial and then current chainage mark
; CHAINAGEend = chainage at end of polyline
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;