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

Вернуться   Форум 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.
Просмотров: 1971788
 
Непрочитано 11.11.2010, 22:35
#1121
Лиспер


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


Блин, полентяйничать не дали
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 12.11.2010, 14:10
#1122
VVA

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


Цитата:
Сообщение от Frigate Посмотреть сообщение
Здравстуйте, уважаемые ГУРУ форума.
Прошу помочь с функцией выделения рамкой ячеек в таблице:
SelectSubRegion (wpt1, wpt2, wvwVec, wvwxVec, seltype, bIncludeCurrentSelection, rowMin, rowMax, colMin, colMax)
wvwvec
Variant
3D vector in WCS specifying the view direction of the selection.
Берется из системной переменной
(vlax-3d-point (trans (getvar "VIEWDIR") 1 0)).
А вот где найти
wvwxvec
Variant
3D vector in WCS specifying the view orientation of the hit test.

???
Или может кто скинет примеры использования этой функции?
Посмотри описание vla-hittest. И пример использования vla-hittest здесь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.11.2010, 19:51
#1123
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


VVA,

спасибо.

Я именно по одному из твоих примеров и разобрался с методом hittest.

Владимир (если не ошибаюсь),

можешь мне помочь мою проблему решить?

Мне нужно хранить VLA-object в атрибуте. Но даже если и запихнуть VLA-object в строку, то потом его вытащить никак не получается. Я правда с ENAME не пробовал еще такого проделать. Подскажи, плиз, что мне делать.
Frigate вне форума  
 
Непрочитано 12.11.2010, 20:09
#1124
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Frigate Посмотреть сообщение
Мне нужно хранить VLA-object в атрибуте. Но даже если и запихнуть VLA-object в строку, то потом его вытащить никак не получается. Я правда с ENAME не пробовал еще такого проделать. Подскажи, плиз, что мне делать.

Frigate, Запоминай в атрибуте ID VLA-object'а
Код:
[Выделить все]
_$ a_obj ; какой-то объект
#<VLA-OBJECT IAcadCircle 0205fa8c>
_$ (setq id (vla-get-ObjectID a_obj)) ; получили его ID (записали а атрибут)
2127807360
_$ (vla-ObjectIDToObject (vla-get-ActiveDocument (vlax-get-acad-object)) id) ; по ID получили наш исходный объект
#<VLA-OBJECT IAcadCircle 0205fa8c>
или с ename используй метки

Код:
[Выделить все]
_$ obj ; какой-то объект
<Имя объекта: 7ed3c380>
_$ (setq ed (entget obj))
((-1 . <Имя объекта: 7ed3c380>) (0 . "CIRCLE") (330 . <Èìÿ îáúåêòà: 7ed3acf8>) (5 . "1B0") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 849.149 1061.53 0.0) (40 . 367.977) (210 0.0 0.0 1.0))
_$ (setq hnd (cdr (assoc 5 ed)))
"1B0" ; получили его метку (записали а атрибут)
_$ (handent hnd) ; по метку получили наш исходный объект
<Имя объекта: 7ed3c380>
__________________
cadtools

Последний раз редактировалось TararykovDG, 12.11.2010 в 20:15.
TararykovDG вне форума  
 
Непрочитано 12.11.2010, 22:25
#1125
Eximius

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


Уважаемые форумчане, пожалуйста объясните правила работы и зачем вообще нужны функции отлова ошибок (типо *error*). Можно ли это как-то применить к следующему:
в программе во время диалога с пользователем, автокад отправляет некоторые данные в лист екселя. Предположим, пользователь нажимает escape и прерывает программу. Тогда в памяти остаётся открытым объект екселя а в нём активная книга. Как сделать так, чтобы в случае ошибки книга закрывалась?
Eximius вне форума  
 
Непрочитано 12.11.2010, 22:43
#1126
gomer

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


Цитата:
Сообщение от Eximius Посмотреть сообщение
в программе во время диалога с пользователем, автокад отправляет некоторые данные в лист екселя. Предположим, пользователь нажимает escape и прерывает программу. Тогда в памяти остаётся открытым объект екселя а в нём активная книга. Как сделать так, чтобы в случае ошибки книга закрывалась?
Сначала поговорите с автрокадом, а потом с книгой работайте, тогда ничего оставаться не будет
gomer вне форума  
 
