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

Вернуться   Форум 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.
Просмотров: 2048500
 
Старый 24.06.2014, 13:31
#2201
mkung


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
mkung, а чем не нравится (setvar "ctab")?
Ну, мне кажется это немного не то...
Вот получил я наконец-то активный вьюпорт на листе:
Код:
[Выделить все]
 (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-acad-object)))
Теперь пытаюсь понять - как переключать на нем пространства...
ActiveSpace к нему не применяется видимо.
Хочется сделать как-то поаккуратнее, поскольку командный вариант:
Код:
[Выделить все]
 (vl-cmdf "_.PSPACE")
(setq nvyn (getpoint "\nУкажите начало выноски:"))
Приводит вот к такой ошибке:
Команда: Выберите дугу:_PSPACE
Команда:
Укажите начало выноски:
Повторный вход в LISP невозможен.
Неверная точка.
Укажите начало выноски:

Последний раз редактировалось mkung, 24.06.2014 в 14:44.
mkung вне форума  
 
Старый 24.06.2014, 14:56
#2202
Vladimir_Sergeevich

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


получил !BLKDEF
#<VLA-OBJECT IAcadBlock 21b35494>
далее (vla-GetAttributes BlkDef)
; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: GetAttributes
...
что то не понял, как добраться до описания отрибута внутри описания блока?
одна из мыслей: описание блока - это коллекция примитивов, поэтому надо vlax-for item?
...
где то в строках 12-18 пишет ; ошибка: слишком мало аргументов
не могу понять где. хотя понял (wcmatch (strcase (vla-get-objectname ent) "*ATTR*"))
такогй функции не знал - закоментил - заработало
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Старый 24.06.2014, 15:08
#2203
Кулик Алексей aka kpblc
Moderator

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


