Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) - Страница 134
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

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

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

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

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 2048454
 
Непрочитано 24.06.2015, 16:54
#2661
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А если примерно так
Для преобразования целого в строку существует функция itoa
gomer вне форума  
 
Непрочитано 24.06.2015, 17:13
#2662
Кулик Алексей aka kpblc
Moderator

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


Ага, целого. А запрашивается real, хранится real. В любом случае, в качестве иллюстрации будет достаточно, я думаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.06.2015, 21:35
#2663
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


gomer, код из MPL я привёл лишь в качестве примера, а мне требуется именно вещественное число.

Кулик Алексей aka kpblc, очень изящное решение. Удалось сэкономить на одной переменной. Большое спасибо.
T.Bagdat вне форума  
 
Непрочитано 26.06.2015, 00:28
1 | #2664
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
очень изящное решение.
корявое это решение... хотя бы так
Код:
[Выделить все]
 (or (numberp dl)
    (setq dl 100.0)
)

(setq dl (cond ((getreal
                  (strcat "\nУкажите вещественное число "
                          "<"
                          (rtos dl 2 (getvar 'luprec))
                          "> : "
                  )
                )
               )
               (dl)
         )
)
gomer вне форума  
 
Непрочитано 02.07.2015, 09:42 Получение данных из других приложений
#2665
mkung


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


Добрый день.
Можно ли из Автокада работать с объектной моделью другого запущенного приложения?
Например, получить ссылку на файл из системы документооборота?
Если да - то как "залезть" в чужую модель?
Заранее благодарен.
mkung вне форума  
 
Непрочитано 02.07.2015, 10:20
1 | #2666
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от mkung Посмотреть сообщение
Можно ли из Автокада работать с объектной моделью другого запущенного приложения?
Можно. При соблюдении хотя бы одного из условий: у другого приложения реализована СОМ-модель либо есть файлы библиотек (tlb), к которым можно "подконнектиться".

----- добавлено через 35 сек. -----
Цитата:
Сообщение от mkung Посмотреть сообщение
как "залезть" в чужую модель?
Поищи примеры работы с файлами Excel - в качестве примера покатит, думаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.07.2015, 11:19
#2667
mkung


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Можно. При соблюдении хотя бы одного из условий: у другого приложения реализована СОМ-модель
Можно ли Лиспом еще как-то посмотреть свойства и методы если:
(vlax-dump-object (vlax-get-or-create-object "LotsiaPDM.Application"))
; Объект не поддерживает интерфейс ITypeInfo


----- добавлено через ~4 ч. -----
Программист ЛОЦИИ написал на С# как добраться до нужного пути к файлу:
Цитата:
1 Создание экземпляра Лоции
GlobalVar.LPDM = new LotsiaPDM.Application();
2 Создание сервисного объекта
GlobalVAR.Service = GlobalVAR.LPDM.CreateObjectService();
3. Инициализация действия в Лоции (выполнение метода)
DPDMOperation selectOper = GlobalVar.LPDM.GetOperation(70000235);
4. Выполнение действия (выполнение метода)
selectOper.Execute()
5. Получения переменной из действия
decimal idDocSignLarge = selectOper.GetVarValue("SignLargeDoc");
decimal idDocSignSmall = selectOper.GetVarValue("SignSmallDoc");
decimal idDocSignVect = selectOper.GetVarValue("SignVectDoc");
6. Получение документа (картинки) по его id
DPDMDocumentVersion docVer = GlobalVAR.Service.GetDocumentVersion(idDocSignVect);
7. Открытие документа в лоции
string pathFile = GlobalVAR.LPDM.OpenDocumentVersion(docVer.ID, true);
в результате в переменной pathFile будет полный путь до файла
8. Закрыть документ Лоции, обязательно.
GlobalVAR.LPDM.CloseDocumentVersion(docVer.ID);
Может ли кто-то помочь перевести это в ЛИСП. Что-то у самого не получается...

Последний раз редактировалось mkung, 02.07.2015 в 15:31.
mkung вне форума  
 
Непрочитано 02.07.2015, 17:54
#2668
posetitel


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


извините за глупый вопрос, но сам не разобрался:
как сделать, чтобы при вызове команды, присваивался определенный параметр автоматически?
например, я набираю "-слой", и мне предлагается несколько вариантов параметров, а мне необходимо, чтобы сразу выбирался параметр "С" (создать), т.е. по команде "-слой" сразу же создавался новый слой, а я вводил только его имя.
(пробовал код Крыса: (command "_.-layer" "_n" "Layer2" ""), но он у меня почему-то не работает )
posetitel вне форума  
 
Непрочитано 02.07.2015, 17:57
1 | #2669
Кулик Алексей aka kpblc
Moderator

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


mkung, боюсь, что никак. Если не удается создать объект (или получить на него указатель), то дальше можно особо не рыпаться.

----- добавлено через 20 сек. -----
posetitel, Download -> "В.Свет Язык макрокоманд".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.07.2015, 21:16
1 | #2670
Дима_

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


можно - в поиск по словам autolisp excel (просто это самый частый подобный вопрос).
ops. - это я кажется с десяток другой сообщений пропустил
з.ы. нет всего пять
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 03.07.2015, 06:37
#2671
mkung


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
mkung, боюсь, что никак. Если не удается создать объект (или получить на него указатель), то дальше можно особо не рыпаться.
Да указатель то на объект LotsiaPDM.Application я получаю.
А вот дальше с методами - что-то все nil возвращается...
mkung вне форума  
 
Непрочитано 03.07.2015, 09:08
1 | #2672
Кулик Алексей aka kpblc
Moderator

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


Тогда попробуй использовать vla-invoke-method, vlax-invoke, vlax-put-property, vlax-get-property. Названия методов и свойств, а также количество и возможные значения параметров надо будет брать из руководства по программированию для Лоции.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.07.2015, 09:50
1 | #2673
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


mkung, можно, если эта сисема имеет com-модель. Подробнее у Полещука "10.4 Пример работы с внешним приложением". Ну и в довесок, на форуме были примеры экспорта/импорта из экселя
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 03.07.2015, 10:51
1 | #2674
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
mkung, можно, если эта сисема имеет com-модель.
Не просто COM-модель, а должен быть Automation Object, а не COM object. Иначе из "скриптовых" языков, таких как Lisp, доступа не будет.
ShaggyDoc вне форума  
 
Непрочитано 03.07.2015, 11:46
#2675
mkung


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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Не просто COM-модель, а должен быть Automation Object, а не COM object. Иначе из "скриптовых" языков, таких как Lisp, доступа не будет.
Как это проверить?
mkung вне форума  
 
Непрочитано 08.07.2015, 20:43
#2676
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Цитата:
Сообщение от gomer Посмотреть сообщение
хотя бы так
Код:
[Выделить все]
(or (numberp dl)
    (setq dl 100.0)
)

(setq dl (cond ((getreal
                  (strcat "\nУкажите вещественное число "
                          "<"
                          (rtos dl 2 (getvar 'luprec))
                          "> : "
                  )
                )
               )
               (dl)
         )
)
Сначала у меня это не заработало. Потом на пару недель замотался. А сейчас вернулся к этому, и заменив
Код:
[Выделить все]
(or (numberp dl)
    (setq dl 100.0)
)
на
Код:
[Выделить все]
(if (null dl)
    (setq dl 100.0)
)
получил вполне годный алгоритм.

Может быть, предполагалось, что должно функционировать как-то иначе, но в любом случае у меня заработало. Спасибо за подсказку.
T.Bagdat вне форума  
 
Непрочитано 08.07.2015, 21:02
#2677
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
Сначала у меня это не заработало. Потом на пару недель замотался. А сейчас вернулся к этому, и заменив
Код:
[Выделить все]
(or (numberp dl)
(setq dl 100.0)
)
на
Код:
[Выделить все]
(if (null dl)
(setq dl 100.0)
)
получил вполне годный алгоритм.
что значит не заработало? второй вариант имеет уязвимость, так как (null dl)==> nil не означает (numberp dl) ==> T. кроме этого момента эти варианты эквивалентны
gomer вне форума  
 
Непрочитано 09.07.2015, 14:34 Функция subst
#2678
trushev


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


Согласно описанию функция работает с символами LISP.
У меня список с вложенными списками.
На простом примере получаю ожидаемый результат:
Код:
[Выделить все]
           ;        0           1           2                 3            4
(setq sp (list '(1 2 3 4 5) '(6 7 8 9) '("a" "b" "c" "d") '(3 2 5) '("a" "d" 7.2 3.7))
       s (subst (list "f" "s") (list "a" "b" "c" "d") sp)
)
выполняет замену 2-го элемента на новый.
Но на более сложном списке с 22 подсписками с суммарной длиной порядка 6000 символов замены на новый элемент не происходит.
Не могу поймать свою ошибку. Или у функции есть ограничения?
trushev вне форума  
 
Непрочитано 09.07.2015, 14:43
1 | #2679
Кулик Алексей aka kpblc
Moderator

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


Ты в качестве "старого" значения попробуй подставлять не вбитое вручную, а полученное через nth или assoc значение. Ну и проверь на повторы - тоже бывают забавные случаи.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.07.2015, 15:51
#2680
trushev


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
бывают забавные случаи.
Заработало! Не выполнялось обновление "нового". Списки "новый" и "старый" были идентичны.
trushev вне форума  
Ответ
Вернуться   Форум 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