Непрочитано 12.11.2010, 22:46
#1127
Eximius

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


Не понял, что значит "поговорить с автокадом".
Eximius вне форума  
 
Непрочитано 12.11.2010, 23:10
#1128
gomer

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


Сначала диалог с пользователем и накопление данных, потом отправление данных в лист екселя
gomer вне форума  
 
Непрочитано 12.11.2010, 23:16
#1129
Кулик Алексей aka kpblc
Moderator

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


TararykovDG, ID объекта хранится только в текущей сессии. Хэндлы более живучи.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.11.2010, 23:57
#1130
Eximius

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


Спасибо.
Eximius вне форума  
 
Непрочитано 13.11.2010, 08:27
#1131
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
TararykovDG, ID объекта хранится только в текущей сессии. Хэндлы более живучи.
Да-да, Алексей, верно, совсем забыл про потерю ID в другой сессии. Ну метки должны работать, так что, Frigate, используй вариант с ename
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 13.11.2010, 08:43
#1132
Лиспер


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


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
вариант с ename
То есть?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 13.11.2010, 08:53
#1133
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Лиспер Посмотреть сообщение
То есть?
То есть 2-ой способ указанный мной в посте #1124 (слово "вариант" здесь это не тип данных)
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 13.11.2010, 09:01
#1134
Лиспер


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


То есть хендлы
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 13.11.2010, 09:18
#1135
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Лиспер Посмотреть сообщение
То есть хендлы
Лиспер, я не пойму, Ты че прикалываешся? Или Тебе поговорить охото. Второй код из поста #1124, по-моему там все очевидно, во всяком случае для Тебя должно быть очевидно... То есть хендлы (а по-русски метки)
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 13.11.2010, 09:27
#1136
Лиспер


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


TararykovDG, если честно - просто хотелось определенности. Ладно, умолкаю.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 13.11.2010, 11:24
#1137
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


TararykovDG,

спасибо за советы, но они пока никак мне не помогут. Мне нужно хранить список в аргументе блока.
Напр., такой:

((<Имя объекта: 7ef085e8> 52.9463) (<Имя объекта: 7ef084a8> 54.0))

Или HANDLE вместо entity.

Но: чтобы запихнуть список в аргумент, его надо преобразовать в строку (vl-princ-to-string ... ).
А там все свойства теряются.

Что посоветуете? Желательно оставить вариант, что инфа хранится в атрибуте блока.
(на всякий слычай уточню - entity хранится совсе не этого блока).
Frigate вне форума  
 
Непрочитано 13.11.2010, 11:50
#1138
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Frigate Посмотреть сообщение
TararykovDG,

спасибо за советы, но они пока никак мне не помогут. Мне нужно хранить список в аргументе блока.
Напр., такой:

((<Имя объекта: 7ef085e8> 52.9463) (<Имя объекта: 7ef084a8> 54.0))

Или HANDLE вместо entity.

Но: чтобы запихнуть список в аргумент, его надо преобразовать в строку (vl-princ-to-string ... ).
А там все свойства теряются.

Что посоветуете? Желательно оставить вариант, что инфа хранится в атрибуте блока.
(на всякий слычай уточню - entity хранится совсе не этого блока).
Frigate, я что-то не совсем понял, но дам совет по тому как понял. Итак, если нужно в атрибуте блока хранить инфу о существующем на чертеже объекте (или объектах), то записывай в атрибут только метки (handle) этих объектов, они (метки) уже является строками и vl-princ-to-string не нужен. Т. е. для сохранения данных об одном объекте записывай в атрибут сроку типа "3CD" (это метка полученная (setq hnd (cdr (assoc 5 (entget obj)))), obj - ссылка на объект, инфу по которому нужно сохранить. Или, если нужно сохранить несколько объектов, то записывай строку "3CD 3CE 3D0" через пробелы. А потом, когда нужно считаешь из атрибута строку разложишь если есть пробелы на состовляющие и для каждого "XXX" прменишь (entget (handent "XXX")) и получишь инфу по объекту
)
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 13.11.2010, 14:43
#1139
puma


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


