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

Вернуться   Форум 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.
Просмотров: 1965841
 
Непрочитано 30.08.2019, 15:37
#3781
VVA

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


Еще функция от Евгения Елпанова str-str-lst
Подробнее здесь http://elpanov.com/index.php?id=14
Код:
[Выделить все]
;;;  * Ф-ция str-str-lst
;;;  * Сервисная ф-ция извлечения из строки данных, разделенных
;;;  * каким либо символом или строкой символов
;;;  * Возвращает список строк
;;;  * Аргументы [Type]:
;;;    str - строка для разбора [STRING]
;;;    pat - разделитель [STRING]
;;;  *  Пример запуска
;;;    (setq str "мы;изучаем;рекурсии" pat ";")
;;;    (setq str "мы — изучаем — рекурсии" pat " — ")
;;;    (str-str-lst str pat)
;;;  * Читать подробнее http://elpanov.com/index.php?id=14
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.08.2019, 16:48
#3782
superkot007


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


Спасибо всем ответившим!
Новый вопрос - как создать список, добавляя каждый элемент через while?
Суть в следующем: обрабатывается набор примитивов, из каждого нужно получить определенный параметр (строка). Перебор примитивов по while и возрастанию порядкового номера примитива понятен и реализован, а вот создание списка и добавление к нему элемента - нет.
superkot007 вне форума  
 
Непрочитано 01.09.2019, 15:29
#3783
Кулик Алексей aka kpblc
Moderator

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


cons, append и иже с ними.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.09.2019, 22:00
#3784
superkot007


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


Кулик Алексей aka kpblc, ага, функция CONS подошла, спасибо!
superkot007 вне форума  
 
Непрочитано 07.09.2019, 15:07
#3785
superkot007


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


Доброй субботы, форумчане!
Создавать отдельную тему не рискнул, посчитал пост здесь более уместным. Так что извините, если не прав)

Очередная проблема, которую, я думаю, можно решить через lisp, состоит в следующем.

Есть большое количество таблиц в dwg-формате, которые не имеют границ ячеек, только внешние границы самих таблиц.
В качестве границ ячеек используются разное расстояние между строками, по которым таблицами вообще можно пользоваться.
Отдельные ячейки могут содержать несколько однострочных текстов, могут быть пустыми, объединенных ячеек - нет.
Пример выложить не могу, конфиденциальность и все прочее...

Есть ли какое-нибудь решение по экспорту подобных таблиц в Excel, которое требовало бы минимальной доработки? Поиском пользовался.
Из наиболее близкого, как мне кажется, является pl_export-to-excel.LSP из https://dwg.ru/dnl/6638.
Если "вручную" прорисовать границы ячеек - отрабатывает великолепно, но прорисовка границ займет много времени...
Дополнительная морока - с однострочными текстами в ячейке. Их нужно объединять, а это доп. время... pl_export-to-excel.LSP подправил, под работу с MTEXT (вместо "TEXT" нужно использовать "*TEXT"), про _txt2mtxt из Express - в курсе.

Если бы можно было как-то программно прорисовать внутренние границы, объединить однострочные тексты ячеек в многострочные - можно было бы пользоваться pl_export-to-excel.LSP.

Был бы безмерно счастлив, если бы кто-то уже решал подобную задачу и поделился бы инструментами решения...
Но, думаю, вряд ли такое случится...
Потому, если у кого есть подсказки по решению проблемы - тоже буду благодарен.
superkot007 вне форума  
 
Непрочитано 07.09.2019, 15:15
#3786
Сергей812


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


Цитата:
Сообщение от superkot007 Посмотреть сообщение
Есть большое количество таблиц в dwg-формате, которые не имеют границ ячеек, только внешние границы самих таблиц.
В качестве границ ячеек используются разное расстояние между строками, по которым таблицами вообще можно пользоваться.
Отдельные ячейки могут содержать несколько однострочных текстов, могут быть пустыми, объединенных ячеек - нет.
Пример выложить не могу, конфиденциальность и все прочее...
а они точно таблицы акада, а не имитация из палочек и текста?)
Сергей812 вне форума  
 
Непрочитано 07.09.2019, 15:33
#3787
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от superkot007 Посмотреть сообщение
подсказки по решению проблемы
Ну, чисто теоретически: с каждого объекта забрать его границы, проанализировать тексты по их границам (возможно, надо будет фасовать центры), потом сформировать массив и заполнять им создаваемый объект ACAD_TABLE.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.09.2019, 15:53
#3788
Сергей812


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


