|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Помогите новичку
Сообщений: n/a
|
||
Просмотров: 9503
|
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Конечно не будет работать...
И где только берутся "образцы" для таких "творений" Цитата:
Значит так, давай по порядку. Чтоб не путаться в дальнейшем, сначала завязывай с вот этим Цитата:
Код:
Цитата:
Код:
PS В целях сохранности мозгов выкинь подальше "образец" откуда срисовывал сей шедевр и найди нормальный учебник. Хотя бы хелп АКАДовый. |
|||
![]() |
|
||||
Сообщений: n/a
|
Спасибо за помощь, но я до сих пор не догоняю...
Вот переделал, а он доходит до (0 (- Высота 19)) и выводит это число... почему? а главное почему не рисует? (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) "") ) ; end function |
|||
|
||||
Сообщений: n/a
|
А если так:
(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) (cons 0 (- Высота 19)) (cons 11 (- Высота 19)) (cons 11 (- Высота 8)) "") ) ; end function То получается (после 3-х первых точек, их он рисует) Unknown command "HKAF". Press F1 for help. nil Н |
|||
|
||||
Сообщений: n/a
|
Спасибо, так все работает:
(command "pline" '(11 0) '(11 11) '(0 11) (list 0 (- Высота 19)) (list 11 (- Высота 19)) (list 11 (- Высота 8)) (list (- Ширина 19) (- Высота 8)) (list (- Ширина 19) (- Высота 19)) (list (- Ширина 8) (- Высота 19)) (list (- Ширина 8) 11) (list (- Ширина 19) 11) (list (- Ширина 19) 0) "close") А еще подскажите, как выглядят в Lisp команды: 1) circle 161,1320 2.1 2) ucs n 1248,0,0 Всем огромное спасибо за помощь |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Как выглядят команды... Почти (!) любая команда АКАД может быть вызвана из Лиспа при помощи (command ...). Самый простой способ записи - написать то же самое, как будто пишешь в командной строке. При этом вместо Enter'а используется пустая строка - "". Точки в команду нужно передавать как списки координат. Опции - как строковые. Дистанции, радиусы и т.п. - как целые или вещественные. Графические примитивы - куча вариантов... как примитив, как примитив с точкой, как набор. Пользовательский ввод - pause. Подробнее смотри в учебниках.
Код:
Код:
|
|||
![]() |
|
||||
Сообщений: n/a
|
Еще несколько вопросов по Lisp:
1) Возможно ли в Lisp "вводить" данные не в командной строке, а как-нибудь через окошки (если Lisp такое позволяет)? 2) На экран выводиться число 31,456000000, а надо 31,45 - как отсечь тысячные? 3) Существует ли звуковой сигнал типа "sound"? 4) Можно ли замедлить рисование (выполнение программы), не паузами, а равномерно? (через строчку (command "delay" "1000") - не предлогать) 5) Можно ли программой создавать каталоги и сохранять в них созданные данные? Спасибо за подсказки. |
|||
|
||||
Сообщений: n/a
|
По (3), я не понял как заставить пискнуть в программе, как это пишется?
По (4), есть 2000 линий, на моей машине рисуется за ~2 сек, в институте за ~40 сек и выглядет очень умно :), как можно замедлить ход на быстрых машинах? А еще, подскажите, существует ли команда СТИРЕТЬ ВСЕ (включая слои и типы линий)? |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
3) (vlr-beep-reaction)
4) Все таки наверно придется использовать (command "_.delay" "1000"), только надо поточнее определиться, куда ее впихивать... И параметр поменьше, например 1 или 10. Если конечно это действительно нужно. Вариант - сделать свою функцию без command, но на основе while. "СТИРЕТЬ ВСЕ" - _.erase _all и потом несколько раз _.purge |
|||
![]() |
|
||||
Проектировщик свиноводство Регистрация: 21.08.2003
Сообщений: 2,291
|
Цитата:
(atoi (menucmd "M=$(edtime,$(getvar,date),MSEC)")) и отрабатывать каждый следующий шаг отрисовки только спустя нужное количество миллисекунд. |
|||
![]() |
|
||||
Сообщений: n/a
|
Появились еще вопросы, подскажите кто знает...
Начало: (setq Высота ( getreal "Высота шкафа =")) (setq Ширина ( getreal "Ширина шкафа=")) (setq Глубина ( getreal "Глубина шкафа=")) После всех нарисовок надо сохранить: (command "saveas" "dxf" "16" "00000.dxf") У меня не получается заменить "00000.dxf" на "ВысотахШиринахГлубина.dxf" (естественно должны быть цифры) получается довольно сложно и не работает :((( И еще как написать путь сохранения этого файла, если требуется сохранять в папку например "ris" которая расположена на рабочем столе? (на одном компе, несколько рабочих столов и должен сохранять в текущую) |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Цитата:
Код:
|
|||
![]() |
|
||||
Сообщений: n/a
|
А как все таки выглядит строка полностью
(command "saveas" "dxf" "16" "00000.dxf") + (strcat (rtos Высота 2 0) "x" (rtos Ширина 2 0) "x" (rtos Глубина 2 0) ".dxf") + (VL-REGISTRY-READ "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" "Desktop") + в папку "ris" А то мысль есть, но мне ее явно не хватает... или если это сложно, как сохранить в папку С:\ris\ (я потом ярлык папки вытащу на стол) |
|||
|
||||
Сообщений: 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> Это вообще возможно??? |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Про слэши. Дело в том, что обратный слэш в строках Лиспа - часть служебных символов, таких как \n, \t, \r, \" и конечно \\ Вот потому слэши и оказались двойными.
Теперь по Цитата:
|
|||
![]() |
|
||||
Сообщений: 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, огромное тебе спасибо за помощь... |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Мдааааа.... Вопросы сооовсем не простые.
Значит, идея №1 такая: запрашивать длину, ширину, высоту не по отдельности через getreal, а всем скопом, через getpoint и полученный список раскидывать на составляющие. Как это передать через .bat не проверял - только мысля..... Идея №2 : пусть программа сама читает данные в любом количестве из .bat файла (или любого другого текстового или даже Экселевского, если уж сильно замудряться). И не надо дверью хлопать, то биш, АКАД перезапускать. Остается придумать, как ентот .bat найти. Ведь запуск может быть сделан в принципе из любого места. С отдельным файлом данных, место которого определено, нет проблем. Попутно следует сделать обработку всевозможных ошибок и накладок (данные не того типа или отсутствие таковых, файл уже существует и т.д. и т.п.) Цитата:
|
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Впрочем, есть еще идея №3. Исходные данные наверняка не с потолка в .bat падают и не ручками туда пишутся....
Ворд? Эксель? Что то другое с VBA? Если так - то можно вызывать АКАД и рулить им непосредственно оттуда в невидимом режиме (работает быстрее). Без батников ![]() |
|||
![]() |
|
||||
Сообщений: n/a
|
Вопрос в том как запустить acad.exe с ключем, чтобы сразу после открытия запускалась команда с параметрами.
А "дверью хлопать", это может и неверно, но зато не надо думать что созданы слои, стили (если слой есть - то не создавать). А вопрос о быстродействии пока не стоит. Идея №1 универсальна, можно и "как сейчас" пользоваться и "в полуавтоматическом режиме". |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Цитата:
![]() Ключем /t можно задать шаблон. Что касается запуска... Можно указать ключ /b - вызов скрипта после старта АКАДа. В скрипт соответственно прописать вызов команды и параметры. Не забыть обеспечить автозагрузку программы. ![]() Кажись, сформировать такой .scr файл можно непосредственно из .bat файла, но я в этом не силен. Можно, конечно, сделать автозапуск програмы при старте АКАДа, но возьмет ли она параметры непосредственно из батника....? Вряд ли. Скорей всего, будет ждать ввода с клавы. Или как то иммитировать из .bat клавиатурный ввод. Впрочем, тут уже просматриваются проблемы "нормальной" работы (можно обойти, изменив профиль ключем /p). |
|||
![]() |
|
||||
Сообщений: 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 А главное, как и где она вводится??? |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Давайте для начала разберемся, что такое *.scr или говоря иначе, скрипт. Это текстовый файл, для управления АКАДом, который содержит совершенно тот же самый текст, который набирался бы на клавиатуре, если бы команды вводились с клавиатуры, а не мышкой с экрана. Другими словами, откройте Блокнот и сделайте вид что работаете в АКАДе (понимаю, что сложно). В результате должен получиться файл, куда записано все что Вы набираете во время работы на клаве. Мышку не трогать!!!! :evil: При запуске в ключе /b укажите этот скрипт - и он выполнится при старте АКАДа.
Кстати, этот файл не обязательно должен быть в корневом каталоге. Если его размещение не попадает в пути поиска файлов поддержки, то необходимо указать путь и имя. Цитата:
Цитата:
![]() |
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Ммммдаааа.....
Цитата:
Цитата:
|
|||
![]() |
|
||||
Сообщений: n/a
|
Подскажите пожалуйста
создаю 2 слоя в Lisp (command "_.layer" "new" "Основная" "_lw" "0.7" "Основная" "") (command "_.layer" "new" "Размеры" "_c" "5" "Размеры" "") и рисую ими Почему слой "Основная" - рисует как заложено толщиной 0.7. а слой "Размеры" НЕ синего цвета (хотя квадратик цвета - синий), что не так в создании слоя строке. |
|||