Многоуважаемый Кулик Алексей aka kpblc используя ваш lisp по созданию слоев и загрузки типов линий в вашем реакторе обнаружил, что если, например, чертится ось на слое с пунктирным типом линий, то при повторном вызове производится сброс на обычный тип. Хотя понимаю, что lisp только для создания слоев, а не для изменений их св-в, но очень уж удобный. Возможно ли вот такое корявое изменение (кириллица слетела, за что прошу прощения):
Код:
[Выделить все]
(defun _kpblc-layer-create (layer-list / vla_layer linetype-normal)
 (vl-load-com)
  (setq    vla_layer
     (vla-add
       (vla-get-layers *kpblc-activedoc*)
       (cdr (assoc "name" layer-list))
     ) ;_ end of vla-add
  ) ;_ end of setq
  (vla-put-color
    vla_layer
    (if    (cdr (assoc "color" layer-list))
      (cdr (assoc "color" layer-list))
      7
    ) ;_ end of if
  ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if    (cdr (assoc "lw" layer-list))
      (cdr (assoc "lw" layer-list))
      aclnwt025
    ) ;_ end of if
  ) ;_ end of vla-put-lineweight
  (if  (and (cdr (assoc "lt" layer-list))
       (setq linetype-normal (_kpblc-linetype-load
         (cdr (assoc "lt" layer-list))
         (cdr (assoc "ltfile" layer-list))
       ) ;_ end of _kpblc-linetype-load
      ) ;_ end of and
        )
         (vla-put-linetype vla_layer linetype-normal)
    (vla-put-linetype vla_layer "Continuous")
  ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if    (= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
    ) ;_ end of if
  ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer *kpblc-activedoc*)
          vla_layer
       ) ;_ end of equal
      ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
  ) ;_ end of if
  vla_layer
) ;_ end of defun

(defun _kpblc-linetype-load
       (ltype-name ltype-file / ltype_normal ltype_list result)
  (vl-load-com)
  (setq    ltype_list '(("center" . "осевая")
             ("center2" . "осевая2")
             ("hidden" . "скрытая")
             ("hidden2" . "скрытая2")
            ("psk_weld_01_p" . "psk_weld_01_p")
            ("psk_weld_19" . "psk_weld_19") )
    ltype-name (strcase ltype-name t)
  ) ;_ end of setq
  (if (not ltype-file)
    (setq ltype-file "acadiso.lin")
  ) ;_ end of if
  (if (vl-string-search "419" (vlax-product-key))

    (setq ltype_normal (cdr (assoc ltype-name ltype_list)))
    (setq ltype_normal ltype-name)
  ) ;_ end of if
  (if (not (tblsearch "ltype" ltype_normal))

    (setq result
       (not    (vl-catch-all-error-p
          (vl-catch-all-apply
            'vla-load
            (list
              (vlax-get-property
            (vla-get-activedocument (vlax-get-acad-object))
            'linetypes
              ) ;_ end of vlax-get-property
              ltype_normal
              ltype-file
            ) ;_ end of list
          ) ;_ end of vl-catch-all-apply
        ) ;_ end of vl-catch-all-error-p
       ) ;_ end of not
    ) ;_ end of setq
  ) ;_ end of if

(if  (tblsearch "ltype" ltype_normal)
  (setq result "T"))
  (If (= result "T")
    ltype_normal
nil)
) ;_ end of defun

Последний раз редактировалось puma, 13.11.2010 в 14:50.
puma вне форума  
 
Непрочитано 13.11.2010, 15:53
#1140
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


TararykovDG,

вышел из ситуации по-другом - в переменную просто сохранял всю матрицу. Все равно значения ее лишь временно нужны. А те, что нужны и после матобработки, сохраняю в атрибутах.
За советы благодарю. Наверняка и они пригодятся потом.
Frigate вне форума  
Ответ
Вернуться   Форум 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