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

Вернуться   Форум 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.
Просмотров: 2050014
 
Непрочитано 26.09.2016, 08:41
#3021
Кулик Алексей aka kpblc
Moderator

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


Так есть определение блока или есть вхождение блока?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.09.2016, 12:17
#3022
VVA

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
можно проверить (вернуть T / nil) есть ли блок с определенным именем в файле (точнее проверить вставлен ли блок в файл)?
Другими словами есть ли описание блока в таблице блоков в файле.
Код:
[Выделить все]
(tblobjname "BLOCK" "TEST")
где "TEST" - имя блока
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 26.09.2016, 15:29
#3023
Red Nova

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


Уточняю. Определение блока мне не важно. Нужно проверить вхождение. Когда подкидываете нужных терминов становится проще
Red Nova вне форума  
 
Непрочитано 26.09.2016, 15:39
#3024
Кулик Алексей aka kpblc
Moderator

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


Отлично... Вхождение куда? В пространство модели? Листа? Другого блока?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.09.2016, 17:32
1 | #3025
skkkk


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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Кок можно проверить (вернуть T / nil) есть ли блок с определенным именем в файле (точнее проверить вставлен ли блок в файл)?
Код:
[Выделить все]
(if (ssget "_X" '((0 . "INSERT") (2 . "TEST"))) T nil)
где "TEST" - имя блока
skkkk вне форума  
 
Непрочитано 26.09.2016, 17:54
#3026
Кулик Алексей aka kpblc
Moderator

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


skkkk, если блок в блоке, то набор вернет nil
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.09.2016, 19:15
#3027
Red Nova

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


Вхождение в пространство модели. Блоков в блоках нет.

skkkk

Код:
[Выделить все]
 (defun test ()
  (if (ssget "_X" '((0 . "INSERT") (2 . "BMP Plan PT")))
    (princ "hello"))
  )
Цитата:
Command: (test )
nil
Что не так?
Блок прикрепил.
Вложения
Тип файла: dwg
DWG 2013
test sssk.dwg (46.7 Кб, 11 просмотров)
Red Nova вне форума  
 
Непрочитано 26.09.2016, 19:35
#3028
VVA

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Что не так?
Блок динамический
Код:
[Выделить все]
;; Returns list of the Anonymous names taken by a Dynamic Block (if any)  -  Lee Mac 2011  -  www.lee-mac.com
;; Arguments:  block  - name of Dynamic Block.

(defun AnonymousInstancesof ( block / def rec nme ref lst )
  (while (setq def (tblnext "BLOCK" (null def)))
    (if (= 1 (logand 1 (cdr (assoc 70 def))))
      (progn
        (setq rec
          (entget
            (cdr
              (assoc 330
                (entget
                  (tblobjname "BLOCK" (setq nme (cdr (assoc 2 def))))
                )
              )
            )
          )
        )
        (while (setq ref (assoc 331 rec))
          (if
            (and
              (eq block (vla-get-effectivename (vlax-ename->vla-object (cdr ref))))
              (not (member nme lst))
            )
            (setq lst (cons nme lst))
          )
          (setq rec (cdr (member (assoc 331 rec) rec)))
        )
      )
    )
  )
  (reverse lst)
)
(defun LM:BlockList->Str ( lst del / f )
  ;; © Lee Mac 2011

  (defun f ( s ) (if (wcmatch s "`**") (strcat "`" s) s))
  
  (if (cdr lst)
    (strcat (f (car lst)) del (LM:BlockList->Str (cdr lst) del))
    (f (car lst))
  )
)
Пример
Код:
[Выделить все]
(ssget "_X"
  (list
    (cons 0 "INSERT")
    (cons 2 (LM:BlockList->Str (cons "BMP Plan PT" (AnonymousInstancesof "BMP Plan PT")) ","))
    (cons 410 (getvar "CTAB"))
  )
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 26.09.2016, 19:54
#3029
Red Nova

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


Пока не работает

Код:
[Выделить все]
 (defun test ()
  (if
    (ssget "_X"
  (list
    (cons 0 "INSERT")
    (cons 2 (LM:BlockList->Str (cons "BMP Plan PT" (AnonymousInstancesof "BMP Plan PT")) ","))
    (cons 410 (getvar "CTAB"))
  )
)
    (princ "hello")
    )
  )
Цитата:
Command: (test)
; error: ActiveX Server returned the error: unknown name: EffectiveName

_____________________
Добавил.
Нашел решение

Код:
[Выделить все]
 (defun test ( / js)
      (setq js (strcat "`**," "BMP Plan PT"))
       (if (ssget "x" (list (cons 0 "INSERT") (cons 2 js))) 	; selecting entire drawing
	     (princ "hello")
	      )
  (princ)
  )
_____________________
Потестил еще и снова добавил
Нет вру, так всегда возвращает T

Последний раз редактировалось Red Nova, 26.09.2016 в 20:13.
Red Nova вне форума  
 
Непрочитано 26.09.2016, 19:58
1 | #3030
skkkk


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


Red Nova, памятуя о твоей любви к динамическим блокам я должен был сразу догадаться, что он будет именно таким. У меня даже проскочила такая мысль, но в моменте отвлекли, а когда вернулся, она уже потерялась.
Тут во втором посте тоже есть код, вроде как раз тот, что тебе нужен. Но этот вариант, по-моему, ничем не лучше предложенного VVA, правда, я не проверял.
Offtop:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
skkkk, если блок в блоке, то набор вернет nil
Может, я и не прав, но считаю, что создавать блок, включая в его состав другие блоки - дурной тон. Кроме, пожалуй, случаев быстрого создания временных блоков (перетаскиванием правой кнопкой мыши) со случайным именем, которые нужны в небольшой отрезок времени для проведения манипуляций с некоторым набором объектов. Такие блоки я всегда обязательно взрываю и прибираюсь за ними.
skkkk вне форума  
 
Непрочитано 26.09.2016, 20:02
1 | #3031
VVA

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
error: ActiveX Server returned the error: unknown name: EffectiveName
Попробуй этот рецепт

Цитата:
Команда: (test)
hello"hello"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.09.2016, 20:23
#3032
Кулик Алексей aka kpblc
Moderator

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


Offtop:
Цитата:
Сообщение от skkkk Посмотреть сообщение
Может, я и не прав, но считаю, что создавать блок, включая в его состав другие блоки - дурной тон. Кроме, пожалуй, случаев быстрого создания временных блоков (перетаскиванием правой кнопкой мыши) со случайным именем, которые нужны в небольшой отрезок времени для проведения манипуляций с некоторым набором объектов. Такие блоки я всегда обязательно взрываю и прибираюсь за ними.
Ну, ситуации бывают разные
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.09.2016, 22:03
#3033
Red Nova

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


skkkk
Спасибо , код по твоей ссылке помог

VVA
Спасибо, хотя предложенное лечение так и не помогло

Кулик Алексей aka kpblc
Уж прости что я иногда не умею правильно объяснять. Зато ты умеешь над такими как я измываться
Red Nova вне форума  
 
Непрочитано 26.09.2016, 23:16
| 1 #3034
Кулик Алексей aka kpblc
Moderator

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


Эт я не измываюсь, эт я намекаю, что ситуации бывают разные, и не всегда все условия будут очевидными. И для успешного решения надо бы информации побольше предоставлять
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.09.2016, 15:51
#3035
Prosto100


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


Подскажите почему при вызове mleader через (command) подавляется встроенный текстовый редактор, а ввод текста происходит через командную строку?
Prosto100 вне форума  
 
Непрочитано 28.09.2016, 16:04
#3036
Сергей812


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


Цитата:
Сообщение от Prosto100 Посмотреть сообщение
Подскажите почему при вызове mleader через (command) подавляется встроенный текстовый редактор, а ввод текста происходит через командную строку?
пример вызова покажите - в каком режиме хоть запускаете?
Сергей812 вне форума  
 
Непрочитано 28.09.2016, 16:28
#3037
Кулик Алексей aka kpblc
Moderator

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


Вообще-то я остерегся бы командными методами строить мультивыноски: http://autolisp.ru/2015/01/21/mleader_create_order/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.09.2016, 17:34
#3038
Prosto100


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


Цитата:
Сообщение от Сергей812
пример вызова покажите - в каком режиме хоть запускаете?
Проблема в том что если вызывать _mleader через командную строку - то все ОК, и окно встроенного текстового редактора открывается, а если в той же командной строке ввести (command "_mleader"), то AutoCad предлагает ввести текст выноски через командную строку.
Prosto100 вне форума  
 
Непрочитано 28.09.2016, 17:39
#3039
Сергей812


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


Prosto100, да, есть такое) А почему через тот же Lisp ActiveX не построить выноску?
Сергей812 вне форума  
 
Непрочитано 29.09.2016, 08:25
#3040
Prosto100


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


Цитата:
Сообщение от Сергей812
Prosto100, да, есть такое) А почему через тот же Lisp ActiveX не построить выноску?
Все, разобрался - для активации редактора при использовании command(_.mtext) нужно предварительно ввести (initdia), а для mleader подходит (initcommandversion)!
Prosto100 вне форума  
Ответ
Вернуться   Форум 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