> 1 <

Автор Сообщение

2_hitman

Members


Статус

1 сообщений

Где: Russia
Род занятий:
Возраст:

#7014   2013-05-06 07:05 GMT+3 часа(ов)      
не работает программа для автокада которая должна позволять проложить путь по отрезкам на карте. ПОМОГИТЕ ПОЖАЛУЙСТА НАЙТИ ОШИБКУ И ИСПРАВИТЬ ЕЕ!!!!!!!!!!!!!
;;;=проверка ошибок=
(defun *error*(msg)
(if (= msg "Функция прервана")
(princ)
(princ msg)
) (princ)
)
;;;=переменные=
;;; PS-начальная точка отрезка (xPS,yPS,zPS)
;;; PS2-начальная точка отрезка в плане (без zPS)
;;; PE-конечная точка отрезка (xPE,yPE,zPE)
;;; PM-средняя точка отрезка в плане
;;; PMT-точка вставки текста

(defun C:PUT()

;;;=запоминаем установки пользователя=

(setq ort (getvar "orto"))
(setq cmde(getvar "cmdecho")); режим работы командной строки
(setq osm (getvar "osmode" )); настроики объектных привязок
(setq tsz (getvar "textsize" )); настройка высоты текста
(setvar "cmdecho" 0); отключили, вычисления в командной строке не отображаются
(setvar "osmode" 0); отключилм объектную привязку, чтобы не задеть другие примитивы
(setq rwayall 0.0); обнуление кратчайшего пути


;;;=цикл проверки отрисовки отрезков=

(while
(setq ss(ssget))
(setq name (ssname ss 0))
(setq ent (entget name))
(if (and
(= "LINE"(cdr(assoc 0 ent)))
(tur)
(progn
(setq rwayall (+ rwayall lway)); сумматор "веса" отрезков
(setq tway (/ rwayall 20.0)); время при скорости 20 км/час
(setq benzin (* rwayall 0.20)); расход бензина (20л/100км)
)
); конец and
(entdel name)
(alert "\n Выбран не ОТРЕЗОК!!! ")
); конец if
(princ)
);конец while
(entdel name)
(princ)

;;;=вывод сообщения с данными о маршруте=

(alert (strcat"\n Информация о выбранном маршруте
\n Пройденный путь составляет - " (rtos rwayall 2 2)"км "
"\n Время, проведенное в пути - " (rtos tway 2 2)"час"
"\n Расход бензина на маршрут в литрах - " (rtos benzin 2 2)
))

;;;=все данные о маршрутах в route.txt=
(setq f (open "route.txt" "a")); открыли файл для записи
(setq s (getvar "CDATE"))
(setq p (rtos s 2 ); перевели системную дату и время в строковую переменную в десятичном формате
(princ "\n" f)
(princ "ДАТА " f)
(princ (substr p 7 2) f); число
(princ "." f)
(princ (substr p 5 2) f); месяц
(princ "." f)
(princ (substr p 1 4) f); год
(princ "\n" f)
(princ "ВРЕМЯ " f)
(princ (substr p 10 2) f); час
(princ ":" f)
(princ (substr p 12 2) f); минуты

(princ "\n" f)
(princ "Общее расстояние(км) " f)
(princ (rtos rwayall 2 2) f)
(princ "\nВремя пути(часы) " f)
(princ (rtos tway 2 2) f)
(princ "\nРасход бензина(литры) " f)
(princ (rtos benzin 2 2) f)
(princ "\n" f)

(close f); закрыли файл для записи

;;;=все данные о маршрутах в route.xls=
(setq w (open "route.xls" "a")); открыли файл для записи
(setq s (getvar "CDATE"))
(setq p (rtos s 2 ); перевели системную дату и время в строковую переменную в десятичном формате
(princ (substr p 7 2) w); число
(princ "." w)
(princ (substr p 5 2) w); месяц
(princ "." w)
(princ (substr p 1 4) w); год
(princ " " w)
(princ (substr p 10 2) w); час
(princ ":" w)
(princ (substr p 12 2) w); минуты

(princ "\t" w)
(setq uway (* rwayall 1000))
(princ (rtos uway 2 0) w)
(princ "\t" w)
(setq iway (* tway 60))
(princ (rtos iway 2 0) w)
(princ "\t" w)
(setq oway (* benzin 1000))
(princ (rtos oway 2 0) w)
(princ "\n" w)
(close w)

;;;=все данные о маршрутах в list.xls=
(setq u (open "list.xls" "a")); открыли файл для записи
(setq s (getvar "CDATE"))
(setq p (rtos s 2 ); перевели системную дату и время в строковую переменную в десятичном формате
(princ "\n" u)
(princ (substr p 7 2) u); число
(princ "." u)
(princ (substr p 5 2) u); месяц
(princ "." u)
(princ (substr p 1 4) u); год
(princ " " u)
(princ (substr p 10 2) u); час
(princ ":" u)
(princ (substr p 12 2) u); минуты

(princ "\t" u)

(princ "Остаток" u)
(princ "\t" u)
(princ "при выезде:" u)
(princ "\t" u)
(setq m1(getint "\n Введите остаток топлива при выезде (литры)"))
(setq m2 (* m1 1000))
(princ (rtos m2 2 0) u)
(princ "\n" u)
(princ "\t" u)
(princ "\t" u)

(princ "при возврате:" u)
(princ "\t" u)
(setq m3 (- m2 oway))
(princ (rtos m3 2 0) u)
(princ "\n" u)
(princ "\t" u)

(princ "Расход" u)
(princ "\t" u)
(princ "по норме:" u)
(princ "\t" u)
(princ (rtos oway 2 0) u)
(princ "\n" u)
(princ "\t" u)
(princ "\t" u)

(princ "фактический:" u)
(princ "\t" u)
(princ (rtos oway 2 0) u)
(princ "\n" u)
(princ "\t" u)

(princ "Показание спидометра" u)
(princ "\t" u)
(princ "при выезде:" u)
(princ "\t" u)
(setq m4(getreal "\n Введите показания спидометра при выезде"))
(princ (rtos m4 2 0) u)
(princ "\n" u)
(princ "\t" u)
(princ "\t" u)

(princ "при возвращении:" u)
(princ "\t" u)
(setq m5 (* m4 1000))
(setq m6 (+ uway m5))
(setq m7 (/ m6 1000))
(princ (rtos m7 2 0) u)
(princ "\n" u)
(princ "\n" u)
(close u)

;;;=работа со слоями=
(progn
(command "-LAYER" "ON" "подложка" "" ""(command))
(command "-LAYER" "OFF" "отрезки" "" ""(command))
)
;;;=печать на экране в произвольном месте=
(initget 1 "1 2")
(setq
reply (getkword "Вывести на экран данные о пути? [Y-1/N-2]: ")
)
(if (= reply "1")
(progn
(setq p1 (getpoint "\n Укажите точку вставки информации о маршруте")
x1 (car p1)
y1 (cadr p1))
(setq p2(list x1(- y1 20)))
(setq p3(list (+ x1 35)(- y1 20)))
(setq p4(list x1(- y1 40)))
(setq p5(list (+ x1 35)(- y1 40)))
(setq p6(list x1(- y1 60)))
(setq p7(list (+ x1 35)(- y1 60)))
(setvar "textsize" 15.0)
(command "_properties"(entnext) "_cecolor" 5); синий цвет
(command "propertiesclose"); закрыли окно свойств
(command "_text" p1"""" "ИНФОРМАЦИЯ О МАРШРУТЕ:"(command))
(command "_text" p2""""(rtos rwayall 2 2)(command))
(command "_text" p3"""" "- расстояние (км)"(command))
(command "_text" p4""""(rtos tway 2 2)(command))
(command "_text" p5"""" "- время (ч)"(command))
(command "_text" p6""""(rtos benzin 2 2)(command))
(command "_text" p7"""" "- топливо (л)"(command))

)
)

;;;=вернули параметры пользователя=
(setvar "textsize" tsz)
(setvar "cmdecho" cmde)
(setvar "osmode" osm)
(setvar "orto" ort)
); конец PUT

;;;=функция вычисления=
(defun tur ()
;;;=определения вершин отрезков=

(setq ps (cdr(assoc 10 ent)); начальная точка отрезка
xps(car ps)
yps(cadr ps)
zps(caddr ps)
pe (cdr(assoc 11 ent)); конечная точка отрезка
xpe(car pe)
ype(cadr pe)
zpe(caddr pe)
an (angle ps pe); определение угла наклона отрезка
lse (distance ps pe); определение длины отрезка в плане

;;;=вычисление длин отрезков в трехмерных координатах=

deltax (- xps xpe)
deltay (- yps ype)
deltaz (- zps zpe)
deltax2 (* deltax deltax)
deltay2 (* deltay deltay)
deltaz2 (* deltaz deltaz)
lense (sqrt (+ deltax2 deltay2 deltaz2))

;;;=перевод в реальный масштаб=
lway (* lense 0.01)
ps2 (list xps yps)
); конец setq
(princ)
(entdel name); удаление линии
(setvar "textsize" 2.0); высота текста
(setq ant (+ an (/ pi 2.))); угол вставки текста
(if (> ant pi)(- ant pi)); параметры вставки текста

(progn
(setq PM (polar ps2 an (/ lse 2))); средняя точка отрезка в плане
(setq PMT(polar PM ant 1.5)); точка вставки текста "веса" отрезка
(setq PMT1 (polar PMT ant 4.5)); точка вставки текста суммы "весов" отрезков
(command "_LINE" ps pe "")
(princ)
(command "_text" PMT"""" (rtos lway 2 2)(command) ); вставка "веса" отрезка
(command "_properties"(entnext) "_cecolor" 1); красный цвет
(command "_text" PMT1"""" (rtos rwayall 2 2)(command) ); вставка суммы "весов" отрезков
(command "_properties"(entnext) "_cecolor" 5); синий цвет
; (setvar "lengthsize" 15.0)
(command "_properties""""_lweight" 0.40(command))
(command "propertiesclose"); закрыли окно свойств
); конец progn
(entdel name)
(princ)
); конец tur
> 1 <


Онлайн :

0 пользователь(ей), 46 гость(ей) :