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

Вернуться   Форум 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.
Просмотров: 1965923
 
Непрочитано 11.01.2017, 10:55
#3201
kurstep


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


Цитата:
Сообщение от VVA Посмотреть сообщение
VVA
Спасибо, но мне нужно чтоб зависимый объект не перемещался за основным, а именно выделялся - т.е событие Selection Change - проблема в том, что ни в справочниках, ни у Полещука не могу найти реактор для этого события, А может ли быть такое что на Autolisp его нет, и надо программировать именно на VBA?
kurstep вне форума  
 
Непрочитано 11.01.2017, 11:10
#3202
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от kurstep Посмотреть сообщение
Подскажите пожалуйста как программно сделать так чтоб при выборе графического объекта автокада выделялся сразу и зависимый объект (эти два объекта нужно заранее также программно сделать зависимыми ) (команда группа не подходит так как хочется сохранить ручки редактирования объектов)
А может, группа подойдет, если сделать GROUPDISPLAYMODE -> 0?
skkkk вне форума  
 
Непрочитано 11.01.2017, 11:34
#3203
kurstep


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
skkkk
О!! Спасибо, то что надо -выделяются объекты группы и ручки остаются, спасибо, все легче чем я думал)
Но если кто-нибудь все-таки подскажет как решить проблему с помощью реактора буду рад

Последний раз редактировалось kurstep, 11.01.2017 в 11:45.
kurstep вне форума  
 
Непрочитано 11.01.2017, 12:12
1 | #3204
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


