dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 20.07.2008, 20:12
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,970
Отправить сообщение для Red Nova с помощью Skype™

Red Nova вне форума Вставить имя

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 1466554
 
Непрочитано 24.07.2008, 18:07
#121
andery


 
Регистрация: 27.12.2007
Сообщений: 132
Отправить сообщение для andery с помощью ICQ


(command "_rotate" "_L") работает и выделяет
andery вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 18:11
#122
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


ПРАВИЛО
  1. В функциях command использовать АНГЛИЙСКИЕ команды с ПОДЧЕРКИВАНИЕМ Пример: (command "_PLINE" ...)
  2. Для ссылок на ОПЦИИ команд использовать АНГЛИЙСКИЕ с ПОДЧЕРКИВАНИЕМ Пример: (command "_-LAYER" "_Make" ...)
  3. Подробнее читаем тут вначале
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 31.07.2008 в 10:53. Причина: Список
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 18:18
#123
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


andery,
При передаче параметров ф-ции command нужно соблюдать последовательность запросов вызванной команды, причем
  1. Оции задаются как строки (в кавычках "") с учетом #122
  2. Если нужно нажать клавишу ENTER, то пишем пустые кавычки ""
  3. если нужно подождать действия пользователя, то пишем pause
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 25.07.2008 в 10:50. Причина: Список
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 18:20
#124
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от andery Посмотреть сообщение
(command "_rotate" "_L") работает и выделяет
Ручками что ты дальше делаешь? Нажимаешь или ENTER или ПКМ. Так и скажи об этом command'у чтобы он нажал тоже
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 18:22
#125
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


>> VVA. Offtop: Может заодно про точку и дефис в командах объяснить. Или потом дать задание колонну заштриховать?
Олег К. вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 18:30
#126
andery


 
Регистрация: 27.12.2007
Сообщений: 132
Отправить сообщение для andery с помощью ICQ


Запутался в этой конструкции
(command "_rotate" "_L" "" "(car p),(cadr p)")
)
как ни пробывал никак не получается
andery вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 18:49
#127
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


