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

Вернуться   Форум 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.
Просмотров: 2049739
 
Непрочитано 03.03.2009, 21:44
#601
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


<Selection set: 51> - набор, применяя к нему (ssnamex) (см. справку) получаем некий список, из этого списка при помощи приведенных выше манипуляций (пост 595) получаем список ename объектов, которые выбрали функцией (ssget), применяя уже к этому списку (mapcar 'vlax-ename->vla-object) получаем список vla-объектов (объекты ActiveX), к которым можно обращаться при помощи функций c префиксом vla-. Описание всех объектов vla есть в хелпе (см. объектная модель).
#<VLA-OBJECT IAcadMText 0bdabf24> - это и есть vla объект.
Открываем справку, ищем его свойства и методы, пишем (допустим он в переменной vla_obj):
Код:
[Выделить все]
(vla-get-textstring vla_obj)
Donhuan вне форума  
 
Автор темы   Непрочитано 04.03.2009, 08:46
#602
Red Nova

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


Спасибо, но разве в посте #598 у меня не так? И не работает. А VVA говорит что
Цитата:
1. Red Nova, Ты отладчиком посмотри что у тебя в l_vla_obj?
2. У табя там список а ты пытаешься взять у списка свойство TextString
А разве (#<VLA-OBJECT IAcadMText 0bdabf24>) это список? Это ведь сам vla объект, почему он не реагирует на vla-get-textstring ?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 04.03.2009, 08:52
#603
Кулик Алексей aka kpblc
Moderator

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


А скобки там для красоты, что ли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.03.2009, 08:55
#604
Red Nova

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


Мда, ну тогда скажи как взять из списка (#<VLA-OBJECT IAcadMText 0bdabf24>) текстовое содержимое?
__________________
Блог

Последний раз редактировалось Red Nova, 04.03.2009 в 09:04.
Red Nova вне форума  
 
Непрочитано 04.03.2009, 09:12
#605
Кулик Алексей aka kpblc
Moderator

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


(vla-get-textstring (car lst))
Где lst - твой (#<VLA-OBJECT IAcadMText 0bdabf24>)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.03.2009, 09:48
#606
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


1. Если не уверен, что у тебя. Используй функцию type
Цитата:
Команда: (setq l_vla_obj '(#<VLA-OBJECT IAcadMText 0bdabf24>)) ;;;Моделиру
(#<VLA-OBJECT IACADMTEXT 0BDABF24>)
Команда:
Команда: (type l_vla_obj)
LIST
Кстати и переменная у тебя называется l_vla_obj = List_Vla_Object
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 04.03.2009 в 09:55.
VVA вне форума  
 
Автор темы   Непрочитано 04.03.2009, 21:29
#607
Red Nova

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


Спасибо, с текстом таки понял. А вот атрибуты пока-что нет.
Предположил что так
Цитата:
(setq l_vla_obj
(mapcar 'vlax-ename->vla-object
(vl-remove-if 'listp (mapcar (function cadr)
(ssnamex (ssget))))))
(setq izdelie (vla-get-TextString (vla-getattributes (car l_vla_obj))))
(princ izdelie)
Но естественно не работает.
В отладчике показывает, что vla-getattributes возвращает
*LAST-VALUE* = #<variant 8201 ...>
Что это?
На сколько я понял чтобы работала vla-get-TextString нужно подготовить что-то типа #<VLA-OBJECT IAcadMText 0cb388a4>, это наверное название объекта, но как его получить для атрибута не предполагаю.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 04.03.2009, 21:44
#608
Кулик Алексей aka kpblc
Moderator

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


DwgRuLispLib: Получение указателей на атрибуты вхождения блока
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.03.2009, 22:23
#609
Red Nova

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


А я не знаю что такое указатель и что с ним делать.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 04.03.2009, 22:26
#610
Кулик Алексей aka kpblc
Moderator

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


указатель - это нечто типа #<VLA-OBJECT IACADMTEXT 0BDABF24>
Только сам понимаешь, что текст и цифры будут другими
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.03.2009, 22:50
#611
Red Nova

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


А что значит
Цитата:
указатель на вхождение блока и маска тэга атрибута
То есть что должно писаться после
_dwgru-block-get-attr-by-mask
__________________
Блог
Red Nova вне форума  
 
Непрочитано 04.03.2009, 23:21
#612
Кулик Алексей aka kpblc
Moderator

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


Список указателей на атрибуты. А потом применяешь нечто типа
Код:
[Выделить все]
(mapcar (function vla-get-textstring)
к этому списку и получаешь список значений атрибутов блока.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.03.2009, 06:44
#613
ShaggyDoc

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
А я не знаю что такое указатель и что с ним делать.
Указатель - ссылка на место в памяти, где есть нечто. В данном случае, визуально, это может быть представлено в виде #<VLA-OBJECT IACADMTEXT 0BDABF24>.

Тебе, чтобы не путаться, лучше термин указатель не применять. Для себя говори "получаю объект MTEXT". Это в конкретном случае, а в общем виде указатель может указывать на что угодно.
ShaggyDoc вне форума  
 
Непрочитано 05.03.2009, 17:33
#614
Eximius

аспирант
 
Регистрация: 17.12.2008
Волгоградская область
Сообщений: 49
Отправить сообщение для Eximius с помощью Skype™


Ещё вопросик от чайника:
Как програмно написать верхний или нижний индекс в команде mtext?
Когда мы просто хотим написать 2 в степени 2, мы пишем 2^2 выделяем ^2 и жмём stack. Как нажать stack програмно?
И вообще какие есть способы програмного введения индексов?
Eximius вне форума  
 
Непрочитано 05.03.2009, 18:23
#615
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Eximius, С помощью управляющих кодов. Есть в справке Автокада.
Можно еще здесь посмотреть
Твой пример в кодах выглядит так
Цитата:
Command: (entget(entlast))
((-1 . <Entity name: 7ef7b180>) (0 . "MTEXT") (330 . <Entity name: 7ef61cf8>)
(5 . "120") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbMText") (10 311.516 507.067 0.0) (40 . 2.5) (41 . 82.7726) (71 . 1) (72 .
5) (1 . "\\A1;2{\\H0.7x;\\S^2;}") (7 . "Standard") (210 0.0 0.0 1.0) (11 1.0
0.0 0.0) (42 . 2.83333) (43 . 2.5) (50 . 0.0) (73 . 1) (44 . 1.0))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 05.03.2009, 19:49
#616
Red Nova

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


Елкалла палкалла, я опять не въехал.
Пожалуйста покажите на примере как получают значение атрибута блока.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.03.2009, 21:22
#617
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Red Nova, например так
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 05.03.2009, 21:55
#618
Red Nova

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


Спасибо, правда эту ссылка я уже просматривал, и помню что так и не разобрался. Но вот поиском я нашел тему где Крыс впервые привел get-attr-by-mask, там я нашел и пример вызова
Код:
[Выделить все]
(mapcar (function (lambda(x) (cons (vla-get-TagString x) (vla-get-TextString x)))) (get-attr-by-mask (car (entsel "\nУкажите блок : ")) "*"))
Такой функцией можно получить все атрибуты блока, типа
Код:
[Выделить все]
(("МАССА" . "100") ("ИЗДЕЛИЕ" . "Балка Б-1"))
Проблема в том, что тыкаю то я в конкретный атрибут, и мне нужен именно он ("ИЗДЕЛИЕ"), причем не хочется ставить фильтр по имени атрибута. А хочется взять именно "тыкаемый" атрибут
Такое возможно?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.03.2009, 22:25
#619
Кулик Алексей aka kpblc
Moderator

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


Возможно. Используй nentsel
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.03.2009, 22:06
#620
Red Nova

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


Кулик Алексей aka kpblc,
Спасибо, теперь похоже нашел универсальный вариант для получения содержания текста или атрибута
Код:
[Выделить все]
(defun rn_get_atr_or_text (/ izdelie l_vla_obj )
(setq l_vla_obj 
  (mapcar 'vlax-ename->vla-object
     (vl-remove-if 'listp (list (car 
         (nentsel))))))
(setq izdelie (vla-get-TextString (car l_vla_obj)))
)
А можно при этом запретить выбирать объекты которые не являются текстом, мтекстом или блоком с атрибутом?
__________________
Блог
Red Nova вне форума  
Ответ
Вернуться   Форум 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