1. Выделяем нужные объекты, вызываем команду (функцию), которую предварительно следует написать. Она создаст в чертеже информацию о том, какие элементы входят в нашу импровизированную группу. Каждый раз при ее вызове будет создавать новую запись. Где? Надо выбрать: пользовательские словари чертежа (ldata), пользовательские свойства документа... может еще варианты придумаются на второй взгляд. Если нужно в пределах сеанса, то просто запоминаем каждый набор в глобальной переменной.
2. Создаем реактор "прочих" событий (miscellaneous reactor) на событие pickfirstModified (предварительный набор объектов изменен):
Код:
[Выделить все]
 (vlr-miscellaneous-reactor 
	nil
	(list '(:VLR-pickfirstModified . pickfirstModified))
)
3. Создаем функцию, действия на событие, примерно так, не вникая в детали:
Код:
[Выделить все]
 (defun pickfirstModified (reac data / ss)
	(if ;;; если
		(and 
			(setq ss (cadr (ssgetfirst))) ;;; есть предварительный набор объектов
			(= (sslength ss) 1) ;;; и их количество равно 1
			;;; тут прописываем условие принадлежности 
			;;; выбранного объекта нашей импровизированной группе
		)
		(progn ;;; если условия в (and) выполняются,
			(setq ss ............) ;;; создаем набор объектов, входящих в "группу"
			(sssetfirst nil ss)   ;;; подсвечиваем его ручками
		)
	)
)
skkkk вне форума  
 
Непрочитано 11.01.2017, 12:24
1 | #3205
frostmourn


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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Имею динамический блок, у него есть полярный параметр.
Ищу возможность вставить блок командой с указанием двух точек, но при этом хочу чтобы после указания первой точки блок "висел на курсоре"
По аналогии с прорисовкой обычной линии, после указания первой точки линия следует за курсором.
Подопытный прикреплен.
На первый взгляд не вижу особых препятствий. Тут похожее уже выкладывали, только под конкретную задачу поменять. Вот в приложении основа.
Вложения
Тип файла: lsp RedNova.lsp (42.0 Кб, 24 просмотров)

Последний раз редактировалось frostmourn, 12.01.2017 в 02:11.
frostmourn вне форума  
 
Автор темы   Непрочитано 12.01.2017, 04:21
#3206
Red Nova

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


frostmourn
Спасибо за помощь! Огорчает что osnap тут неполноценный и не реагирует на все привязки. Еще нет поддержки ortho / polar. А без этого теряется смысл использовать такую команду. Поняв что grread изначально не работает с привязкой я и подался в общий раздел .
__________________
Блог
Red Nova вне форума  
 
Непрочитано 12.01.2017, 15:32
#3207
frostmourn


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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
osnap тут неполноценный и не реагирует на все привязки.
Что есть, то есть.
Цитата:
Сообщение от Red Nova Посмотреть сообщение
Еще нет поддержки ortho / polar.
Это несложно добавить.
frostmourn вне форума  
 
Непрочитано 13.01.2017, 13:19
#3208
George_D


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


Добрый день, подскажите пожалуйста, в какую кодировку преобразует строки функция vl-string->list ? ANCII? Наверно в какую то региональную версию ANCII, но какую?
George_D вне форума  
 
Непрочитано 13.01.2017, 14:14
#3209
Shumak

инженер-конструктор
 
Регистрация: 24.08.2016
Санкт-Петербург
Сообщений: 1


Здравствуйте! Имеется макрос ^C^C(SetQ Cl (Getvar "Clayer"));-Layer;Set;arrow;^C_QLEADER;\\\^C(Setvar "Clayer" Cl) (создает пустую выноску в нужном слое, и возвращает предыдущий активный слой)
Очень хотелось бы создать лисп его заменяющий.
Сначала, вдохновившись темой http://forum.dwg.ru/showthread.php?t=136285 пыталась использовать (command "_.QLEADER") в лиспе, но не разобралась как остановить выполнение qleader после задания 3х точек, чтобы он не запрашивал текст, его высоту.
Теперь обдумываю возможность создания нового примитива через entmake, c запросом точек, и извлечением текущего разм. стиля.
Буду благодарна если кто-то вразумит новичка в lisp
Shumak вне форума  
 
Автор темы   Непрочитано 15.01.2017, 20:27
#3210
Red Nova

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


Как проверить имеет ли REAL число только нули после запятой? То есть может ли оно быть превращено в INTEGER и не потерять своего точного значения?
Пример
REAL 4.000 точно равно INTEGER 4
REAL 4.010 не равно INTEGER 4
__________________
Блог

Последний раз редактировалось Red Nova, 15.01.2017 в 22:11.
Red Nova вне форума  
 
Непрочитано 15.01.2017, 21:38
#3211
Кулик Алексей aka kpblc
Moderator

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


Red Nova, ты путаешься в показаниях типах значений. int не может быть 4.01
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.01.2017, 22:11
#3212
Red Nova

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


kpblc, Верно, я имел ввиду с точностью до наоборот. Поправил. Глянь снова вопрос плиз.
Вопрос возник когда я делил два числа друг на друга и после должен был определить имеет ли результат остаток или нет. Пока что не сумел...
То есть
95.000/24.000 = 3.958 - есть остаток
96.000/24.000 = 4.000 - нет остатка
__________________
Блог

Последний раз редактировалось Red Nova, 15.01.2017 в 22:24.
Red Nova вне форума  
 
Непрочитано 15.01.2017, 22:23
#3213
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Red Nova, на вскидку - то, что первым пришло в голову: выставляешь DIMZIN в 8, а затем "щупаешь" число функцией rtos (кажется, максимальное количество знаков после запятой, поддерживаемое AutoCAD'ом - 16). При таком раскладе все незначимые нули убираются и возвращается строка. Если в этой строке есть точка, значит число было нецелым.
Либо equal с нужным допуском.
skkkk вне форума  
 
Непрочитано 15.01.2017, 22:26
1 | #3214
Кулик Алексей aka kpblc
Moderator

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


Red Nova, а чем теме rem не нравится?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.01.2017, 22:34
#3215
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,006


Глянул ради интереса у Полещука - он пишет "Символ языка LISP может менять в ходе своей программы тип своего значения". А при какой абсолютной величине дробной части числа оно перестает считаться вещественным? Наверняка заложена какая то константа в самом языке.
Сергей812 вне форума  
 
Автор темы   Непрочитано 15.01.2017, 22:56
#3216
Red Nova

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


skkkk,
Сперва я тыкал DIMZIN и rtos, но что-то наверное делал не так раз не получалось.

kpblc
А как тут rem может помочь?

В итоге сделал так:
Код:
[Выделить все]
     (or
      (= testInteger (LM:rounddown testInteger 1))
      (= testInteger (LM:roundup testInteger 1))
      )

    ;; Round Up  -  Lee Mac
    ;; Rounds 'n' up to the nearest 'm'
     
    (defun LM:roundup ( n m )
        (cond
            ((equal 0.0 (rem n m) 1e-8) n)
            ((< n 0) (- n (rem n m)))
            ((+ n (- m (rem n m))))
        )
    )
     
    ;; Round Down  -  Lee Mac
    ;; Rounds 'n' down to the nearest 'm'
     
    (defun LM:rounddown ( n m )
        (cond
            ((equal 0.0 (rem n m) 1e-8) n)
            ((< n 0) (- n (rem n m) m))
            ((- n (rem n m)))
        )
    )
__________________
Блог

Последний раз редактировалось Red Nova, 16.01.2017 в 00:07.
Red Nova вне форума  
 
Непрочитано 15.01.2017, 22:58
1 | 1 #3217
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Я тут тоже глянул...
Цитата:
Команда: (rtos 4.00001 2 16)
"4.000009999999999"
А потом еще глянул...
Цитата:
Команда: (rtos 4.000001 2 16)
"4.000001"
То есть, до пяти знаков после запятой и после пяти знаков - результат разный (DIMZIN = 8). Почему бы?

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от Red Nova Посмотреть сообщение
А как тут rem может помочь?
Цитата:
Сообщение от Red Nova Посмотреть сообщение
((equal 0.0 (rem n m) 1e-8) n)
((< n 0) (- n (rem n m) m))
((- n (rem n m)))
Все еще не понимаешь, как?

Цитата:
Сообщение от Red Nova Посмотреть сообщение
Сперва я тыкал DIMZIN и rtos, но что-то наверное делал не так раз не получалось.
Смотря, что делал. Я бы пояснил подробнее, но потыкав сам в этот ртос, увидел, что он неожидаемые какие-то результаты выдает, поэтому не буду.
Ну получилось то, чего хотел? Я просто изначально не вполне понял практической сути вопроса.
skkkk вне форума  
 
Автор темы   Непрочитано 16.01.2017, 00:18
#3218
Red Nova

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
((equal 0.0 (rem n m) 1e-8) n)
((< n 0) (- n (rem n m) m))
((- n (rem n m)))
Все еще не понимаешь, как?
Я и не смотрел как работает функция от LeeMac. А оказывается все тот же rem. Только что еще покопал и таки до меня дошел ее смысл

Цитата:
Ну получилось то, чего хотел? Я просто изначально не вполне понял практической сути вопроса.
Да, получилось. Сравниваю число с его значениями при округлении в большую и меньшую сторону соответственно, если число не равно ни тому ни тому, то оно имеет остаток.
Наверное можно и покороче с rem что-то написать, но мне и так сойдет.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 16.01.2017, 23:32
#3219
Дима_

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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Глянул ради интереса у Полещука - он пишет "Символ языка LISP может менять в ходе своей программы тип своего значения". А при какой абсолютной величине дробной части числа оно перестает считаться вещественным? Наверняка заложена какая то константа в самом языке.
Я думаю это примечание надо читать в более глобальном смысле - если более заумными словами - LISP язык с динамической типизацией.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 17.01.2017, 07:57
#3220
mkung


 
Регистрация: 05.09.2007
RUSSIA
Сообщений: 165


Подскажите, как программно вставить блок "Block1" из файла "C:\Drawings\Drawing.dwg"? Имена известны.
Как проверить наличие блока "Block1" в файле "C:\Drawings\Drawing.dwg"?
Заранее благодарен.
mkung вне форума  
Ответ
Вернуться   Форум 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