И чем вот это не подошло?
Сергей812 вне форума  
 
Непрочитано 07.09.2019, 16:45
#3789
superkot007


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


Сергей812
Не понял про имитацию, если честно)
Есть файлы dwg, в которые программно (неизвестно из чего и так) выгружены данные - однострочные тексты.
Моя задача - собрать таблицы в Excel и обработать.
В ручном режиме я это могу сделать - прорисовать горизонтальные/вертикальные внутренние границы, объединить строки в одной ячейке в MTEXT, применить pl_export-to-excel.LSP. И получу хорошие таблицы... Через несколько недель-месяцев))
Задача - понять, как это все можно автоматизировать и свести ручные доработки к минимуму.

Кулик Алексей aka kpblc
Я изначально предполагал такой алгоритм:
1) получить набор примитивов, входящих в таблицу (выбор по двум точкам противоположных углов области), это сделал;
2) создать "поднаборы" по колонкам (M штук), с сортировкой по координате вставки однострочного текста, сверху вниз - чтобы определить, какая из колонок состоит из наибольшего количества строк (N в будущем массиве);
4) создать "временный" массив (N строк / M столбцов) однострочных текстов - для пустых ячеек предполагалось создавать однострочные тексты постоянного содержания, чтобы все "поднаборы" имели одинаковое количество примитивов, в нужной последовательности;
5) по перебору элементов массива слева-направо, сверху вниз (или по одинаковым порядковым номерам "поднаборов"?) провести проверку однострочных текстов на необходимость сцепления в итоговую таблицу:
- если текст ниже проверяемого - "постоянный", то строка не меняется, если отличается - произвести сцепление;
- в случае сцепления однострочный текст ниже меняется на "постоянный", если вся строка состоит из таких однострочных текстов - она не обрабатывается;
- результаты обработки/сцепки передавать в "итоговый массив" - таблицу (N1 строк / M столбцов), N1 <= N;
6) после получения массива итоговой таблицы - можно прорисовать горизонтальные и вертикальные отрезки;
7) применить pl_export-to-excel.LSP и последовательным выбором пройтись по всем таблицам со всеми границами.

Может, что-то пропустил, неточно описал... Такой алгоритм возможно реализовать?

----- добавлено через ~6 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
И чем вот это не подошло?
Попадалось. Но это для полноценных таблиц AutoCAD, а у меня примитивы, однострочный текст.
СПДС-овское "втаблицу" тоже не прокатило - нужны внутренние границы для распознавания ячеек.
superkot007 вне форума  
 
Непрочитано 07.09.2019, 18:14
#3790
Сергей812


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


Цитата:
Сообщение от superkot007 Посмотреть сообщение
Такой алгоритм возможно реализовать?
так как
Цитата:
Сообщение от superkot007 Посмотреть сообщение
Пример выложить не могу, конфиденциальность и все прочее...
то фиг знает. А почему не выгрузить в эксель содержимое однострочного текста с координатами и там уже не обрабатывать? Если есть координаты в параметрах извлечения данных, не помню навскидку..
Сергей812 вне форума  
 
Непрочитано 07.09.2019, 20:43
#3791
superkot007


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


Сергей812
интересная идея обходного решения, не думал об этом)
Извлечь - можно, координаты и содержимое передаются. Но потом это надо "растаскивать", судя по всему - вручную...
По времени - проще "пробежаться" по ячейкам, объединить нужные строки в многострочные тексты, раскидать отрезки в качестве границ и использовать pl_export-to-excel.LSP

