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

Вернуться   Форум 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.
Просмотров: 1972599
 
Непрочитано 18.11.2015, 17:25
#2821
Doctor_Che


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


Здравствуйте.

Подскажите как реализовать выбор диапазона вручную в LibreOffice Calc?
Есть пример для Excel, но простая замена не проходит. Ругается на отсутствие свойств ActiveX:
Код:
[Выделить все]
 Application aborted: ActiveX Server возвратил ошибку: неизвестное имя: VISIBLE
Application aborted: ActiveX Server возвратил ошибку: неизвестное имя: SELECTION
Код:
[Выделить все]
 ;указать диапазон вручную
            (princ "\nDictionary is not found. Please type data area manualy")
            (vlax-put-property ExcelApp 'Visible :vlax-true) ;помигать екселем
            (getstring "\nselect data area in Excel and then press enter"); ожидать нажатие клавиши
            (setq used_range (vlax-get-property ExcelApp 'Selection)); получение указателя на выделенную область
            (setq lst (vlax-safearray->list (vlax-variant-value (vlax-get-property used_range 'Value)))) ;; получение списка данных с екселя
            (setq WorkBook (vlax-get-property ExcelApp "ActiveWorkBook"))
Doctor_Che вне форума  
 
Непрочитано 18.11.2015, 23:24
#2822
Сергей812


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


может, SDK поможет?
Сергей812 вне форума  
 
Непрочитано 01.12.2015, 18:15
#2823
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


Вечер добрый. Пока на работе тихо, решил допилить свой старый код. Но возникла непонятка.
В файле dcl заданы элементы:
Код:
[Выделить все]
: row {
   	: popup_list 
			{label = "Диаметр:"; 
			key = "eb_DiamGor"; 
			list = "0" "\n6"; 
			edit_width=5;}
   	: edit_box 
			{label = "Шаг:"; 
			key = "eb_StepGor"; 
			edit_width=15; 
			value = "200";}
   	: edit_box 
			{label = "Длина:"; 
			key = "eb_LengthGor"; 
			edit_width=15; 
			value = "2000";}
} // конец row
Считываю значения в лиспе:
Код:
[Выделить все]
 (setq StepGor (atoi (get_tile "eb_StepGor"))) 
(setq LengthGor (atoi (get_tile "eb_LengthGor")))
И почему-то в StepGor передается значение "eb_LengthGor", а в LengthGor - значение "eb_StepGor", когда должно быть наоборот.
Почему такое может происходить?
kacugu вне форума  
 
Непрочитано 02.12.2015, 09:38
#2824
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Цитата:
Сообщение от kacugu Посмотреть сообщение
Вечер добрый. Пока на работе тихо, решил допилить свой старый код. Но возникла непонятка.
Считываю значения в лиспе:
Код:
[Выделить все]
 (setq StepGor (atoi (get_tile "eb_StepGor"))) 
(setq LengthGor (atoi (get_tile "eb_LengthGor")))
И почему-то в StepGor передается значение "eb_LengthGor", а в LengthGor - значение "eb_StepGor", когда должно быть наоборот.
Почему такое может происходить?
Поставьте точку останова и посмотрите какие значения и где присваиваются. Для того чтобы понять в чем проблема, недостаточно двух строчек с setq. Может быть у вас потом идет переопределение переменных, а вы просто этого не увидели. Скиньте весь код.
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Непрочитано 02.12.2015, 10:28
#2825
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


Цитата:
Сообщение от ProPeller Посмотреть сообщение
Скиньте весь код.
Добавил в приложение. Пришлось dcl файлу поменять расширение на .lsp - при загрузке возникала ошибка "некорректный файл".
Смысл лиспа: ввожу данные арматурной сетки, выбираю точку вставки, отрисовывается сетка и вставляется спецификация в виде блока.
Вложения
Тип файла: lsp KAA_Setka and Spec.lsp (23.3 Кб, 16 просмотров)
Тип файла: lsp KAA_Setka_Spec.DCL.lsp (5.1 Кб, 17 просмотров)
kacugu вне форума  
 
Непрочитано 02.12.2015, 11:25
#2826
trushev


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


Заменить list = "0" "\n6"; на list = "0\n6";

Последний раз редактировалось trushev, 02.12.2015 в 11:32.
trushev вне форума  
 
Непрочитано 02.12.2015, 11:38
#2827
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Цитата:
Сообщение от kacugu Посмотреть сообщение
Добавил в приложение. Пришлось dcl файлу поменять расширение на .lsp - при загрузке возникала ошибка "некорректный файл".
Смысл лиспа: ввожу данные арматурной сетки, выбираю точку вставки, отрисовывается сетка и вставляется спецификация в виде блока.
Ошибка находится здесь, сразу после закрытия окна. Строка 591.
Код:
[Выделить все]
 (if (= ddi 1) (TEST2 N KOL KOD Armclass Armgost Armmat Armmatgost TN DiamGor LengthGor StepGor DiamVert LengthVert StepVert Vlevo Vpravo Vverh Vniz))
В описании функции TEST2 у вас LengthGor и StepGor стоят в другом порядке, вот и все.

Код:
[Выделить все]
 (defun TEST2 ( N KOL KOD Armclass Armgost Armmat Armmatgost TN DiamGor StepGor LengthGor DiamVert StepVert LengthVert Vlevo Vpravo Vverh Vniz)...
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Непрочитано 02.12.2015, 11:45
#2828
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


trushev, ничего не изменилось.
ProPeller, спасибо! так заработало. Offtop: сам бы ещё нескоро заметил
kacugu вне форума  
 
Непрочитано 04.12.2015, 10:21
#2829
kolya161


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


Здравствуйте!
Имеется вот такой код для внедрения внешних ссылок:

Код:
[Выделить все]
 
(defun test (path / ent doc)
  (vl-load-com)
  (setq *docs* (vla-get-documents (vlax-get-acad-object)))
  (setq doc (vla-open *docs* path))
  (vlax-for ent	(vla-get-blocks doc)
    (if	(= (vla-get-isxref ent) :vlax-true)
      (progn (vla-bind ent :vlax-true) (princ "\nСсылка внедрена"))
    ) ;_ end of if
  ) ;_ end of vlax-for
  (vla-save doc)
  (vla-close doc)
) ;_ end of defun
 
После открытия файла происходит ошибка: Ошибка Automation. Ключ не найден.
И соответственно ссылки не внедрены, файл остается открытым.
Подскажите, как можно решить такой вопрос?
kolya161 вне форума  
 
Непрочитано 04.12.2015, 10:42
#2830
Кулик Алексей aka kpblc
Moderator

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


Если у тебя файл не открывается, то какие претензии к коду? Проверяй и файл-получатель, и файлы ссылок на ошибки, мусор и т.п.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.12.2015, 11:08
#2831
kolya161


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


Файл открывается. Ошибки и прочее проверил и почистил, а ситуация не меняется.
kolya161 вне форума  
 
Автор темы   Непрочитано 04.12.2015, 14:26
#2832
Red Nova

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


Доброго.

После того как поставил реактор на отслеживание и возврат SAVETIME Прокат отказывается работать.
Выдает либо
Код:
[Выделить все]
Command: _prokat bad argument type: numberp: "SAVETIME"AutoCAD variable setting rejected: "osmode" nil
либо Internal error с последующим вылетом.

Возможно ли подружить

Реактор привожу ниже.
Код:
[Выделить все]
 {code}
(defun C:ALERTME ()
(vl-load-com)
(setq VTFRXN (vlr-editor-reactor nil '((:VLR-sysVarChanged . VTF))))
)


(defun VTF (CALL CALLBACK)
(if (and
(= (strcase (car CALLBACK)) (setq str "SAVETIME"))
(not (eq (getvar str) 5))
)
(progn
(princ (strcat "Warning: Someone or something has changed your Autosave settings.\n" str " has been changed back"))
(setvar "SAVETIME" 5)
)
)
)
(setvar "SAVETIME" 5)
(c:alertme)
{code}
Red Nova вне форума  
 
Непрочитано 04.12.2015, 14:31
#2833
Кулик Алексей aka kpblc
Moderator

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


Ну, во-первых, сделай переменные локальными. Во-вторых, ты внутри реактора меняешь системную переменную, на которую настроен этот реактор. Бесконечный цикл, здрасьте!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.12.2015, 15:12
#2834
Red Nova

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


Ты ведь помнишь что я так и не сумел в программирование
Реактор не я писал, скопировал где-то после очередного фаталэррор-а с не сохранившейся работой.
Можно на пальцах показать как правильно?
Red Nova вне форума  
 
Непрочитано 04.12.2015, 15:27
#2835
Кулик Алексей aka kpblc
Moderator

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


Примерно так:
Код:
[Выделить все]
 (defun c:alertme ()
  (vl-load-com)
  (setq vtfrxn (vlr-editor-reactor nil '((:vlr-sysvarchanged . vtf))))
  ) ;_ end of defun


(defun vtf (call callback / str)
  (if (and
        (= (strcase (car callback)) (setq str "SAVETIME"))
        (not (eq (getvar str) 5))
        (not *rednova-savetime*)
        ) ;_ end of and
    (progn
      (princ (strcat "Warning: Someone or something has changed your Autosave settings.\n"
                     str
                     " has been changed back"
                     ) ;_ end of strcat
             ) ;_ end of princ
      (setq *rednova-savetime* t)
      (setvar "SAVETIME" 5)
      ) ;_ end of progn
    (setq *rednova-savetime* nil)
    ) ;_ end of if
  ) ;_ end of defun

(setvar "SAVETIME" 5)

(c:alertme)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.12.2015, 15:41
#2836
Red Nova

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


Спасибо маестро.
На 2013 заработало. На 2015 есть еще какая то проблема с Прокатом Кондрата, но о ней не тут.
Оказывается я изначально писал не в той теме. Я думал что пишу в топике "Обновление программы «Прокат» Василия Кондрата" ))).
Продолжу по правильному адресу.
Red Nova вне форума  
 
Непрочитано 04.12.2015, 15:45
#2837
Кулик Алексей aka kpblc
Moderator

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


У тебя проблема не связана с "Прокатом", так что посты я не перенес.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.12.2015, 16:57
#2838
Red Nova

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


Я то думал у меня совсем с памятью худо стало ))).

Наверное так имелось ввиду.
Цитата:
У тебя проблема не связана с "Прокатом", так что посты я не перенес.

Последний раз редактировалось Red Nova, 04.12.2015 в 17:05.
Red Nova вне форума  
 
Непрочитано 10.12.2015, 11:00
#2839
mkung


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


На некоторых компьютерах время от времени Автокад начинает загружаться с отключенной командой "ОТМЕНА".
Понятно, что за это отвечает переменная "UNDOCTL", но она "только для чтения" и SETVAR не работает.
Придумал вот такую проверку с исправлением:
Код:
[Выделить все]
 (if (= (rem (getvar "UNDOCTL") 2) 0) (command "_undo" "В"))
Но как-то неаккуратно через команду...
Можно ли включать "ОТМЕНУ" поизящнее что-ли?
mkung вне форума  
 
Непрочитано 10.12.2015, 11:06
#2840
Кулик Алексей aka kpblc
Moderator

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


Для начала отключи все дополнения, которые у тебя используются. Практически гарантирую, что проблема кроется в них.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум 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