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

Вернуться   Форум 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.
Просмотров: 1972994
 
Автор темы   Непрочитано 08.08.2008, 09:35
#361
Red Nova

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


VVA,
Про (Масштаб_блока_XxМасштаб_блока_Y) понял. А про ключ поиска не понял. Что это такое?
Цитата:
В итоге получается список из 1-х элементов res (ключей)
Каким образом res стал ключем?
Из хелпа
Цитата:
(member <выражение> <список>)

Эта функция просматривает <список> - встречается ли <выражение> и возвращает часть <списка>, начинающуюся с первого найденного <выражения>. Если в <списке> нет <выражения>, MEMBER возвращает nil.

Например:

(member 'c '(a b c d e)) возвращает (C D E)

(member 'q '(a b c d e)) возвращает nil
Тут нет упоминания ключей. Если верить хелпу, то (mapcar 'car res) это <список>.
Не могу понять каким образом res получает связь с размерами колонн.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 08.08.2008, 10:09
#362
Кулик Алексей aka kpblc
Moderator

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


Примерно так получилось (см.комментарии)
Код:
[Выделить все]
(foreach item (_dwgru-conv-pickset-to-list selset)
          ; Для каждого элемента набора
  (if ;; Проверяем
      (member
        ;; Входит ли {1}
        (setq size (strcat (rtos (cdr (assoc 41 (entget item))) 2 4)
                           "x"
                           (rtos (cdr (assoc 42 (entget item))) 2 4)
                           ) ;_ end of strcat
              ) ;_ end of setq
        ;; {1} Назначили переменной size значение "ШиринаВысота"
        (mapcar 'car res)
        ;; В список первых элементов res
        ) ;_ end of member
    ;; Если входит, то
    (setq res ;; Присвоить res результат
              (subst ;; Замены
                     (cons ;; На новый элемент, равный точечной паре из
                           size  ;; {1}
                           (1+ (cdr (assoc size res))) ;; И увеличенного на 1 имеющегося счетчика
                           ) ;_ end of cons
                     (assoc size res)  ;; А это старый элемент списка, его-то и меняем
                     res ;; А это сам res, над которым издеваемся
                     ) ;_ end of subst
          ) ;_ end of setq
    ;; Если не входит, то
    (setq res ;; Присвоить res результат
           (cons ;; Соединения
             (cons size 1) ;; Точечной пары "ШиринаВысота" и 1 (ведь 1 элемент с такой шириной-высотой уже найден)
             res ;; С имеющимся res
             ) ;_ end of cons
          ) ;_ end of setq
    ) ;_ end of if
  ) ;_ end of foreach
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.08.2008, 13:43
#363
Red Nova

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


Кулик Алексей aka kpblc,
Все равно вопрос с #354 остается мною непонятым
__________________
Блог
Red Nova вне форума  
 
Непрочитано 08.08.2008, 14:00
#364
Кулик Алексей aka kpblc
Moderator

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


res - не ключ. Это результирующий список.
Иллюстрации для member:
Код:
[Выделить все]
_$ (member 1 (list 10 2 3 "qwer" 1 "asd" "qwer"))
(1 "asd" "qwer")
_$ (member 12 (mapcar 'car '((1 . 2) (12 . 6) (654 . 32) (12 . 1))))
(12 654 12)
Пройди по коду в пошаговом режиме совместно с отслеживанием значений переменных - многое будет понятно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.08.2008, 14:14
#365
Red Nova

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


Твой код с #357 я полностью понимаю. Как работают mapcar и member мне ясно. Непонятно как переменная res принимает на сея значение выражения
Код:
[Выделить все]
(setq size (strcat (rtos (cdr (assoc 41 (entget item))) 2 4)
                           "x"
                           (rtos (cdr (assoc 42 (entget item))) 2 4)
                           ) ;_ end of strcat
              )
Я бы предположил, что на месте Res должна быть size, ведь именно ей присвоено нужное выражение.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 08.08.2008, 14:25
#366
Кулик Алексей aka kpblc
Moderator

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


Стоп. Попробую словами, без кодов. Правда, подробно, боюсь, не получится.
"Зайдем" в цикл.
item - элемент набора. Из этого элемента забираем коэффициент масштабирования по осям х и у (соответственно группы 41 и 42) и из них формируем текстовую строку "<Ширина>х<Высота>". Чтобы не вычислять ее еще несколько раз, засовываем в переменную size (в #355 помечено как {1} - это база, с нее начинаются все пляски). Ну а дальше я в 355 вроде расписал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.08.2008, 14:35
#367
Red Nova

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


То что ты написал я как раз знаю. Я именно это и говорю. Ты записал "<Ширина>х<Высота>" в переменную size. Но далее, в mapcar, ты используешь не size а res А переменной res мы ведь пока ничего не обозначили.

Код:
[Выделить все]
(member
        ;; Входит ли {1}
        (setq size (strcat (rtos (cdr (assoc 41 (entget item))) 2 4)
                           "x"
                           (rtos (cdr (assoc 42 (entget item))) 2 4)
                           ) ;_ end of strcat
              ) ;_ end of setq
        ;; {1} Назначили переменной size значение "ШиринаВысота"
        (mapcar 'car res)
        ;; В список первых элементов res
        ) ;_ end of member
__________________
Блог
Red Nova вне форума  
 
Непрочитано 08.08.2008, 14:41
#368
Кулик Алексей aka kpblc
Moderator

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


(mapcar 'car nil) вернет nil, соответственно (member <Чего-то-там> nil) вернет тоже nil. И будет выполняться строка
Код:
[Выделить все]
(setq res ;; Присвоить res результат
           (cons ;; Соединения
             (cons size 1) ;; Точечной пары "ШиринаВысота" и 1 (ведь 1 элемент с такой шириной-высотой уже найден)
             res ;; С имеющимся res
             ) ;_ end of cons
          ) ;_ end of setq
Если сразу после этого посмотреть res, то оно будет равно
Код:
[Выделить все]
(("<Ширина>х<Высота>" . 1))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.08.2008, 17:51
#369
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Цитата:
Сообщение от VVA Посмотреть сообщение
У меня есть предложение ко всем, но в основном модераторам такого плана:
Разделить уроки на "академисеские часы" или даже на мастер-классы, а не валить все в одну кучу.
Этот топик (удалив все лишнее) можно например назвать
"Урок 1. Создание и модификация примитивов с помощью команд Автокада"

Задание Алексея вынести в "Урок 2. Модификация и создание примитивов с помощью enget, entmake и т.д." ну и т.д.
Потом урок 3 и т.д.
Полностью поддерживаю.
Обращение к ГУРу:
я понимаю что для Вас это все понятно и возможно уже неинтересно, но мне (нам) начинающим сложно шагать такими шагами.
Чуть помедленнее. Расписать ВСЕ возможности функций, их вариации....
Но эт так, может я торможу....
ИМХО считать кол-во заданых колон немного рановато....
А то выполняем сложные задачи, а не знали что монжна одним setq присваивать несколько значений, или пользовать if (progn), ну и всякое такое....

Вопрос такой чуть не по теме:
хочу создать свой стиль текста с помощью команды _-style
(command "_-style" "gost200" "ISOCPEUR" 200 "1" "0" "_n" "_n")
Вопрос: как сделать курсив?
Неужели углом наклона?
Я хочу оригинальный курсив данного шрифта.
Спаибо.

Последний раз редактировалось andery, 08.08.2008 в 18:01.
andery вне форума  
 
Непрочитано 08.08.2008, 19:25
#370
Кулик Алексей aka kpblc
Moderator

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


Кхе, одним setq можно не только несколько значений присваивать. В результате выполнения кода
Код:
[Выделить все]
(setq aa 1 ab 2 ac (* (1+ aa) a2))
будет сделано следующее: переменная aa получит значение 1; ab - 2; ac - 4 и возвращено вычисленное значение ac (4). То есть теоретически будет правомерна конструкция
Код:
[Выделить все]
(setq ad (1+ (setq aa 1 ab 2 ac (* (1+ aa) a2))))
В результате которой переменная ad получит значение 5
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.08.2008, 12:01
#371
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Повторю вопрос, может кто знает....
хочу создать свой стиль текста с помощью команды _-style
(command "_-style" "gost200" "ISOCPEUR" 200 "1" "0" "_n" "_n")
Вопрос: как сделать курсив?
Неужели углом наклона?
Я хочу оригинальный курсив данного шрифта.
Заранее благодарен.
andery вне форума  
 
Непрочитано 12.08.2008, 12:17
#372
Кулик Алексей aka kpblc
Moderator

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


http://dwg.ru/f/showpost.php?p=132694&postcount=25 не катит?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.08.2008, 12:47
#373
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Для меня это темный лес......
Я хочу просто курсив.... "своими руками" так сказать

Последний раз редактировалось andery, 12.08.2008 в 22:53.
andery вне форума  
 
Непрочитано 13.08.2008, 10:36
#374
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Цитата:
Создание стиля текста и активизация стиля

(command "_.style" "имя стиля" "шрифт" "высота" "коэф. ширины" "угол" "Backwards? <N>" "Upside-down? <N>" "Vertical? <N>")

Если кроме имени стиля нет параметров, он становится текущим стилем текста.
Вот хочу вместо угла - задать курсив.
Не получится с помощью данной команды?
andery вне форума  
 
Непрочитано 13.08.2008, 10:39
#375
Кулик Алексей aka kpblc
Moderator

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


Под словом "угол" подразумевается угол наклона букв.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2008, 10:48
#376
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Под словом "угол" подразумевается угол наклона букв.
Спасибо, это я понимаю.
Хочу задать опцию "начертание" с командной строки.

Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08.
andery вне форума  
 
Непрочитано 13.08.2008, 10:49
#377
Кулик Алексей aka kpblc
Moderator

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


При использовании shx-шрифтов, по-моему, такого нет. ttf-шрифтами просто не пользуюсь - весу и головняка много, а толку - "маловато будет" (с)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2008, 11:10
#378
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Цитата:
shx-шрифтов
они не поддерживают украинский язык
Стоит ли искать ответ на заданный вопрос или пока забыть об этом?
andery вне форума  
 
Непрочитано 13.08.2008, 11:14
#379
Кулик Алексей aka kpblc
Moderator

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


shx-шрифты, насколько я помню, можно редактировать. Подробностей не знаю
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2008, 11:52
#380
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от andery Посмотреть сообщение
они не поддерживают украинский язык
Стоит ли искать ответ на заданный вопрос или пока забыть об этом?
Надо точно знать название файла курсивного шрифта, например:
Код:
[Выделить все]
(command "_.-style" "gost200" "isocpeui.ttf" 200 "1" "0" "_n" "_n")
Alaspher вне форума  
Ответ
Вернуться   Форум 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