Но это натолкнуло на другой алгоритм:
- разместить все области таблиц друг над другом (1 таблица в одном файле, можно автоматом собирать все в одном, задавая смещение вставки относительно уже вставленных, программка - fast-copy, http://weisskrahe.ru/costenfree/costenfree.html);
- в первой колонке есть номера строк таблицы; над ними на какой-нибудь высоте можно автоматом "раскидать" горизонтальные границы ячеек;
- вертикальные границы можно "раскидать" аналогично, тут даже проще, так как нет объединенных ячеек;
- внутри каждой ячейки объединить строки в MTEXT - (выбор текстов по контурам (через КОНТУР (_BOUNDARY) или КПОЛИ (_BPOLY)) и применение к ним _txt2mtxt ?)
- как будет "сетка", подготовленные тексты в ячейках - можно применять pl_export-to-excel.LSP;
- в Excel останется только повторяющиеся шапки убрать и отформатировать.

Последний раз редактировалось superkot007, 07.09.2019 в 20:54.
superkot007 вне форума  
 
Непрочитано 08.09.2019, 21:05
#3792
Кондратий Тихонович


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


В интернете пишуть, что ЛИСП предназначен (и создавался) ИСКЛЮЧИТЕЛЬНО для разработки систем искусственного разума.
Тогда почему на нём пишут только простенькие скриптики в автокаде и больше нигде не используют?

----- добавлено через 58 сек. -----
Хотел создать тему в "разное".
Но там запрещено создавать темы.
А мне вообще во всех разделах почему-то запрещено создавать темы.

Поэтому спрашиваю тут

----- добавлено через ~3 мин. -----
Где можно почитать про использование ЛИСП конкретно для проектирования систем искуственного разума и где можно ознакомиться с примерами ИИ на Лиспе
Кондратий Тихонович вне форума  
 
Непрочитано 08.09.2019, 21:24
#3793
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Кондратий Тихонович Посмотреть сообщение
почему на нём пишут только простенькие скриптики в автокаде и больше нигде не используют?
Кто сказал? http://www.tmeter.ru/ - первое, что приходит на память.
Цитата:
Сообщение от Кондратий Тихонович Посмотреть сообщение
Где можно почитать про использование ЛИСП конкретно для проектирования систем искуственного разума и где можно ознакомиться с примерами ИИ на Лиспе
Примерно там же, где объясняется, что такое ИИ.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.09.2019, 21:33
#3794
superkot007


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


По какому критерию можно создать набор из полилиний, замкнутых в контур, у которых из общего - длина/ширина и количество вершин (есть прямоугольники с 5 вершинами (1 и 5 совпадают)?
Можно было бы по постоянной длине, но такого параметра после
Код:
[Выделить все]
 (entget (car (entsel)))
не вижу...
superkot007 вне форума  
 
Непрочитано 08.09.2019, 21:47
#3795
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 1,971


Цитата:
Сообщение от Кондратий Тихонович Посмотреть сообщение
В интернете пишуть, что ЛИСП предназначен (и создавался) ИСКЛЮЧИТЕЛЬНО для разработки систем искусственного разума.
Тогда почему на нём пишут только простенькие скриптики в автокаде и больше нигде не используют?
ИИ тогда не получился, а сам по себе Лисп иногда удобнее процедурных языков.

Цитата:
Сообщение от Кондратий Тихонович Посмотреть сообщение
Где можно почитать про использование ЛИСП конкретно для проектирования систем искуственного разума и где можно ознакомиться с примерами ИИ на Лиспе
В одно бумажной книге по Лиспу видел коротенькую программу-психотерапевта, это всё что получилось.

Цитата:
Сообщение от superkot007 Посмотреть сообщение
По какому критерию можно создать набор из полилиний, замкнутых в контур, у которых из общего - длина/ширина и количество вершин (есть прямоугольники с 5 вершинами (1 и 5 совпадают)?
Как бы не пришлось брать список всех полилиний, а потом строить новый по критерию.
SetQ вне форума  
 
Непрочитано 08.09.2019, 21:48
#3796
Кулик Алексей aka kpblc
Moderator

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


Что значит "ширина"? ContantWidth? Ну и ладно, собираем все что даст пользователь, а потом из набора убираем ненужное. ИМХО - самый простой способ.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.09.2019, 21:55
#3797
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 1,971


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Что значит "ширина"?
Длины коротких сторон прямоугольника, мне кажется.
SetQ вне форума  
 
Непрочитано 08.09.2019, 22:24
#3798
Кулик Алексей aka kpblc
Moderator

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


SetQ, ну кто ж его знает
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.09.2019, 23:14
#3799
superkot007


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


del

Последний раз редактировалось superkot007, 09.09.2019 в 22:58.
superkot007 вне форума  
 
Непрочитано 09.09.2019, 11:59
#3800
Сет


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


Как программно в мультивыноске задать разную высоту для верхнего и нижнего текста?
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 5
Размер:	4.0 Кб
ID:	217625  
Сет вне форума  
Ответ
Вернуться   Форум 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