andery,
1. getpoint у тебя что запрашивает? - ТОЧКУ
2. В какую переменную ты ее запоминаешь? - в P
Если у тебя в переменной P находится ТОЧКА и _rotate запрашивает "Базовая ТОЧКУ" какого ляда вы занимаетесь мазохизмом?
Код:
[Выделить все]
(command "_rotate" "_L" "" p)
ТОЧКА в Автокаде это список в общем случае их 3-x (для 2d можно из 2-x) чисел, где 1-e трактуется как X, 2-e как Y и 3-e как Z
(setq p (list 1 2 3)) - точка с X=1 Y=2 Z=3
(setq p '(5 3 0)) - точка с координатами X=5 Y=3 Z=0

(command "_Rotate" "_L" "" '(2 3)) - начнет поворачивать последний отрисованный объект относительно точки X=2 Y=3
ТО же самое
(setq p (list 2 3))
(command "_Rotate" "_L" "" p)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 18:51
#128
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


Offtop: удалил, больше мешать не буду.
Олег К. вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 19:32
#129
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Ты совсем не мешаешь. Не могу же я один всех учить. Тем более скоро возьму оставшуюся часть отпуска
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 19:35
#130
Post

конструктор
 
Регистрация: 29.07.2005
Ростов-на-Дону
Сообщений: 1,078
Отправить сообщение для Post с помощью ICQ


Red Nova
Вот те примеры и текст, что обещал
__________________
С уважением!!!

Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08.
Post вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 19:36
#131
Post

конструктор
 
Регистрация: 29.07.2005
Ростов-на-Дону
Сообщений: 1,078
Отправить сообщение для Post с помощью ICQ


Вторая часть
__________________
С уважением!!!

Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08.
Post вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 19:37
#132
Post

конструктор
 
Регистрация: 29.07.2005
Ростов-на-Дону
Сообщений: 1,078
Отправить сообщение для Post с помощью ICQ


И последняя, саму книгу можно взять в DOWNLOAD
__________________
С уважением!!!

Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08.
Post вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 20:11
#133
andery


 
Регистрация: 27.12.2007
Сообщений: 132
Отправить сообщение для andery с помощью ICQ


Cпасибо, получилось, в результате код получился такой:

Код:
[Выделить все]
(defun c:колонна (/ a b x1 y1 x2 y2)
	(initget (+ 1 2 4))
	(setq a (getdist"\nВведите ширину колонны:"))
	(initget (+ 1 2 4))
	(setq b (getdist"\nВведите высоту колонны:"))
	(setq p (getpoint "\nУкажите центр колоны:<по умолчанию (0,0)>"))
	(if (null p) (setq p (quote (0 0 0)))
	)
	(setq x1 (- (car p) (/ a 2))) 
	(setq y1 (- (car (cdr p)) (/ b 2)))
	(setq x2 (+ (car p) (/ a 2)))
	(setq y2 (+ (car (cdr p)) (/ b 2)))
	(command "._pline"
		(list x1 y1)
		(list x1 y2)
		(list x2 y2)
		(list X2 y1)
		"_close"
	(command "_rotate" "_L" "" p pause)
	)
)
andery вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.07.2008, 22:28
#134
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


andery, Молодца. Quote и ' равнозначны (а набирать быстрее)
(setq p (quote (0 0 0)) = (setq p '(0 0 0))
Усложним задачу.
1. Рисуем колонну
2. В центре колонны рисеум круг радиусом=ширине колонны
3. Поворачиваем колонну

PS По прежнему переменная P у тебя глобальная
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 25.07.2008, 09:58
#135
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,970
Отправить сообщение для Red Nova с помощью Skype™


VVA, Извиняюсь за отсутствие, дома телефон зарубили, а инет на нем.
Наверстываем упущенное.
Итак командой _L можно выбрать только что созданный объект (к стати а что означает L?)
Попытаюсь без подглядывания.
Пока не учитывая #134

Код:
[Выделить все]
(defun C:Колонна (/ dimensionX dimensionY base)
(initget 7)
(setq dimensionX (getreal "Введите ширину колонны: "))
(initget 7)
(setq dimensionY (getreal "Введите толщину колонны: "))
(setq base 
    (cond
         (getpoint "\Введите точку вставки колонны <0,0,0> :")
         (t '(0. 0. 0.)))
     ) 
(setq pt1
     ( list ( - ( car base ) ( / dimensionX  2.0 ) )
            ( - (cadr base ) ( / dimensionY  2.0 ) )
     )
)
(setq pt2
     ( list ( - ( car base ) ( / dimensionX  2.0 ) )
            ( + (cadr base ) ( / dimensionY  2.0 ) )
     )
)
(setq pt3
     ( list ( + ( car base ) ( / dimensionX  2.0 ) )
            ( + (cadr base ) ( / dimensionY  2.0 ) )
     )
)
(setq pt4
     ( list ( + ( car base ) ( / dimensionX  2.0 ) )
            ( - (cadr base ) ( / dimensionY  2.0 ) )
     )
)
(command "_pline" pt1 pt2 pt3 pt4 "_c")
(command "_rotate" "_L" "" base)
  
;продолжение
)
Post, Спасибо, пока еще не успел посмотреть, но уже скачал.
__________________
Блог

Последний раз редактировалось Red Nova, 25.07.2008 в 10:08.
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 25.07.2008, 10:14
#136
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,970
Отправить сообщение для Red Nova с помощью Skype™


VVA,
Цитата:
1. Рисуем колонну
2. В центре колонны рисеум круг радиусом=ширине колонны
3. Поворачиваем колонну
В такой последовательности не смогу. Пока могу выбрать только объект созданный последним. В такой последовательности это не колонна а круг.
Но могу так. (сперва добавив локальную переменную R)
Код:
[Выделить все]
(Setq  R  ( / dimensionX  2.0 ))
(command "_circle" R)
(command "_pline" pt1 pt2 pt3 pt4 "_c")
(command "_rotate" "_L" "" base)
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 25.07.2008, 10:15
#137
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Red Nova,
Цитата:
(к стати а что означает L?
Цитата:
Command: _move
Select objects: I_don't_know_as

*Invalid selection*
Expects a point or
Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/P
revious/Undo/AUto/SIngle
С учетом п.2 #122 получаем _L
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 25.07.2008, 10:17
#138
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
В такой последовательности не смогу. Пока могу выбрать только объект созданный последним. В такой последовательности это не колонна а круг.
Я специально так и задал. Наша задача научится другим способом запоминать необходимые для дальнейшего использования примитивы и ссылаться на них в command.
Подсказка: entlast
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 25.07.2008, 10:42
#139
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,970
Отправить сообщение для Red Nova с помощью Skype™


Почитал хелп, не скажу что понял, но вроде как можно присвоить переменной обозначение только что введенного объекта.
Может так? (предварительно объявив локальную переменную object)
Код:
[Выделить все]
(Setq  R  ( / dimensionX  2.0 ))
(command "_pline" pt1 pt2 pt3 pt4 "_c")
(Setq object (entlast))
(command "_circle" R)
(command "_rotate" object "" base)
P.S. А есть перечень команд аутолисп с пояснением на русском. Я хоть с инглишем в ладах, но все же хелп лучше иметь не русском.
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 25.07.2008, 10:52
#140
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Может так?
А проверить?
У тебя rotate не завершена. Нужно ввести или угол или подождать действия пользователя п.3 #123
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

РЕВЕРС. Автоматическая пакетная печать множества рамок (форматов) из пространства модели и листов
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 261 04.05.2018 12:45
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||