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

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

Помогите новичку

Ответ
Поиск в этой теме
Непрочитано 16.05.2004, 20:37
Помогите новичку
Дмитрий2
 
Сообщений: n/a

Помогите новичку, пытаюсь разобраться с Lisp.
Цель: вводиш 3 числа (высота, ширина, глубина) - получаеш 3 прямоугольника (Вид сверху, сбоку и фаз)
Вроде просто и начинаю делаю так:

(defun C:vid ( )

(setvar "blipmode" 0)
(command "vpoint" "0,0,1")

(setq Высота ( getreal "Высота ="))
(setq Ширина ( getreal "Ширина ="))
(setq Глубина ( getreal "Глубина ="))

(setvar "cmdecho" 0)
(setvar "Shadedge" 1)
(command "grid" "off")
(command "color" "White")

(command "pline" "11,0" "11,11" "0,11" "0,Высота-19" "11,(- Высота 19)" "11,(- Высота 8)" "(- Ширина 19),(- Высота 8)" "(- Ширина 19),(- Высота 19)" "(- Ширина 8),(- Высота 19)" "(- Ширина 8),11" "(- Ширина 19),11" "(- Ширина 19),0" "")


Здась не простой прямоугольник, но идея та же...

Почему не работает, ведь по образцу делаю????
Просмотров: 9505
 
Непрочитано 09.07.2004, 19:37
#21
Дмитрий2


 
Сообщений: n/a


ОК
Вот как это выглядит, не понимаю почему двойные слэши (определил подбором), но это работает как планировалось:

(command "saveas" "dxf" "16" (strcat (VL-REGISTRY-READ "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" "Desktop") "\\ris\\" (rtos Высота 2 0) "x" (rtos Ширина 2 0) "x" (rtos Глубина 2 0) ".dxf"))


Теперь дальше:
(и в правду говорят - лень двигатель прогресса)

Начало:
(setq Высота ( getreal "Высота шкафа ="))
(setq Ширина ( getreal "Ширина шкафа="))
(setq Глубина ( getreal "Глубина шкафа="))

После всех нарисовок надо сохранить:

(command "saveas" "dxf" "16" "00000.dxf")

Сохранили.

А можно ли сделать, чтобы эти 3 числа вводить одной строкой и желательно командной
например написать .бат типа:
C:\Program Files\AutoCAD 2004\acad.exe <сомманда> <число_1> <число_2> <число_3>

Это вообще возможно???
 
 
Непрочитано 09.07.2004, 20:29
#22
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Про слэши. Дело в том, что обратный слэш в строках Лиспа - часть служебных символов, таких как \n, \t, \r, \" и конечно \\ Вот потому слэши и оказались двойными.

Теперь по
Цитата:
А можно ли сделать, чтобы эти 3 числа вводить одной строкой и желательно командной
например написать .бат типа:
C:\Program Files\AutoCAD 2004\acad.exe <сомманда> <число_1> <число_2> <число_3>
Если честно, то нифига не понятно что должно получится, хотя, сделать наверняка можно. Напиши подробно "сценарий" желаемого.
vk вне форума  
 
Непрочитано 09.07.2004, 22:03
#23
Дмитрий2


 
Сообщений: n/a


ПОДРОБНОСТИ
Предположим начало файля лисп такое:
(defun C:hkaf ( )
(setq Высота ( getreal "Высота шкафа ="))
(setq Ширина ( getreal "Ширина шкафа="))
(setq Глубина ( getreal "Глубина шкафа="))

А заканчивается:
(command "saveas" "dxf" "16" "hkaf_1.dxf")

Как это работает:
1) открыть автокад
2) команда hkaf
3) число Высота
4) число Ширина
5) число Глубина
6) закрыть автокад (хотя это я уже автоматизировал :)) )

Как хочу:
написать .bat файл с содержанием:
C:\Program Files\AutoCAD 2004\acad.exe <комманда> <число_1> <число_2> <число_3>
C:\Program Files\AutoCAD 2004\acad.exe <комманда> <число_1> <число_2> <число_3>
C:\Program Files\AutoCAD 2004\acad.exe <комманда> <число_1> <число_2> <число_3>
и т.д.

По идее должен открыться автокад, все нарисоваться, сохраниться и закрыться,
Потом опять открыться, все нарисоваться, сохраниться и закрыться.

Согласен, много лишних движений - зато какой умный вид...

Только вот Пуск>Выполнить уже не понимает "Program Files" (пробел в команде)
Но можно запускать из каталога AutoCAD 2004, только вот как это сделать


VK, огромное тебе спасибо за помощь...
 
 
Непрочитано 09.07.2004, 22:42
#24
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Мдааааа.... Вопросы сооовсем не простые.

Значит, идея №1 такая: запрашивать длину, ширину, высоту не по отдельности через getreal, а всем скопом, через getpoint и полученный список раскидывать на составляющие.
Как это передать через .bat не проверял - только мысля.....

Идея №2 : пусть программа сама читает данные в любом количестве из .bat файла (или любого другого текстового или даже Экселевского, если уж сильно замудряться). И не надо дверью хлопать, то биш, АКАД перезапускать. Остается придумать, как ентот .bat найти. Ведь запуск может быть сделан в принципе из любого места. С отдельным файлом данных, место которого определено, нет проблем.

Попутно следует сделать обработку всевозможных ошибок и накладок (данные не того типа или отсутствие таковых, файл уже существует и т.д. и т.п.)

Цитата:
Пуск>Выполнить уже не понимает "Program Files" (пробел в команде)
А строку то в кавычки взять наверно надо....
vk вне форума  
 