Ну правильно, писал без проверок (не успевал). Вот более верный вариант:
Код:
[Выделить все]
 (defun tt (/ blkref blkdef)
 (if (and (setq blkref (car (entsel "Выбери блок:")))
          (setq
            blkdef (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
                             (if (vlax-property-available-p (setq blkref (vlax-ename->vla-object blkref)) 'effectivename)
                               (vla-get-effectivename blkref)
                               (vla-get-name blkref)
                               ) ;_ end of if
                             ) ;_ end of vla-item
            ) ;_ end of setq
          ) ;_ end of and
   (vlax-for ent blkdef
     (if (and (wcmatch (strcase (vla-get-objectname ent)) "*ATTR*")
              (vlax-property-available-p ent 'scalefactor)
              ) ;_ end of and
       (vla-put-scalefactor ent 0.75)
       ) ;_ end of if
     ) ;_ end of vlax-for
   ) ;_ end of if
 ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 24.06.2014, 15:13
#2204
Vladimir_Sergeevich

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


ага, лишняя скобка потерялась
только в таком виде мне все равно не надо, у меня в файле надо было обработсть под 2 стони блоков, что благополучно и сделал.
Спасибо за помощь
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 24.06.2014 в 15:26.
Vladimir_Sergeevich вне форума  
 
Старый 26.06.2014, 11:28 Как правильно сформировать список фильтров для ssget?
#2205
mkung


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


Добрый день.

Пытаюсь посчитать количество вьюпортов на активном листе. Написал:
Код:
[Выделить все]
 (setq name_lay (vla-get-name (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object))))) 
(setq xx (strcat "\"" name_lay "\""))
(setq nabor_vp (ssget "_x" '((0 . "VIEWPORT") (67 . 1) (cons 410 xx))))
(princ (sslength nabor_vp))
Получаю в ответ: ; ошибка: неверный список SSGET
Пробовал разные варианты: со скобками и без, подставлять переменную, предварительно созданную CONS - ничего не помогает.
Если подставить тупо (410 . "Первый лист") - то все нормально.
В чем тут дело?

И второй вопрос.
У меня на одном листе 2 экрана, на втором еще 3.
Если моя программка отрабатывает, то длину набора выбора пишет для первого листа 3, а для всего чертежа 8.
Чего туда еще добавляется?
Ну и, может быть, как получить именно количество вьюпортов?
mkung вне форума  
 
Старый 26.06.2014, 12:02
1 | #2206
Кулик Алексей aka kpblc
Moderator

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


(ssget "_x" (list '(0 . "VIEWPORT") '(67 . 1) (cons 410 xx)))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 26.06.2014, 12:30
#2207
mkung


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
(ssget "_x" (list '(0 . "VIEWPORT") '(67 . 1) (cons 410 xx)))
Спасибо. Тупо, но апостроф в исходнике не заметил... Очки пора носить.

А чего еще в набор кроме самих вьюпортов попадает не подскажешь?
А то для меня пока потрошить наборы непросто...
mkung вне форума  
 
Старый 26.06.2014, 13:55
#2208
Кулик Алексей aka kpblc
Moderator

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


При таких условиях, как в коде, только VIEWPORT и попадут.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 26.06.2014, 14:01
#2209
mkung


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
При таких условиях, как в коде, только VIEWPORT и попадут.
Повторюсь.
У меня на одном листе 2 экрана, на втором еще 3.
Если моя программка отрабатывает, то длину набора выбора пишет для первого листа 3, для второго 4, а для всего чертежа (без имени листа) 8.
Получаю из набора по условию в коде (через sslength)
mkung вне форума  
 
Старый 26.06.2014, 14:21
#2210
Кулик Алексей aka kpblc
Moderator

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


Если хочешь получить все ВЭ - убери группу 410. См.DXF Reference
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 26.06.2014, 14:33
#2211
mkung


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если хочешь получить все ВЭ - убери группу 410. См.DXF Reference
Алексей, под (без имени листа) я и имел в виду без условия по коду 410.
Но при подсчете по программе для одного листа получаемое значение на 1 больше реального количества ВЭ, а для всего чертежа - на 3.
На листе без ВЭ показывает 1.
mkung вне форума  
 
Старый 26.06.2014, 15:00
#2212
Кулик Алексей aka kpblc
Moderator

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


Насколько я помню, один "виртуальный" ВЭ создается при активации пространства. Но не уверен - надо в справке копаться, а у меня сейчас нет времени
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 27.06.2014, 12:28
#2213
Wolkodaw


 
Регистрация: 21.04.2009
Тюмень
Сообщений: 97


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Wolkodaw, пять минут:
http://forum.dwg.ru/showthread.php?t=20823
Спасибо! Несколько дней копаюсь с этими кодами (код kakt00z в предыдущем посте не понял как работает), а по ссылке код

(setq object_block (vlax-ename->vla-object (car (entsel))))
(setq object_block (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties object_block))))
(setq temp (vlax-variant-value (vla-get-value (nth 0 object_block))))

разобрал полностью, и по моей логике если последнюю строчку изменить на:

(vla-put-value (nth 0 object_block) 2000)

динамический блок должен стать не 1000 как исходный, а 2000 мм. Но он не становится таким. Выдает ошибку ; ошибка: Ошибка Automation. Неверный ввод.

Что я неправильно понимаю в изменении свойства?
Wolkodaw вне форума  
 
Старый 27.06.2014, 14:22
1 | #2214
Кулик Алексей aka kpblc
Moderator

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


Скорее всего, первый параметр не может принимать значение 2000. И посмотри http://www.caduser.ru/forum/index.ph...D=44&TID=36703 (сейчас перекину те коды на autolisp.ru - поскольку на caduser.ru уже черт-те сколько не появляюсь).
---
Перекинул: http://autolisp.ru/2014/06/27/dynblocks-parameters/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 27.06.2014 в 14:39.
Кулик Алексей aka kpblc вне форума  
 
Старый 27.06.2014, 17:05
#2215
Wolkodaw


 
Регистрация: 21.04.2009
Тюмень
Сообщений: 97


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Скорее всего, первый параметр не может принимать значение 2000. И посмотри http://www.caduser.ru/forum/index.ph...D=44&TID=36703 (сейчас перекину те коды на autolisp.ru - поскольку на caduser.ru уже черт-те сколько не появляюсь).
---
Перекинул: http://autolisp.ru/2014/06/27/dynblocks-parameters/
а пример использования можно? Как запустить в командой строке, какие аргументы в каком виде ввести...
Wolkodaw вне форума  
 
Старый 30.06.2014, 12:04 Как программно изменить масштаб печати по умолчанию из пространства модели?
#2216
mkung


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


Добрый день.
При печати из модели по умолчанию Автокад устанавливает масштаб печати "Вписать".
Есть пользователи, которые печатают "не глядя" (благо просмотр удобоваримый).
Можно ли программно установить скажем 1:100? Чтобы отметка "Вписать" была уже осознанным действием.
Заранее благодарен.
mkung вне форума  
 
Старый 14.08.2014, 16:33
#2217
kha

BIM, С#, AutoCAD, LISP
 
Регистрация: 15.03.2006
Дуброво
Сообщений: 657


Добрый день!

Подскажите, пожалуйста, как получить путь к папке из которой был запущен лисп?

Допустим, есть лисп D:\LISP\Lisp.lsp

Мне нужно, чтобы после запуска лиспа он смог определить своё местоположение. На выходе нужно "D:\LISP"
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е.
kha вне форума  
 
Старый 14.08.2014, 16:51
1 | #2218
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от kha Посмотреть сообщение
Подскажите, пожалуйста, как получить путь к папке из которой был запущен лисп?
Средствами lisp'a - нереально. Александр Ривилис когда-то писал приложение GetLispInfo, но оно было для бог знает какого ACAD'a, и потом не развивалось (уточню: приложение писалось по моей просьбе; но потом надобность в нем отпала. Я и не стал Александра попусту терроризировать).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Старый 14.08.2014, 16:53
#2219
skkkk


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


Код:
[Выделить все]
(setq path (findfile "Lisp.lsp"))
и далее с помощью функций обработки строк приводить к нужному виду. Не то?
skkkk вне форума  
 
Старый 14.08.2014, 16:54
#2220
Дима_

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


Крайне сложно - в теории лисп вобще не факт что откуда-то загружен (он может быть сгененирован другим лиспом). Самим лиспом никак (если только сделать специальный лисп который будет следить за системой). Поищи - уже обсуждалось.
з.ы. - ух уже понаписали...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум 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