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

Вернуться   Форум 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.
Просмотров: 1965989
 
Непрочитано 07.06.2010, 16:55
#901
Кулик Алексей aka kpblc
Moderator

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


Объекта "прямоугольник" не существует. Используй vla-addlightweightpolyline
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.06.2010, 17:09
#902
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Спасибки, попробую на досуге.
alex8888 вне форума  
 
Непрочитано 09.06.2010, 00:05
#903
superkot007


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


Простенько и со вкусом...
Код:
[Выделить все]
; Расчленение мультитекста
(defun c:ExplodeMText (
                    / Collect
                      n1
                      Ename
                     )

  (setq Collect (ssget "_X" '((0 . "MTEXT"))))
  (if (/= Collect nil)
    (progn
      (setq n1 0)
      (repeat (sslength Collect)
        (setq Ename (ssname Collect n1))
        (command "_explode" Ename)
        (setq n1 (+ n1 1))
      ) ; repeat
    ) ; progn
  ) ; if
)
Начинаю учиться...
superkot007 вне форума  
 
Непрочитано 09.06.2010, 00:15
#904
Кулик Алексей aka kpblc
Moderator

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


А теперь добавь обработку: заблокированных слоев; выключенных слоев; примитивов внутри блоков. Гарантирую веселье
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.06.2010, 00:47
#905
superkot007


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А теперь добавь обработку: заблокированных слоев; выключенных слоев; примитивов внутри блоков. Гарантирую веселье
На выключенных слоях вроде работает, замороженных - тоже... В остальном, да - не катит...
Я же и написал, что простенько - это не комбайн. Все слои у меня всегда включены (разморожены, разблокированы), в блоках нет M-текстов... Так что меня устраивает
superkot007 вне форума  
 
Непрочитано 09.06.2010, 06:10
#906
ShaggyDoc

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


Цитата:
Все слои у меня всегда включены (разморожены, разблокированы), в блоках нет M-текстов... Так что меня устраивает
"У меня всегда....", "меня устраивает..." - обычная ошибка. Относящаяся не только к конкретному случаю с расчленением М-текста.

Надо делать надежно - чтобы работало везде и всегда. С учетом всех возможных вариантов и ошибочных действий пользователя.
ShaggyDoc вне форума  
 
Непрочитано 09.06.2010, 09:36
#907
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Надо делать надежно - чтобы работало везде и всегда. С учетом всех возможных вариантов и ошибочных действий пользователя.
Разработчику приложений - да, инженеру для своих нужд - не обязательно. Зачем же, ради единожды в год применяемого в конкретном случае кода делать все обработки ошибок, предусматривать многочисленные варианты, о которых можешь даже и не подозревать?
Do$ вне форума  
 
Непрочитано 09.06.2010, 15:28
#908
gomer

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


Цитата:
Сообщение от Do$ Посмотреть сообщение
ради единожды в год применяемого в конкретном случае кода
вообще писать не стоит
gomer вне форума  
 
Непрочитано 09.06.2010, 18:44
#909
ShaggyDoc

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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Разработчику приложений - да, инженеру для своих нужд - не обязательно. Зачем же, ради единожды в год применяемого в конкретном случае кода делать все обработки ошибок, предусматривать многочисленные варианты, о которых можешь даже и не подозревать?
Подавляющее большинство программ для AutoCAD на LISP написаны именно обычными инженерами и сначала для своих нужд. И поначалу безграмотно - просто негде было научиться. И "единожды применяемый код" применялся многократно. С выявлением всё новых ошибок.

А ведь их можно просто сразу не допускать. В том числе "детских" - отключение привязок, учет возможностей разной высоты текста в стилях и т.п. Тем более, что сейчас все написано и спросить есть где.

Как говорил Аркадий Райкин - "сначала ребенок пишет на заборе буквы, но потом захочет писать слова..."
ShaggyDoc вне форума  
 
Непрочитано 15.06.2010, 09:50
#910
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Кулик Алексей aka kpblc, подскажи пожалуйста как попроще методами ActiveX:
1. Открыть файл dwg (можно в фоновом режиме),
2. Сохранить его в R12_dxf под измененным именем
Заранее спасибо
alex8888 вне форума  
 
Непрочитано 15.06.2010, 11:06
#911
Кулик Алексей aka kpblc
Moderator

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


Открытие файла: vla-open
Сохранение в формате: vla-saveas. Но вот будет ли поддерживаться формат R12 - еще вопрос.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.06.2010, 11:33
#912
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Кулик Алексей aka kpblc, вот такая конструкция:
Код:
[Выделить все]
(setq dwg_file (vla-get-fullname active_document))
(setq filename (strcat
		 (vl-filename-directory dwg_file)
		 "\\"
		 (vl-filename-base dwg_file)
;;;		 ".dxf"
		);strcat
);setq
(vla-SaveAs active_document filename acR12_dxf)
файл создается в R12 правильно, но при этом он переписывает активный файл. Что добавить, чтобы было "за кадром" и активный документ не трогался бы?

2. Метод vla-open как написано у Полещука, фактически не работает (для Document). Это как? Что имеется ввиду?

3.
Код:
[Выделить все]
(setq object
       (vla-get-OpenSave 		;указатель на настройки файловых операций
	 	(vla-get-Preferences	;чтение объекта настроек
		  	(vlax-get-acad-object)	;текущий документ
		);vla-get-Preferebces
	);vla-get-openSave
);setq

(vla-get-SaveAsType object)		;чтение типа файла тек. док-та

(vla-put-SaveAsType object acR12_dxf)	;установка типа файла как R12.dxf
этот код только изменяет тип документа (R12) и не изменяет сам документ? То есть файл определяется как dxf, а внутри как и прежде dwg?

Последний раз редактировалось alex8888, 15.06.2010 в 11:41.
alex8888 вне форума  
 
Непрочитано 15.06.2010, 13:22
#913
Кулик Алексей aka kpblc
Moderator

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


Попробуй так:
Код:
[Выделить все]
(vl-load-com)

(defun test (/ filename doc)
  (setq filename "d:\\1\\dwg_01.dwg"
        doc      (vla-add (vla-get-documents (vlax-get-acad-object)) filename)
        ) ;_ end of setq
  (vla-saveas doc
              (strcat (vl-filename-directory filename) "\\" (vl-filename-base filename) "R12")
              acr12_dxf
              ) ;_ end of vla-SaveAs
  (vla-close doc)
  ) ;_ end of defun
Вроде бы должно работать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.06.2010, 14:19
#914
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Кулик Алексей aka kpblc, почему, функции с именем test упорно не хотят работать?
Только если ее переименовать в другую, отличную от test
alex8888 вне форума  
 
Непрочитано 15.06.2010, 14:26
#915
Кулик Алексей aka kpblc
Moderator

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


Значит, что-то еще подгружается и определяет функцию (test). Мне как-то не видать отседова
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.06.2010, 15:18
#916
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Кулик Алексей aka kpblc, проверь, пожалуйста, что то не пашет
Код:
[Выделить все]
(vl-load-com)

(begin_activeX)

(defun at_save_dwg-dxf (/ filename active_document)

  
  (setq	filename
		 (strcat
		   (getvar "dwgprefix")
		   (getvar "dwgname")
		 )			;strcat
 
  ) ;_ end of setq

  (vla-saveas
    active_document
    (strcat (vl-filename-directory filename)
	    "\\"
	    (vl-filename-base filename)
	    );strcat
    acr12_dxf
  ) ;_ end of vla-SaveAs
;;;  (vla-close doc)
) ;_ end of defun
Ошибка: Fehlerhafter Argumenttyp: VLA-OBJECT nil

Вложенная функция:
Код:
[Выделить все]
(defun begin_activex (/)
  
  (vl-load-com)				;Çàãðóçêà ðàñøèðåííèé VLisp
  
  (setq acad_application (vlax-get-acad-object))
  					;äîê-ò Àâòîêàäà
  (setq active_document (vla-get-ActiveDocument acad_application))
					;àêòèâíûé äîê-ò Àâòîêàäà
  (setq model_space (vla-get-modelspace active_document))
					;ïð-âî ìîäåëè àêòèâíîãî äîê-òà
  (setq paper_space (vla-get-paperspace active_document))
					;ïð-âî ëèñòà àêòèâíîãî äîê-òà

)					;defun
alex8888 вне форума  
 
Непрочитано 15.06.2010, 15:44
#917
Кулик Алексей aka kpblc
Moderator

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


А на момент вызова vla-saveas разве переменная active_document инициализирована? Тут "запутка" в локальных и глобальных переменных.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.06.2010, 16:01
#918
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


active_document берется из begin_activex, которая грузится раньше в этом же лиспе. И она не локальна. Не так?

А вот так?

Код:
[Выделить все]
(vl-load-com)

(begin_activeX)

(defun at_save_dwg-dxf (/ filename doc)
  
  (setq	filename
		 (strcat
		   (getvar "dwgprefix")
		   (getvar "dwgname")
		 )			;strcat
  doc (vla-add active_document filename)
  ) ;_ end of setq

  (vla-saveas
    doc
    (strcat (vl-filename-directory filename)
	    "\\"
	    (vl-filename-base filename)
	    );strcat
    acr12_dxf
  ) ;_ end of vla-SaveAs
;;;  (vla-close doc)
) ;_ end of defun
Правда, выдает: Fehler: ActiveX-Server gab folgenden Fehler zuruck: unbekannter Name: Add - типа неизвестное имя Add

А самое интересное, что в этом случае сработало:
Код:
[Выделить все]
(vl-load-com)

;;;(begin_activeX)

(defun at_save_dwg-dxf (/ filename doc)
  
  (setq	filename
		 (strcat
		   (getvar "dwgprefix")
		   (getvar "dwgname")
		 )			;strcat
  doc (vla-add (vla-get-documents (vlax-get-acad-object)) filename)
  ) ;_ end of setq

  (vla-saveas
    doc
    (strcat (vl-filename-directory filename)
	    "\\"
	    (vl-filename-base filename)
	    );strcat
    acr12_dxf
  ) ;_ end of vla-SaveAs
;;;  (vla-close doc)
) ;_ end of defun
Совсем замучаю
Нашел: вместо vla-get-documents было vla-get-ActiveDocument
Да уж

Последний раз редактировалось alex8888, 15.06.2010 в 16:28.
alex8888 вне форума  
 
Непрочитано 15.06.2010, 16:35
#919
Кулик Алексей aka kpblc
Moderator

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


В качестве иллюстрации к #916:
Код:
[Выделить все]
(defun fun1 ()
  (setq value "1234")
  ) ;_ end of defun

(defun fun2 (/ value)
  (vl-princ-to-string value)
  ) ;_ end of defun
И вызов:
Код:
[Выделить все]
_$ (fun2)
"nil"
Область видимости однако...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.06.2010, 16:48
#920
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Получается, что переменная value теряет свое значение?
alex8888 вне форума  
Ответ
Вернуться   Форум 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