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

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

Почему программа работает неправильно?

Ответ
Поиск в этой теме
Непрочитано 26.08.2011, 12:12 #1
Почему программа работает неправильно?
FSergio
 
Регистрация: 26.08.2011
Сообщений: 20

Пытаюсь написать программу котороя дожна рисовать "box" на определённую величину меньше чем указанный точками.

(setq
p1 (getpoint)
p2 (getpoint)
)
(setq
u1 (list (+ (nth 0 p1) 200.0) (+ (nth 1 p1) 200.0) (+ (nth 2 p1) 200.0))
)

(command "_.box" u1 p2)

в разных ситуациях программа работает по разному но практически всегда уменьшает бокс лишь по оси z хотя при отладке видно что переменные которые задают координаты точек вычисляются правильно.
В чём ошибка?
Просмотров: 6336
 
Непрочитано 26.08.2011, 12:20
1 | #2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


В не отключенных привязках (ищи по форуму - стандартная ошибка начинающих лиспописателей).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 26.08.2011, 13:20
#3
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от FSergio Посмотреть сообщение
(setq
u1 (list (+ (nth 0 p1) 200.0) (+ (nth 1 p1) 200.0) (+ (nth 2 p1) 200.0))
)
ну и правильнее выделять координаты с помощью функций:
(car p1) - X;
(cadr p1) - Y;
(caddr p1) - Z.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 26.08.2011, 13:36
#4
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


Огромное Спасибо! Дело на самом деле в привязках. Не до конца покка правда разобрался как их временно отключать. Вообще довольно странно что при явном указании координат точки в AutoCAD такой проблемы с привязками не возникает а здесь...


(car p1) - X;
(cadr p1) - Y;
(caddr p1) - Z
Я пробовал изначально результат был тот же. Думал в этом проблема поэтому изменил
FSergio вне форума  
 
Непрочитано 26.08.2011, 14:03
#5
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Была хорошая тема http://forum.dwg.ru/showthread.php?t...F0%F3%E3%E8%E5 Почитайте...
А с п.36 начните изучение
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 26.08.2011, 14:26
#6
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


Ну а вот так почему не работает? В конце запрашивает у меня высоту бокса ???????
(setq
p1 (getpoint)
p2 (getpoint)
)
(setq
u1 (list (+ (nth 0 p1) 200.0) (+ (nth 1 p1) 200.0) (+ (nth 2 p1) 200.0))
)

(setq old_osmode (getvar "osmode"))
(setvar "osmode" 0)
(command "_.box" u1 p2)
(setvar "osmode" old_osmode)
FSergio вне форума  
 
Непрочитано 26.08.2011, 14:40
#7
Makson


 
Регистрация: 24.04.2008
Сообщений: 1,132


Цитата:
Сообщение от FSergio Посмотреть сообщение
В конце запрашивает у меня высоту бокса ???????
Это Вы вопрос себе или нам задаете?Или это все таки утверждение?
Makson вне форума  
 
Автор темы   Непрочитано 26.08.2011, 14:43
#8
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


Это вопрос. Я вставил отключение привязок
(setq old_osmode (getvar "osmode"))
(setvar "osmode" 0)
(command "_.box" u1 p2)
(setvar "osmode" old_osmode)
и программа перестала нормально работать. А если привязки отключить вручную то всё работает.
FSergio вне форума  
 
Непрочитано 26.08.2011, 14:53
#9
Makson


 
Регистрация: 24.04.2008
Сообщений: 1,132


Что значит перестала нормально работать? Что выдает?
Makson вне форума  
 
Автор темы   Непрочитано 26.08.2011, 14:55
#10
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


Запрашивает либо длинну либо высату а бокс не строит
FSergio вне форума  
 
Непрочитано 26.08.2011, 14:59
#11
Makson


 
Регистрация: 24.04.2008
Сообщений: 1,132


