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

Вернуться   Форум 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.
Просмотров: 1965962
 
Непрочитано 11.05.2017, 07:36
#3321
AlexSheep


 
Регистрация: 08.09.2010
Москва
Сообщений: 28


Fedorino,
Посмотри функцию initget
AlexSheep вне форума  
 
Непрочитано 11.05.2017, 07:52
#3322
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135


Цитата:
Сообщение от AlexSheep Посмотреть сообщение
Fedorino,
Посмотри функцию initget
AlexSheep спасибо!
Смотрел ее, вводил с маленькой буквы и не работало (initget "привет")
Надо с заглавной, всем спасибо!
Пример

Код:
[Выделить все]
 (defun c:rrr ( / )
	(initget "Привет")
	(setq pt (getpoint "\nУкажите точку: [Привет]"))
	(alert (vl-princ-to-string pt))
)
__________________
слесарь САПР
Fedorino вне форума  
 
Непрочитано 11.05.2017, 22:56
#3323
Enik

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254


Немного наивный вопрос. А кто-нибудь вообще слышал/видел в работе такую функцию, чтобы автоматически искала свободное место на чертеже для размещения текста/объектов?

Например, есть густо разрисованный чертёж. Нужно в конкретное место поставить точку/мультивыноску/блок и тп., чтобы программа автоматически прошерстила "окрестность" и поставила текст в ту часть чертежа, где он не будет перекрывать другие объекты. Причём, на максимально близком от конкретного места расстоянии.
Enik вне форума  
 
Непрочитано 12.05.2017, 01:25
#3324
Сергей812


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


Уже было подобное обсуждение в какой то ветке относительно выносок для кабельного журнала. Здесь задача гораздо сложнее. Например, ту же мультивыноску бывает порою проще вынести подальше от объекта, на который она указывает - чтобы при этом наклон и пересечки выносной линии с другими элементами чертежа обеспечивали однозначную визуальную связь выноски и объекта. Так что нахождение свободного "пятна" на чертежа - это лишь часть задачи.
Сергей812 вне форума  
 
Непрочитано 12.05.2017, 23:43
#3325
Enik

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Уже было подобное обсуждение в какой то ветке относительно выносок для кабельного журнала.
Не видел такой темы. Интересно, в результате обсуждения там что-нибудь интересное родилось?

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Здесь задача гораздо сложнее. Например, ту же мультивыноску бывает порою проще вынести подальше от объекта, на который она указывает - чтобы при этом наклон и пересечки выносной линии с другими элементами чертежа обеспечивали однозначную визуальную связь выноски и объекта.
Если копать на полный штык, то да. Но касательно реализации "чувства прекрасного" в программном коде - об этом даже подумать как-то боязно.

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Так что нахождение свободного "пятна" на чертежа - это лишь часть задачи.
А методология решения данных задач в принципе существует?

Мне в голову только одна мысль приходит.
1. Задаём размер "окрестности", в пределах которой нужно разместить выноску.
2. Из dxf кодов элементов в этой окрестности выделяем нужные данные.
3. Создаём виртуальное координатное поле в пределах окрестности:
- задаём размер ячейки координатного поля. Допустим, 0.1х0.1 единицы чертежа.
- циклически проходим все ячейки координатного поля. Если в пределах ячейки оказывается объект, ячейке присваивается свойство " 1". Если нет, то свойство "0".
4. Определяем размеры выноски, которую хотим разместить, в количестве ячеек координатного поля.
5. Ну а дальше методом концентрических окружностей программа, оперируя данными координатного поля и размерами выноски, ищет пустое место. Как это происходит. Циклично. Сначала задаётся небольшой радиус, просматриваются все точки на окружности от 0 до 2π с некоторым шагом углов. Если места нет, то выбираются всё большие и большие радиусы, и так же проходятся окружности от 0 до 2π. И так до тех пор, пока радиус поиска не станет равен изначально заданному радиусу окрестности. И если пустого места нет, то вылетает ошибка: "извини, братан, местов нема".

Если делать без виртуального координатного поля, то, боюсь, тут даже суперкомпьютер повиснет.

Но это всё догадки. Честно говоря, я даже такой науки не знаю, где бы такие алгоритмы и задачи рассматривались.

----- добавлено через ~6 мин. -----
Ну или просто секрамкой по размерам выноски проходить окрестность методом концентрических окружностей... Это проще, но тогда будут возникать ошибки и слипания выноски с объектами.
Enik вне форума  
 
Непрочитано 13.05.2017, 00:03
#3326
Сергей812


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


Enik, думаю, что если хотите раскрыть эту тематику - надо попросить админа/модераторов вынести в отдельную ветку)

А решения то есть математические 100%, например, те же самые задачи оптимального раскроя материалов на станке. Учитывайте, что еще должна быть типа "дефрагментации" - т.е. если места не хватает для установки элемента, то должна быть сначала анализ возможности перетасовки уже существующих элементов, а потом уж сообщать - "Упс". А если это все путем простого перебора делать...
Сергей812 вне форума  
 
Непрочитано 13.05.2017, 00:42
#3327
Enik

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Enik, думаю, что если хотите раскрыть эту тематику - надо попросить админа/модераторов вынести в отдельную ветку)
Сергей812, хорошая мысль, спасибо!

Алексей, прошу рассмотреть эту возможность...

