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

Вернуться   Форум 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.
Просмотров: 2054546
 
Старый 14.03.2011, 16:12
#1361
Aminka

проектировщик CТБ
 
Регистрация: 03.03.2009
Сообщений: 28


Цитата:
Сообщение от gomer Посмотреть сообщение
Код:
[Выделить все]
 (vl-remove-if 'listp (mapcar 'cadr (ssnamex selection)))
Gomer, спасибо, но мне не понятно именно откуда берется лишний мусор при применении ssnamex, поскольку г-н Полищук утверждает, что если функция ssnamex без указания номера должна возвращать список, то длина этого списка будет равна количеству элементов набора. Однако, если выбирать не кликом мыши по объекту, а прямоугольником, то появляется лишнее значение.

Последний раз редактировалось Aminka, 14.03.2011 в 17:22.
Aminka вне форума  
 
Старый 14.03.2011, 20:24
#1362
VVA

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


Цитата:
Сообщение от Aminka Посмотреть сообщение
но мне не понятно именно откуда берется лишний мусор при применении ssnamex
Читай справку об ssnamex. Помимо самих примитивов ssnamex возвращает более детальную информацию, например, каким способом был выбран примитив. И если способ рамка (Window or WPolygon), секрамка (Crossing or CPolygon) или линия (Fense), то будут представлены еще и описания этих многоугольников. Это и есть "лишнее значение".
Еще способ преобразовать набор в список примитивов (без vla функций) _dwgru-conv-pickset-to-list
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Старый 14.03.2011, 23:38
#1363
gomer

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


Цитата:
Сообщение от VVA Посмотреть сообщение
Еще способ преобразовать набор в список примитивов (без vla функций)
кхм, без ssnamex
gomer вне форума  
 
Старый 16.03.2011, 02:05
#1364
Aminka

проектировщик CТБ
 
Регистрация: 03.03.2009
Сообщений: 28


Ооо! Спасибо, еще куча всяких интересностей..)
Дивная штука автолисп..для решения одной простенькой задачи я уже накатала два варианта , а есть еще множество всяких вариантов. Посему еще вопрос-как вы определяете оптимальность для простеньких программ - быстродействием? в редакторе при трассировке где-то дано общее время выполнения лисп-приложения?

Последний раз редактировалось Aminka, 16.03.2011 в 02:16.
Aminka вне форума  
 
Старый 16.03.2011, 12:41
#1365
Do$

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


Цитата:
Сообщение от Aminka Посмотреть сообщение
для решения одной простенькой задачи
...код может оказаться далеко не простым, если учитывать многочисленные ньюансы.
Цитата:
Сообщение от Aminka Посмотреть сообщение
как вы определяете оптимальность для простеньких программ - быстродействием?
В первую очередь - универсальностью решений. Часто - в ущерб быстродействию (современные компьютеры позволяют такую роскошь).
Цитата:
Сообщение от Aminka Посмотреть сообщение
в редакторе при трассировке где-то дано общее время выполнения лисп-приложения?
Нет в редакторе такого, время работы можно оценить так, как советует VVA в этом посте.
Do$ вне форума  
 
Старый 21.03.2011, 15:12 Как координату привязать к переменной?
#1366
Fynjy87


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


Здравствуйте!
Как хорошо, что уже есть тема для чайников)

У меня вопрос. Поиском ответ найти не удалось. Подскажите, пожалуйста, как значения координат точек при создании объектов привязать к значениям переменных? Например, как для отрезка:

Код:
[Выделить все]
 (entmake '((0 . "LINE") (8 . "1") (10 0 0) (11 0 60)))
Получить по существу (10 X1 Y1) (11 X2 Y2), только на языке лиспа.
Fynjy87 вне форума  
 
Старый 21.03.2011, 15:17
#1367
Лиспер


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


Это так что ли?
Код:
[Выделить все]
(entmakex (list '(0 . "LINE") '(8 . "1") (list 10 x1 y1) (list 11 x2 y2))
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Старый 21.03.2011, 18:29
#1368
Fynjy87


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


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Это так что ли?
Код:
[Выделить все]
(entmakex (list '(0 . "LINE") '(8 . "1") (list 10 x1 y1) (list 11 x2 y2))
Да. Здорово) Теперь все намного проще. Спасибо!
Fynjy87 вне форума  
 
Старый 24.03.2011, 11:52
#1369
Frigate

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


День добрый!

Прошу помощи по программной работе с OpenOffice. Копал везде - в ЛИСП не нашел примеров работы с OpenOffice. Только компилированный модуль.
Проверил - модуль работет вроде корректно. Но - нужно, чтобы приложение (сам файл) (Calc=Excel) было открыто. А как его открыть программно?

Напр., для Excel делают так:

Код:
[Выделить все]
    (setq path (getfiled	"Выберите файл Excel:"
			(getvar "dwgprefix")
			"xls"
			16
	      )
  )
  (setq sheet_name_or_number 1); 
  (setq ExcelApp (vlax-get-or-create-object "Excel.Application"))
  (vla-put-visible ExcelApp :vlax-true)
А как запустить подобное приложение и открыть файл Calc (Open Office)?

Буду благодарен з аподсказку.

Если советов не будет, придется работать через АДО c xls.
И проверять, что я там наворотил в файле, открывая файл xls из OpenOffice.

Либо упрощенный вариант - создавать файл csv формата.
Frigate вне форума  
 
Старый 24.03.2011, 12:18
#1370
VVA

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


Цитата:
Сообщение от Frigate Посмотреть сообщение
А как запустить подобное приложение и открыть файл Calc (Open Office)?
Спросить у гугла
how to create object (word/excel) for openoffice
Если за xls зарегистрирован OpenOffice (т.е. по даблклику на файле грузится OpenOffice), то можно так
Код:
[Выделить все]
(defun vva-xopen (name / di na sh)
;; get from Patrick_35
;; http://www.theswamp.org/index.php?topic=29548.0 
;;;Usage 
;;;(setq my_file (vva-xopen "c:/test.txt")) 
;;;(setq my_file (vva-xopen "c:/test.avi")) 
;;;(setq my_file (vva-xopen "c:/test.3gp")) 

  (and   (setq name (findfile name)) 
   (setq sh (vlax-create-object "Shell.Application")) 
   (setq di (vlax-invoke sh 'Namespace (vl-filename-directory name))) 
   (setq na (vlax-invoke di 'parsename (strcat (vl-filename-base name) (vl-filename-extension name)))) 
   (vlax-invoke-method na 'invokeverbex "open") 
  ) 
  (vlax-release-object sh) 
  na 
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Старый 24.03.2011, 13:14
#1371
Frigate

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


VVA,

Владимир, спасибо аз ответ. Этот код мне пригодится. Но хотелось бы все-таки понять, как из ЛИСПа забраться в OpenOffice - может кто уже дошел до этого и не прочь поделиться?
Для меня описание, как из Делфи,С++ и тп попасть в OpenOffice пока сродни китайским иероглифам. Если б видеть хоть какой-нить аналог на ЛИСПе, то дальше б уже разобрался по этому аналогу. А так - остается лишь пользоваться скомпилированным модулем по обмену с OpenOffice (лежит в download), либо (что проще и надежнее) создавать файл crv в ЛИСПе.
Frigate вне форума  
 
Старый 27.03.2011, 17:23
#1372
Fynjy87


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


Еще раз, здравствуйте!)

Подскажите, пожалуйста, можно ли в лиспе задавать относительный путь к файлу? В программе Елпанова Евгения, которую я взял за основу, файлы Excel выбираются через getfiled. Когда файлов много, это неудобно. Я нашел только как жестко закрепить пусть к файлу. Но намного удобнее было бы с относительным. Это возможно?
Fynjy87 вне форума  
 
Старый 27.03.2011, 21:36
#1373
Дима_

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


Цитата:
Сообщение от Fynjy87 Посмотреть сообщение
Но намного удобнее было бы с относительным. Это возможно?
В прямую нет - автолисп не знает из какого файла загруженна программа, поищи - обсуждалось - есть варианты через поиск .lsp файлов (кривенький), (getenv "appdata") и пр.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Старый 27.03.2011, 22:32
#1374
Fynjy87


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
В прямую нет - автолисп не знает из какого файла загруженна программа, поищи - обсуждалось - есть варианты через поиск .lsp файлов (кривенький), (getenv "appdata") и пр.
Ясно. Спасибо за ответ! Похоже, на данный момент шкурка выделки не стоит.
Fynjy87 вне форума  
 
Старый 28.03.2011, 06:58
#1375
ShaggyDoc

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


Цитата:
шкурка выделки не стоит
Неправильный вывод. В правильной программе не должно быть никаких абсолютных путей. Все дополнительные файлы должны лежать там, где положено им лежать. А не куда их кто-то положил.

Хорошая программа должна их уметь найти. А в плохой можно и записать "C:/SuperPuper"
ShaggyDoc вне форума  
 
Старый 28.03.2011, 14:16
#1376
Fynjy87


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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Неправильный вывод. В правильной программе не должно быть никаких абсолютных путей. Все дополнительные файлы должны лежать там, где положено им лежать. А не куда их кто-то положил.

Хорошая программа должна их уметь найти. А в плохой можно и записать "C:/SuperPuper"
Согласен. Но тут дело в приоритетах, поэтому я и сказал "на данный момент". Т.е. сейчас я ограничен во времени и мне главное написать, пусть "неправильную", но рабочую программу. А потом я уже буду потихоньку разбираться и доводить ее до правильного состояния.
Учитывая, что я только начал осваивать лисп и раньше с программированием совсем не сталкивался, сейчас у меня уйдет слишком много времени на то, чтобы разобраться. И я просто не успею.
Fynjy87 вне форума  
 
Старый 29.03.2011, 11:42
#1377
Frigate

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


Fynjy87,

можно найти путь относительно файла чертежа, из которого ты вызываешь программу. У меня так организовано - есть директория проекта, в ней лежат чертежи и папки с определенной иерархией. Зная эту иерархию и путь к чертежу, несложно понять, как "пробежаться" по всем папкам директории проекта.

Пусть к твоему файлу чертежа находишь по

Код:
[Выделить все]
(getvar "dwgprefix")
или так

Код:
[Выделить все]
(vla-get-path
	       (vla-get-activedocument (vlax-get-acad-object))
) ;_ end of vla-get-path
Frigate вне форума  
 
Старый 29.03.2011, 12:49
#1378
VVA

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


Цитата:
Сообщение от Frigate Посмотреть сообщение
можно найти путь относительно файла чертежа,
Акад2006-пропадают внешние ссылки пост 9

PL_XRefChgr Функция глобальной замены абсолютных путей ссылок и растров на относительные и обратно, версия: 0.91
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Старый 29.03.2011, 22:47
#1379
Fynjy87


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


Цитата:
Сообщение от Frigate Посмотреть сообщение
Пусть к твоему файлу чертежа находишь по

Код:
[Выделить все]
(getvar "dwgprefix")
Здорово!) Бывает же так просто. Очень забавно смотрится после всего того, что я сказал про нехватку времени для того, чтобы в этом разобраться
Но без вас я бы действительно это долго искал. Спасибо!

VVA
Сасибо, хорошие программы. Пригодятся на будущее.

Последний раз редактировалось Fynjy87, 29.03.2011 в 22:53.
Fynjy87 вне форума  
 
Старый 30.03.2011, 15:05 как проверить содержимое переменной что бы присвоить ей тип?
#1380
baaba

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 665
<phrase 1= Отправить сообщение для baaba с помощью Skype™


Код:
[Выделить все]
 (setq a (getstring)
Что мне нужно:
если пользователь ввёл текст, ничего не делаю с переменной, оставляю как есть, если ввёл число, преобразую оператором atof в число:
Код:
[Выделить все]
 (setq a (atof a))
Подскажите, какая функция может проверить содержимое переменной, номер это или литера?
Как проверить содержимое переменной что бы затем присвоить ей тип?
baaba вне форума  
Ответ
Вернуться   Форум 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