НУ так правильно...при построении box ты должен указать две точки и высоту. Точки ты указал, далее высоту нужно указать.
Makson вне форума  
 
Автор темы   Непрочитано 26.08.2011, 15:07
#12
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


нет. Если отключена привязка вручную то всё строится нормально указанием двух точек с разными координатами по всем трём осям и всё строится так как надо. А вот когда я попытался на время выполнения отключить привязку програмно бокс не строится.
FSergio вне форума  
 
Непрочитано 26.08.2011, 15:26
#13
Makson


 
Регистрация: 24.04.2008
Сообщений: 1,132


Бред какой то. По двум точкам ни как нельзя построить бокс. Для бокса нужно три координаты. По двум точкам трехмерный объект нельзя ни как построить.
Makson вне форума  
 
Непрочитано 26.08.2011, 15:29
#14
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


FSergio, с консоли ваш код (пост №6) прекрасно работает.

Последний раз редактировалось Oliver_88, 26.08.2011 в 16:29.
Oliver_88 вне форума  
 
Автор темы   Непрочитано 26.08.2011, 15:33
#15
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


что значит нельзя? вызовите команду _box задайте координаты первой точки 0,0,0 к примеру, затем второй 1000,1000,1000
Будет построен бокс. Я проделал это наверное 1 000 000 раз строя панели мебели от оодного угла до другого.
FSergio вне форума  
 
Непрочитано 26.08.2011, 15:45
#16
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


Цитата:
Сообщение от FSergio Посмотреть сообщение
(command "_.box" u1 p2)
ты вот так попробуй (command "_.box" u1 p2 p1) и почередуй поученные координаты
у тебя же в u1 одна координата вычисляется
просто посчитай сколько раз мышью щелкаешь кода box рисуешь так точно и в встроке должнобыть (command "_.box" u1 p2 p1)
может ты куб хочешь посторить то для него необходимо два щелчка +опция команды [куб]

Последний раз редактировалось mamuk, 26.08.2011 в 15:51.
mamuk вне форума  
 
Непрочитано 26.08.2011, 15:45
#17
Makson


 
Регистрация: 24.04.2008
Сообщений: 1,132


Могу предположить что если обе указанные вами точки лежат в плоскости X-Y то в данном случае программа требует указать высоту.(проверьте с помощью print).
И соответственно не работает.
Makson вне форума  
 
Автор темы   Непрочитано 26.08.2011, 15:59
#18
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


Или лыжи не едут или я...
Если я выполняю команду "box" (p1 p2) то строится бокс от точки с координатами p1 до точки с координатами p2
далее я вычасляю координаты новой точки уменьшая значение по всем трём осям на определённую величину.
Строю "box" первая точка с координатами p1 а вторая с вычесленными ранее координатами.
Всё прекросно работает (ЕСЛИ ЗАРАНЕЕ ОТКЛЮЧИТЬ ОБЪЕКТНУЮ ПРИВЯЗКУ ВРУЧНУЮ!!!)
Чтобу не делать этого каждый раз я временно (перед выполнением команды "box") объектную привязку, но бокс не строится а вместо этого запрашевает hight но я же не задаю бокс через wight lenght hight a указываю две точки.
Проблема однозначно в коде отключения привязки потому что до отключения привязки вручную и программно была такая же проблема (запрашивал hight)
Выключая объектную привязку вручную проблема устраняется а програмно нет.
Вот с этим я не могу разобратся. Что то не так с програмным отключением привязки.
FSergio вне форума  
 
Непрочитано 26.08.2011, 16:04
#19
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


Цитата:
Сообщение от FSergio Посмотреть сообщение
Проблема однозначно в коде отключения привязки потому что до отключения привязки вручную и программно была такая же проблема (запрашивал hight)
проверь переменную OSNAPZ может она влияет
mamuk вне форума  
 
Автор темы   Непрочитано 26.08.2011, 16:05
#20
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


Вот это очень очень похоже на причину. А как проверить?