Offtop: Попробую ещё LeeMac'у написать.

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Учитывайте, что еще должна быть типа "дефрагментации" - т.е. если места не хватает для установки элемента, то должна быть сначала анализ возможности перетасовки уже существующих элементов, а потом уж сообщать - "Упс".
Такими темпами можно и до умного проектирования дойти. Например, связать воедино кадастровый план, топосъёмку с домами, дорогами и коммуникациями. Наложить сюда ЗОУИТ. И вуаля: трассировка объекта готова. Вкалывают роботы - счастлив человек.
Enik вне форума  
 
Непрочитано 13.05.2017, 13:51
#3328
Сергей812


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


Offtop:
Цитата:
Сообщение от Enik Посмотреть сообщение
до умного проектирования дойти
это и является целью любой автоматизации проектирования - от рисования палочками и кружочками перейти к комплексной обработке информации. Уровень обработки информации разный просто - в зависимости от уровня кустарей-самоучек типа нас или сколько готова затратить фирма средств на внедрение.
Сергей812 вне форума  
 
Непрочитано 13.05.2017, 23:58
#3329
Enik

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254


Offtop: Накидал схемку, отправил ЛееМаку

Enik вне форума  
 
Непрочитано 14.05.2017, 07:13
#3330
Saur


 
Регистрация: 08.11.2010
Сообщений: 1,335


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Вот к примеру умею так:
Молодца. Опалубку перекрытия вычерчиваешь? А вот подрезать все равно вручную надо
Saur вне форума  
 
Непрочитано 15.05.2017, 10:01
#3331
Enik

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254


Offtop: Пришёл ответ от ЛееМака

Hi Vladimir,



Thank you for your message.



I'm afraid I haven't previously encountered programs such as you have described which would allow the automatic placement of annotation in a crowded drawing such that the annotation remains visible & readable. As you've identified from the algorithm described by your image set, such a task is relatively complex and would be quite a challenge to automate.



Kind Regards,



Lee


Offtop: В общем, придётся поднимать целину. Не похоже, чтобы этим кто-то занимался раньше.
Enik вне форума  
 
Непрочитано 19.05.2017, 16:34
#3332
hamlet's shadow

инженер
 
Регистрация: 09.05.2017
Красноярск
Сообщений: 3


Добрый день! Координаты примитива функциями lisp извлекаются в экспоненциальной форме (вроде: (2.08014e+008 4.11118e+008)), что в десятичной записи дает точность до 1000. Вопрос номер один - как повысить точность извлечения координат (хотя бы до значения точности в настройках чертежа autocad). И вопрос два - как в visual lisp переводить числа из одного формата в другой. Тыкаю редактор буквально третий день, ни разу не программист, а дудл предлагает функцию format, которая не читается интерпретатором и в справочнике инфы не углядел. Оби Ван, ты последняя надежда.
hamlet's shadow вне форума  
 
Непрочитано 19.05.2017, 17:04
1 | #3333
Кулик Алексей aka kpblc
Moderator

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


Я не оби Ван, поэтому не надейся
Данные извлекаются с максимальной точностью. Просто отображаются не совсем корректно. Можешь ради приколу проверить через (rtos value 2 16)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.05.2017, 19:33
#3334
hamlet's shadow

инженер
 
Регистрация: 09.05.2017
Красноярск
Сообщений: 3


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я не оби Ван, поэтому не надейся
Данные извлекаются с максимальной точностью. Просто отображаются не совсем корректно. Можешь ради приколу проверить через (rtos value 2 16)
Спасибо не Оби Ван Да, в строке смотрится куда "точнее", но проблема в том, что когда скармливаю список с координатами (вещественные числа в в экспоненциальной форме) функции "XLS" (которую выдернул отсюда http://forum.dwg.ru/showpost.php?p=244237&postcount=7), то в Excel она делает экспорт в той же форме (экспоненциальной) и с точностью, которая отображается в редакторе visual lisp. Перевод числа уже в экселе в десятичную форму дает результат с точность до 1000. Бяда. Если экспорт идет с максимальной точностью, то может в excel чего подкрутить нужно? Или без перевода чисел в строку до экспорта удачи не видать?
hamlet's shadow вне форума  
 
Непрочитано 21.05.2017, 13:53
#3335
Кулик Алексей aka kpblc
Moderator

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


Нннуууу... Если неохота сильно разбираться, попробуй поиграться с luprec, lunits - кажется, именно они отвечают за отображение значений.
P.S. Код не смотрел, не разбирался. Увы, некогда
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.05.2017, 10:11
#3336
Titli-pytli


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


Подскажите пожалуйста, как определять общие глобальные переменные для нескольких открытых чертежей? А то в одном чертеже она (переменная) есть, а в другом она nil.
Titli-pytli вне форума  
 
Непрочитано 26.05.2017, 10:18
1 | #3337
Кулик Алексей aka kpblc
Moderator

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


Если так уж надо, то используй функции vl-bb-set и vl-bb-ref
Хотя я бы подумывал об использовании реестра или внешних настроечных файлов. Нечасто надо делать внедокументные переменные.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2017, 08:14
#3338
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135


Здравствуйте!
Не могу придумать как организовать выбор двух событий, подскажите пожалуйста
Код:
[Выделить все]
 (setq es (entsel "Выберите объект для смещения или [Расстояние]: "))
Как сделать либо выбор объекта, либо ввод расстояния?
__________________
слесарь САПР
Fedorino вне форума  
 
Непрочитано 01.06.2017, 08:18
1 | #3339
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
   (initget 128 "Расстояние Distance")
  (entsel "Выберите объект для смещения или [Расстояние] : ")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2017, 08:36
#3340
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135


Алексей, спасибо, не знал что initget можно применять к другим методам кроме get.
__________________
слесарь САПР
Fedorino вне форума  
Ответ
Вернуться   Форум 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