Совсем забыл что обещал выложить свои заначки.
(defun +runa_make-line (s-point e-point)
;|
(+runa_make-text (getpoint) (getpoint))
|;
(entmake
(list
'(0 . "LINE")
'(100 . "AcDbEntity")
(cons 410 (getvar "ctab"))
(cons 8 (getvar "clayer"))
'(100 . "AcDbLine")
(cons 10 (trans s-point 1 0))
(cons 11 (trans e-point 1 0))
'(210 0.0 0.0 1.0)
)
)
(setvar "lastpoint" (trans e-point 1 0))
)
(defun +runa_scale-factor-pop (mode / gor vert po DATUM)
(if (or mode (not *runa_scale-factor-pop*) (vl-some 'not *runa_scale-factor-pop*))
(progn
(if (not (progn (initget 6)
(setq gor (getreal
(strcat "\nGorizontal scale <"
(if mode (rtos (caddr *runa_scale-factor-pop*)2 0)
"500") ">: ")))))
(setq gor (if mode (caddr *runa_scale-factor-pop*) 500.0)))
(if (not (progn (initget 6)
(setq vert (getreal
(strcat "\nVertikal scale <"
(if mode (rtos (cadddr *runa_scale-factor-pop*)2 0)
"100") ">: ")))))
(setq vert (if mode (cadddr *runa_scale-factor-pop*) 100.0)))
(while (not (setq po (getpoint "\nSpecify point for datum elevation: "))))
(while (not (setq datum (getreal "\nDatum elevation: "))))
(setq *runa_scale-factor-pop* (list
(/ gor vert)
(strcat "\tMgor=" (rtos gor 2 0) "; Mver=" (rtos vert 2 0))
gor vert
(- (cadr po) (* datum (/ gor vert)))))
)
)
*runa_scale-factor-pop*
)
(defun +runa_ele-pop (point /)
(/ (- (cadr point) (last *runa_scale-factor-pop*)) (car *runa_scale-factor-pop*))
)
(defun +runa_check-pop-set (/ word)
;|
(+runa_check-pop-set)
|;
(cond
((= 1 (getvar "worlducs")))
((or
(not (progn (initget "Yes No") (setq word (getkword "\nUcs not world. Change ucs to world [Yes/No] <Yes>: "))))
(= "Yes" word))
(setvar "ucsfollow" 0) (vl-cmdf "ucs" ""))
(t (princ "\nCannot continue program!") (exit))
)
(if (+runa_scale-factor-pop nil) (princ (cadr *runa_scale-factor-pop*)) (exit))
)
(defun c:ddl-p (/ EN_POINT heigth SLOPE ST_POINT last-ent nabor word)
(+runa_check-pop-set)
(setq last-ent (entlast))
(setq st_point (getpoint "\nStart point <Lastpoint>: "))
(if (not st_point) (setq st_point (getvar "lastpoint")))
(while
(and
(progn (initget "None Border Change") (setq slope (getreal "\nSlope or [None/Border/Changescalefactor/20/10/0/-10/-20]: ")))
(cond
((eq slope "Border") (setq heigth (getreal "\nHeigth border [20/15/10/5] <15>: "))
(setq en_point (getpoint st_point "\nNext point: ")))
((eq slope "Change") )
(t (setq en_point (getpoint st_point "\nNext point: ")))
)
); and
(cond
((eq slope "Change") (+runa_scale-factor-pop t))
((eq slope "None") (+runa_make-line st_point en_point))
((eq slope "Border")
(if
(not
heigth)
(setq heigth 15)
)
(if (< (cadr st_point) (cadr en_point))
(+runa_make-line st_point (mapcar '+ st_point (list 0.0 (* (car *runa_scale-factor-pop*) heigth 0.01) 0.0)))
(+runa_make-line st_point (mapcar '- st_point (list 0.0 (* (car *runa_scale-factor-pop*) heigth 0.01) 0.0)))
))
(slope (+runa_make-line st_point
(list
(car en_point)
(+ (cadr st_point) (* (car *runa_scale-factor-pop*) 0.001 slope (abs (- (car en_point) (car st_point)))))
(last en_point)
)))
)
(if (not (eq slope "Change")) (setq st_point (getvar "lastpoint")))
); while
(princ)
)
(defun c:ele (/ po word)
(+runa_check-pop-set)
(while (progn (initget "Change") (setq po (getpoint "\nSpecify point for elevation [Changescalefactor]: ")))
(if (eq po "Change")
(+runa_scale-factor-pop t)
(princ (strcat "\nElevation: " (rtos (+runa_ele-pop po) 2))))
)
(princ)
)
(defun c:ele-line (/ END END-EL STA-EL START)
(+runa_check-pop-set)
(initget "Change")
(setq start (getpoint "\nStart point for elevation [Changescalefactor]: "))
(if (eq start "Change")
(progn (+runa_scale-factor-pop t)
(setq start (getpoint "\nStart point for elevation: ")))
)
(if
(and start
(setq sta-el (getreal "\nElevation: ")))
(progn
(setq start (list (car start) (+ (* sta-el (car *runa_scale-factor-pop*)) (last *runa_scale-factor-pop*))))
(while
(cond
((not (setq end (getpoint start "\nNext point: "))) nil)
((not (setq end-el (getreal "\nElevation: "))) nil)
(t (+runa_make-line
start
(list (car end) (+ (* end-el (car *runa_scale-factor-pop*)) (last *runa_scale-factor-pop*)) 0.0)
))
)
(setq start (getvar "lastpoint"))
)))
(princ)
)
(defun c:elp (/ END END-EL STA-EL START)
(+runa_check-pop-set)
(while
(cond
((not (progn (initget "Change")
(setq start (getpoint "\nPoint for elevation [Changescalefactor]: ")))) nil)
((eq start "Change") (+runa_scale-factor-pop t))
((not (setq sta-el (getreal "\nElevation: "))) nil)
(t (vl-cmdf "_.point" "_none"
(list (car start) (+ (* sta-el (car *runa_scale-factor-pop*)) (last *runa_scale-factor-pop*)) 0.0)
))
)
)
(princ)
)
(defun c:uk (/ PO1 PO2 word TMP1 TMP2 TMP3 TMP4 TMP5)
(+runa_check-pop-set)
(while
(cond
((not (progn (initget "Change") (setq po1 (getpoint "\nStart point [Changescalefactor]: ")))) nil)
((eq po1 "Change") (+runa_scale-factor-pop t))
((not (setq po2 (getpoint po1 "\nEnd point: "))) nil)
(t (princ (strcat
(if (zerop (- (car po2) (car po1)))
"\nUklon = vertikal ‰"
(strcat
"\nUklon = "
(setq tmp1 (rtos (/ (- (cadr po2) (cadr po1)) 0.001 (- (car po2) (car po1)) (car *runa_scale-factor-pop*)) 2))
" ‰")
)
"\tDelta X = "
(setq tmp2 (rtos (abs (- (car po2) (car po1))) 2))
" m\tDelta Y = "
(setq tmp3 (rtos (abs (/ (- (cadr po2) (cadr po1)) (car *runa_scale-factor-pop*))) 2))
" m\nStart elevation = "
(setq tmp4 (rtos (+runa_ele-pop po1) 2))
" m\tEnd elevation = "
(setq tmp5 (rtos (+runa_ele-pop po2) 2))
" m"
)) (setq *temp-value-pop* (list tmp1 tmp2 tmp3 tmp4 tmp5)))
))
(princ)
)
Итого имеем в этом беспорядке комманды:
ddl-p - используется для построения профиля по уклонам
ele - в коммандной строке показывает отметку профиля
ele-line - строит линию по указаным точкам и отметкам
elp - ставит точку по указаному Х и заданной отметке
uk - показывает в коммандной строке уклон и еще что-то там по указаным точкам.
При первом вызове любой (вроде) комманды будет запрос на вертикальный и горизонтальный масштаб профиля, базовой точки профиля и отметки этой базовой точки.
Извиняюсь за сумбур и редкие комментарии - давно делал а сейчас некогда приводить в "вид".