Schöck
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Не могу понять, почему программа не работает? Помогите плз.

Не могу понять, почему программа не работает? Помогите плз.

Ответ
Поиск в этой теме
Непрочитано 02.05.2013, 02:19 #1
Не могу понять, почему программа не работает? Помогите плз.
dimon_hub
 
Менеджер САПР
 
г. Хабаровск
Регистрация: 03.08.2010
Сообщений: 43

Господа помогите пожалуйста. Мне надо сдать диплом, я нашел программу, для подсчета маршрутов автотранспорта, работающую с отрезками. Но когда я загружаю ее она мне выдает сообщение "Выбран НЕ ОТРЕЗОК". Хотя я пробовал отрисовывать любой приметив - результат тот же. А когда я ее проверяю в редакторе LISP мне выдается сообщение, что ошибок не найдено. Уже не знаю где ошибка.
Помогите пожалуйста я буду очень признателен.

Вложения
Тип файла: lsp map.LSP (8.0 Кб, 47 просмотров)

Просмотров: 2426
 
Непрочитано 02.05.2013, 10:02
#2
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


На первый взгляд:
  1. нет типа объекта _LINE, есть LINE;
  2. нет системной переменной _textsize, есть textsize;
  3. команда _properties, насколько знаю, вызывает палитру, но не позволяет задавать свойства (в данном случае, цвет) из командной строки;
5hev вне форума  
 
Автор темы   Непрочитано 02.05.2013, 11:54
#3
dimon_hub

Менеджер САПР
 
Регистрация: 03.08.2010
г. Хабаровск
Сообщений: 43


Но в русской версии все английские команды прописываются через " _ " нижнее подчеркивание. У меня программа не может определить тип объекта - линия. И выдает ошибку. А как это сделать?
dimon_hub вне форума  
 
Непрочитано 02.05.2013, 18:04
#4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


Код:
[Выделить все]
 (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)
Это какой-то БДСМ, а не код
gomer вне форума  
 
Непрочитано 02.05.2013, 18:11
1 | #5
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от dimon_hub Посмотреть сообщение
Господа помогите пожалуйста. Мне надо сдать диплом, я нашел программу, для подсчета маршрутов автотранспорта, работающую с отрезками. Но когда я загружаю ее она мне выдает сообщение "Выбран НЕ ОТРЕЗОК". Хотя я пробовал отрисовывать любой приметив - результат тот же. А когда я ее проверяю в редакторе LISP мне выдается сообщение, что ошибок не найдено. Уже не знаю где ошибка.
Помогите пожалуйста я буду очень признателен.
не влезая глубоко, попробуй исправленный код,
команда TUR
Код:
[Выделить все]
;;;МАРШРУТИЗАЦИЯ АВТОТРАНСПОРТА

;;;=переменные=
;;; PS-начальная точка отрезка (xPS,yPS,zPS)
;;; PS2-начальная точка отрезка в плане (без zPS)
;;; PE-конечная точка отрезка (xPE,yPE,zPE)
;;; PM-средняя точка отрезка в плане
;;; PMT-точка вставки текста

(defun C:TUR(/ *error* benzin cmde ent f iway lway m1 m2 m3 m4 m5 m6 m7 name ort osm oway
	                p p1 p2 p3 p4 p5 p6 p7 reply rwayall s ss tsz tway u uway w x1 y1)
(defun *error*(msg)
       (if (= msg "Функция прервана")
	(princ)
	(princ msg)
       ) (princ)
)
;;;=запоминаем установки пользователя=
  
  (setq ort (getvar "orthomode"))
  (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 "_:S:L:E" (list (cons 0 "LINE"))))
  	(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 8)); перевели системную дату и время в строковую переменную в десятичном формате
(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 8)); перевели системную дату и время в строковую переменную в десятичном формате
  (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 8)); перевели системную дату и время в строковую переменную в десятичном формате
  (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 "_chprop"(entlast) "" "_cecolor" 5 ""); синий цвет
        ;(command "propertiesclose"); закрыли окно свойств
	(command "_text" p1 "" "" "ИНФОРМАЦИЯ О МАРШРУТЕ:" "")
      (command "_chprop"(entlast) "" "_color" 5 ""); синий цвет
	   (command "_text" p2 "" ""(rtos rwayall 2 2)"")
      (command "_chprop"(entlast) "" "_color" 5 ""); синий цвет
  	   (command "_text" p3"" "" "- расстояние (км)""")
      (command "_chprop"(entlast) "" "_color" 5 ""); синий цвет
  		 (command "_text" p4 "" ""(rtos tway 2 2)"")
      (command "_chprop"(entlast) "" "_color" 5 ""); синий цвет
  	   	 (command "_text" p5 "" "" "- время (ч)""")
      (command "_chprop"(entlast) "" "_color" 5 ""); синий цвет
 			 (command "_text" p6 "" "" (rtos benzin 2 2)"")
      (command "_chprop"(entlast) "" "_color" 5 ""); синий цвет
  	   		 (command "_text" p7 "" "" "- топливо (л)""")
      (command "_chprop"(entlast) "" "_color" 5 ""); синий цвет
   
   )
     )

;;;=вернули параметры пользователя=
  	(setvar "textsize" tsz)
  	(setvar "cmdecho" cmde)
  	(setvar "osmode" osm)
 	(setvar "orthomode" 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 "_chprop" (entlast) "" "_color" 1 ""); красный цвет
   (command "_text" PMT1 "" "" (rtos rwayall 2 2)"" ); вставка суммы "весов" отрезков
     (command "_chprop" (entlast) "" "_color" 5 "_lweight" 0.40 ""); синий цвет
   ;  (setvar "lengthsize" 15.0)
    ;(command "_properties" "" "_lweight" 0.40(command))
    ;(command "_propertiesclose"); закрыли окно свойств
    ); конец progn
 ;(entdel name)
  (princ)
); конец tur
(princ "\nStart command with: TUR")
(prin1)
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 05.05.2013, 02:25
#6
dimon_hub

Менеджер САПР
 
Регистрация: 03.08.2010
г. Хабаровск
Сообщений: 43


Огромное спасибо Олег (jr.)! Заработало! Я думаю этого будет достаточно.

Олег (jr.) Если есть желание - выкладывай ее в готовые.
dimon_hub вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Не могу понять, почему программа не работает? Помогите плз.

Vetcad
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает Регенерация? skalder AutoCAD 4 20.08.2012 09:45
не могу понять маркироку сварных швов sverchok77 Инженерные сети 4 20.01.2011 10:28
Не могу понять в чем ошибка... DY Программирование 5 21.02.2007 17:35
переувлажнение помещений квартиры-- помогите понять причины tyoma Прочее. Архитектура и строительство 5 03.07.2006 23:00
Помогите!!! Raster Design не работает Галина Прочее. Программное обеспечение 2 30.07.2004 14:58