Непрочитано 09.07.2004, 22:58
#25
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Впрочем, есть еще идея №3. Исходные данные наверняка не с потолка в .bat падают и не ручками туда пишутся....
Ворд? Эксель? Что то другое с VBA?
Если так - то можно вызывать АКАД и рулить им непосредственно оттуда в невидимом режиме (работает быстрее). Без батников ))
vk вне форума  
 
Непрочитано 09.07.2004, 23:24
#26
Дмитрий2


 
Сообщений: n/a


Вопрос в том как запустить acad.exe с ключем, чтобы сразу после открытия запускалась команда с параметрами.

А "дверью хлопать", это может и неверно, но зато не надо думать что созданы слои, стили
(если слой есть - то не создавать).

А вопрос о быстродействии пока не стоит.

Идея №1 универсальна, можно и "как сейчас" пользоваться и "в полуавтоматическом режиме".
 
 
Непрочитано 09.07.2004, 23:59
#27
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
не надо думать что созданы слои, стили
(если слой есть - то не создавать).
Конечно, не надо думать Для того и придумали шаблоны (Template), чтоб не думать. Чтоб все что нужно, там уже было сразу при создании нового файла.
Ключем /t можно задать шаблон.

Что касается запуска... Можно указать ключ /b - вызов скрипта после старта АКАДа. В скрипт соответственно прописать вызов команды и параметры. Не забыть обеспечить автозагрузку программы.
Кажись, сформировать такой .scr файл можно непосредственно из .bat файла, но я в этом не силен.

Можно, конечно, сделать автозапуск програмы при старте АКАДа, но возьмет ли она параметры непосредственно из батника....? Вряд ли. Скорей всего, будет ждать ввода с клавы.
Или как то иммитировать из .bat клавиатурный ввод. Впрочем, тут уже просматриваются проблемы "нормальной" работы (можно обойти, изменив профиль ключем /p).
vk вне форума  
 
Непрочитано 10.07.2004, 11:46
#28
Дмитрий2


 
Сообщений: n/a


Вот нашел в инете и вобщем переделал под свою задачу:

При открытии AutoCAD автоматически создает новый чертеж Drawing1.dwg. Чтобы отменить это, проделайте следующее:
1. В корневом каталоге AutoCAD создайте текстовый файл с названием close.scr. Добавьте в него строку _close _y.
2. Добавьте в конец строки вызова программы текст /b close. Например, "C:\Program Files\AutoCAD 2002\acad.exe" /b close

Но только осталась одна зацепка: после сохранения закрывается командой "close",
а какой командой в *.scr автоматически создать новый чертеж Drawing1.dwg
А главное, как и где она вводится???
 
 
Непрочитано 10.07.2004, 12:27
#29
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Давайте для начала разберемся, что такое *.scr или говоря иначе, скрипт. Это текстовый файл, для управления АКАДом, который содержит совершенно тот же самый текст, который набирался бы на клавиатуре, если бы команды вводились с клавиатуры, а не мышкой с экрана. Другими словами, откройте Блокнот и сделайте вид что работаете в АКАДе (понимаю, что сложно). В результате должен получиться файл, куда записано все что Вы набираете во время работы на клаве. Мышку не трогать!!!! :evil: При запуске в ключе /b укажите этот скрипт - и он выполнится при старте АКАДа.

Кстати, этот файл не обязательно должен быть в корневом каталоге. Если его размещение не попадает в пути поиска файлов поддержки, то необходимо указать путь и имя.
Цитата:
а какой командой в *.scr автоматически создать новый чертеж Drawing1.dwg
Команда соответственно та же что и в АКАДе _.new (чтоб не путаться, на репетиции - отключите вывод диалоговых окон, временно установив FILEDIA = 0, тока потом верните обратно.)
Цитата:
А главное, как и где она вводится???
Как вводится эта (и не только) команда, подробно описано в хелпе. Притом для создания скрипта необходимо изучить именно клавиатурный ввод команд и опций, без какого либо мышководства
vk вне форума  
 
Непрочитано 10.07.2004, 14:19
#30
Дмитрий2


 
Сообщений: n/a


МММдаааа...
1) Откройте автокад (автоматически создается новый чертеж Drawing1.dwg, (должен по умолчанию))
2) закройте Drawing1.dwg (не автокад.)
3) введите с клавиатуры команду "_.new" или "quit".

Получилось?

У меня нет :((
 
 
Непрочитано 10.07.2004, 15:12
#31
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Ммммдаааа.....
Цитата:
автоматически создается новый чертеж Drawing1.dwg, (должен по умолчанию)
Совсем не факт. Все зависит от настроек, которые сделаны по умолчанию. Может и окно Startup Dialog открыться, а может и ничего.....
Цитата:
2) закройте Drawing1.dwg (не автокад.)
3) введите с клавиатуры команду "_.new" или "quit".
Пункт 2 следует исключить и все получится.
vk вне форума  
 
Непрочитано 14.07.2004, 21:12
#32
Дмитрий2


 
Сообщений: n/a


Подскажите пожалуйста
создаю 2 слоя в Lisp

(command "_.layer" "new" "Основная" "_lw" "0.7" "Основная" "")
(command "_.layer" "new" "Размеры" "_c" "5" "Размеры" "")

и рисую ими
Почему слой "Основная" - рисует как заложено толщиной 0.7.
а слой "Размеры" НЕ синего цвета (хотя квадратик цвета - синий),
что не так в создании слоя строке.
 
 
Непрочитано 14.07.2004, 21:57
#33
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Раз квадратик синий - значит цвет слою назначен синий. А вот цвет примитивов, которые на этом слое... он точно "ПоСлою" ("ByLayer" - по-аглицки, или 256 - по DXF-кодам)?
vk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите новичку