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

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

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

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

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 1965869
 
Автор темы   Непрочитано 29.07.2008, 15:16
#221
Red Nova

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


Цитата:
Синтаксис Пушкин должен соблюдать
Пушкин так же как и я не знает что это такое. Мы с ним просим пояснить.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 29.07.2008, 15:31
#222
Red Nova

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


Пытаюсь понять что это значит
Цитата:
4.71 (logior <число> <число> ...)

Эта функция возвращает результат действия побитового ИЛИ над списком <чисел>. <Числа> должны быть целые и результат так же целое число.

Например:

(logior 1 2 4) возвращает 7

(logior 9 3) возвращает 11
__________________
Блог
Red Nova вне форума  
 
Непрочитано 29.07.2008, 15:39
#223
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Вернемся к нашему коду,
Используя созданные функции (без лирических отступлений) его можна записать так:
Код:
[Выделить все]
(defun disable_osmode ()
(if (<= (- (getvar "osmode") 1684) 0)
  (setvar "osmode" (+ (getvar "osmode") 16384))
)
)
  
(defun enable_osmode ()
(if (> (- (getvar "osmode") 1684) 0)
  (setvar "osmode" (- (getvar "osmode") 16384))
)
)

(defun c:колонна (/)
      	(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 '(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)))
	(disable_osmode)
  
  	(command "._pline"
		(list x1 y1)
		(list x1 y2)
		(list x2 y2)
		(list X2 y1)
		"_close"
	)
  
  	(Setq object (entlast))
  	(command "_circle" p (/ a 2))
  	(enable_osmode)
	(command "_rotate" object "" p pause) 
  )
Все ли верно?
Давайте дальше усложнять....
andery вне форума  
 
Непрочитано 29.07.2008, 15:40
#224
Олег К.

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


То ли я чего-то пропустил, но:
Цитата:
disable_osmode - Функция отключения режима(ов) объектной привязки
enable_osmode - Функция включения режима(ов) объектной привязки
Из последнего примера:
Код:
[Выделить все]
(defun enable_osmode ()
    (if (> (getvar "osmode") 16383) 
      (setvar "osmode" (- getvar "osmode" 16384)) 
    )
)
т.е. словами: функция включения привязок - если "osmode" больше 16384 (привязки включены), то вычесть из "osmode" 16384 (отключить привязки). Что-то не сходится.

И еще. Red Nova и andery внимательнее к цифрам, что означают "1684" и "16383"? Привязки с битом =0 нет (есть "отсутствие" привязки), так что больше или меньше 16384.

Последний раз редактировалось Олег К., 29.07.2008 в 16:47.
Олег К. вне форума  
 
Автор темы   Непрочитано 29.07.2008, 16:07
#225
Red Nova

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


Олег К.,
Цитата:
если "osmode" больше 16384 (привязки включены), то вычесть из "osmode" 16384 (отключить привязки).
По моему на оборот если "osmode" больше 16384 (привязки выключены), то вычесть из "osmode" 16384 (включить привязки)
Цитата:
что означают "16383"?
Так если там будет 16384, то нужно и знак равенства ставить, а так и без него пойдет.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 29.07.2008, 16:17
#226
Red Nova

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


VVA
Я застрял.
Сразу куча непонятного.
1. Что значит следить за синтаксисом. (где я ошибся?)
2. Что делают ф-ии logior и boole ? Мое “не программистское” мышление не может понять логики в цитатах из хелпа по этим ф-иям.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 29.07.2008, 16:20
#227
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Я так понял что
osmode = 0 и
osmode = 16384
равнозначный выражения и означает, что все привязки выключены.
Тогда значит данный код
Код:
[Выделить все]
(defun enable_osmode ()
    (if (> (getvar "osmode") 16383) 
      (setvar "osmode" (- getvar "osmode" 16384)) 
    )
)
даст сбой при значении osmode=16384, т.к. приведет к значению равному 0, т.е. не включит привязки.
andery вне форума  
 
Непрочитано 29.07.2008, 16:31
#228
Олег К.

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


Да, действительно, при выключении привязок прибавляется 16384. Был не прав, извиняюсь.

>> andery. Вот об этом и говорил: внимательнее к цифрам. Ноль тоже меньше 16384, в системе этого значения нет, но его можно выставить вручную.
Получается, когда osmode=0 или >= 16384 привязки выключены, от 1 до 16383 - включены.

Добавлю еще.
Когда все привязки выключены вручную (Drafting settings -> Object Snap) то osmode=0 а не 16384. Именно это число (16384) нигде не показывается, оно служит лишь добавкой.

Последний раз редактировалось Олег К., 29.07.2008 в 16:57.
Олег К. вне форума  
 
Непрочитано 29.07.2008, 16:41
#229
VVA

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
VVA
Я застрял.
Сразу куча непонятного.
1. Что значит следить за синтаксисом. (где я ошибся?)
2. Что делают ф-ии logior и boole ? Мое “не программистское” мышление не может понять логики в цитатах из хелпа по этим ф-иям.
1. Попробуй скопируй функции из поста #217 в Visual LISP и выполни
2. Вкратце каждое число представляется в двоичной системе счисления и сравнивается каждый бит. В общем забудь. Понятней с if - используй его.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 30.07.2008 в 12:48.
VVA вне форума  
 
Непрочитано 29.07.2008, 16:46
#230
VVA

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


Цитата:
Давайте дальше усложнять.
А теперь хочу чтобы колонна рисовалась на слое "Колонны".
Цвет слоя - красный. Тип линии - Continuous. После завершения команды AutoCAD должен вернуться на начальный слой.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 29.07.2008 в 17:05. Причина: Уточнение задания
VVA вне форума  
 
Непрочитано 29.07.2008, 16:51
#231
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Тип линии - Continuous. После завершения команды AutoCAD должен вернуться на начальный слой.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.07.2008, 17:30
#232
Red Nova

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


VVA, Кулик Алексей aka kpblc,
А функции подсказать? Через command вроде как не пройдет.
Цитата:
Попробуй скопируй функции из поста #217 в Visual LISP и выполни
При попытке поменять переменную пишет
Цитата:
Command: (disable_osmode)
; error: bad argument type: numberp: #<SUBR @0c9b66f4 GETVAR>
__________________
Блог
Red Nova вне форума  
 
Непрочитано 29.07.2008, 17:46
#233
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Я чтот запутался...
что должна делать функция enable_osmode при
osmode=16384 ?
andery вне форума  
 
Непрочитано 29.07.2008, 17:48
#234
VVA

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


Red Nova, Пишет правильно
Код:
[Выделить все]
(defun disable_osmode ()
    (if (< (getvar "osmode") 16384) 
      (setvar "osmode" (+ (getvar "osmode") 16384)) 
    )
)
(defun enable_osmode ()
    (if (> (getvar "osmode") 16383) 
      (setvar "osmode" (- (getvar "osmode") 16384)) 
    )
)
Кто красные скобки ставить будет? Пушкин? Синтаксис - правильность написания
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.07.2008, 17:50
#235
VVA

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


andery, Ничего не делать. Оставить как есть.
Цитата:
А функции подсказать? Через command вроде как не пройдет.
Почему не пройдет?
Команда _-LAYER, переменная CLAYER
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 29.07.2008, 17:54
#236
Red Nova

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


Понял.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 30.07.2008, 10:47
#237
Red Nova

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


VVA,
Вот вариант команды одновременно и отключающей и включающей привязки. Работает.
Код:
[Выделить все]
(defun c:disable_enable_osmode ()
    (if (< (getvar "osmode") 16384) 
      (setvar "osmode" (+ (getvar "osmode") 16384)) 
      (setvar "osmode" (- (getvar "osmode") 16384))
    )
)
Над новым заданием пока думаю. Пока что-то нашел про entmake.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 30.07.2008, 11:03
#238
Red Nova

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


Из хелпа
Цитата:
The following code fragment creates a circle on the MYLAYER layer:

(entmake '((0 . "CIRCLE") ; Object type
(8 . "MYLAYER") ; Layer
(10 5.0 7.0 0.0) ; Center point
(40 . 1.0) ; Radius
) )
Я так понял, что в скобках пишется код операции, затем ее параметры. То есть
(0 . "CIRCLE") тут 0 Значит, что создается объект, далее поясняется, что это круг.
(8 . "MYLAYER") тут 8 означает, что создается слой, далее его имя.
(10 5.0 7.0 0.0) 10 означает что далее идут координаты центра объекта.
(40 . 1.0) 40 означает, что далее идет радиус объекта.

Если я прав, то где найти коды для других операций?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 30.07.2008, 11:27
#239
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


DXF Reference. По ходу дела разберись с разницей между ', list, cond.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.07.2008, 11:37
#240
Олег К.

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


А не рано? VVA хотел, чтоб пока командами научились работать.

dxf-коды можно посмотреть в хелпе редактора лиспа, раздел "DXF Reference".
Не создается, а "это объект такой-то" и "находится на слое таком-то".
Если в создаваемом объекте указан отсутствующий слой, то он (слой) будет создан, но с умолчальными настройками.
Олег К. вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

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

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


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