Это однозначно из за неё получется что при отключении привязки osnapz устанавливается 1 ?

Последний раз редактировалось FSergio, 26.08.2011 в 16:13.
FSergio вне форума  
 
Непрочитано 26.08.2011, 16:12
#21
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


сейчас проверил с включенными и отключенными привязками
1.(command "_box" p1 p2) срабатывает если одна из точек имеет трехмерные координаты
2. несрабатывает если указаны только координаты где z 0 у первой и второй точки т.к. _box не может иметь нулевой высоты предполагаю!
заключение а привязка не влияет на отрисовку _box-a по двум точкам,влияет только трехмерное положение указаных точек хотябы одна z/=0
действительно _box неможет иметь нулевой высоты
ервый угол или [Центр]:
Другой угол или [Куб/Длина]:
Высота или [2Точки] <10.0000>: 0
Значение должно быть ненулевым.

скорее всего и OSNAPZ не оказивает влияние т.к. скорее всего отвечает за работу команндых привязок.

Последний раз редактировалось mamuk, 26.08.2011 в 16:20.
mamuk вне форума  
 
Непрочитано 26.08.2011, 16:18
#22
Makson


 
Регистрация: 24.04.2008
Сообщений: 1,132


Вот блин и не проверить.
у меня звсад стоит и в нем нет osnapz.
Makson вне форума  
 
Автор темы   Непрочитано 26.08.2011, 16:19
#23
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


Это я понял естественно разница между координатами z указывается не нулевая. Проблема в osnapz как ты и сказал mamuk получается что когда я убираю osnap то osnapz устанавливается "1" и вместо коорлинаты по z я получаю координату проекции т.е. "0". Из за этого всё и не работает. Теперь вопрос как сделать чтобы она не устанавливалась "1"

Кстати до выполнения программы osnapz "0" почему она слетает когда запускается программа?

Последний раз редактировалось FSergio, 26.08.2011 в 16:26.
FSergio вне форума  
 
Непрочитано 26.08.2011, 16:32
#24
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


в начале кода (setvar "osnapz" 0)
или лучше проверять включена или выключена
и в зависимости от этого выключать или не выключать.
а так же возвращать значение значение до этого ранее установленное
(setq a (getvar "osnapz"));здесь в переменную а записываем значение привязки текущее
(setvar "osnapz" 0);устанавливаем необходимое значение
(здесь рисуем что надо
)
(setvar "osnapz" а) после всех выполненых операций восстанавливаем изначальное значение (у меня буква а русская в посте кода)
mamuk вне форума  
 
Автор темы   Непрочитано 26.08.2011, 16:42
#25
FSergio


 
Регистрация: 26.08.2011
Сообщений: 20


mamuk Ты однозначно прав с координатой z
Но (setvar "osnapz" 0) не помогает, уже попоробовал
И установлена она изначально "0" как я уже говорил.
Но после
(setq old_osmode (getvar "osmode"))
(setvar "osmode" 0)
что то не даёт ввести ненулевую координату z
а если этого кода нет, то всё работает.


Все дело было в OSNAPCOORD
И можно даже не отключать привязки програмно всё работает так как надо.
Всем большое спасибо что направили меня на верный путь.

Последний раз редактировалось FSergio, 27.08.2011 в 11:17.
FSergio вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Почему программа работает неправильно?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчет монтажной башни с растяжками в MicroFE 2005 (почему программа не считает?) giparshik Расчетные программы 1 20.07.2011 18:46
Программа AlxdDike под а2004 работает? LLEXA AutoCAD 8 03.05.2011 21:41
Объясните почему такая разница в подобранной арматуре МишаИнженер Расчетные программы 14 26.02.2010 23:15
Фундамент с динамическими нагрузками в Scad Tlelaxu SCAD 9 31.08.2007 10:44
_mpedit неправильно работает? Elfirel AutoCAD 8 05.08.2004 12:14