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

Вернуться   Форум 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.
Просмотров: 1965735
 
Непрочитано 20.05.2018, 15:30
#3561
BithSachs


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


Что я делаю не так?
ssget не хочет работать
Код:
[Выделить все]
 (defun c:ВРАЩАТЬ ()
	(setq ss (ssget "_P")
	(setq p1 (getpoint "/nПервая точка"))
	(setq p2 (getpoint "/nВторая точка"))
	(command "ПОВЕРНУТЬ" ss p1 "О" p1 p2)
	)
)
После "command", думаю, понятно, что я хочу сделать
BithSachs вне форума  
 
Непрочитано 20.05.2018, 15:45
1 | #3562
1958


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


Цитата:
Сообщение от BithSachs Посмотреть сообщение
Что я делаю не так?
закрывающую скобку из строки 6 перенесите в строку 2.
1958 вне форума  
 
Непрочитано 20.05.2018, 15:56
#3563
BithSachs


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


Цитата:
Сообщение от 1958 Посмотреть сообщение
закрывающую скобку из строки 6 перенесите в строку 2.
Спасибо, в этом была ошибка, но все равно ничего не работает.
В конце, после определения второй точки, появляется рамка выбора и все..
И команда начинается сразу с определения первой точки, минуя ssget почему-то..
BithSachs вне форума  
 
Непрочитано 20.05.2018, 16:20
#3564
1958


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


Код:
[Выделить все]
 (defun c:rt (/)
;;; (setq ss (ssget))
 (setq ss (ssget "_P"))
 (setq p1 (getpoint "\nПервая точка"))
 (setq p2 (getpoint "\nВторая точка"))
 (setq ang (angtos (angle p1 p2)))
 (command "_rotate" ss "" p1 ang)
)
Попробуйте так
1958 вне форума  
 
Непрочитано 20.05.2018, 17:22
#3565
BithSachs


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


1958, игнорирует ssget вначале все равно
BithSachs вне форума  
 
Непрочитано 20.05.2018, 20:02
#3566
1958


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


Цитата:
Сообщение от BithSachs Посмотреть сообщение
игнорирует ssget вначале все равно
А вы перед этим набор создавали?
(setq ss (ssget "_P")) - это создание набора из элементов предыдущего набора.
Включите вторую строчку и посмотрите результат.
1958 вне форума  
 
Непрочитано 20.05.2018, 20:22
#3567
BithSachs


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


Неа, не работает
BithSachs вне форума  
 
Непрочитано 21.05.2018, 03:11
#3568
1958


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


Цитата:
Сообщение от BithSachs Посмотреть сообщение
Неа, не работает
В каком месте?
Смутное подозрение, что у вас в (setq ss (ssget "_P")) вместо P (Пэ на латинице) стоит Р (эР на кириллице).
1958 вне форума  
 
Непрочитано 21.05.2018, 10:29
#3569
gnuvse


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


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

Хочу написать программу, которая просто меняет Justify на right<->left

Подскажите пожалуйста как получить значение Justify текста.
Или как его можно сразу перезаписать.

vla-get-Justification выдает ошибку.

Спасибо за ответ и ваше время.

Последний раз редактировалось gnuvse, 21.05.2018 в 10:36.
gnuvse вне форума  
 
Непрочитано 21.05.2018, 10:34
1 | #3570
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/2010/04/06/text-and-attrib-entities/ ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.05.2018, 11:11
#3571
gnuvse


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Прочитал статью.

Смог получить значение TextJustify от 1 до 3 в зависимости от положения текста.
Как теперь можно перезаписать это значение?

Спасибо.
gnuvse вне форума  
 
Непрочитано 21.05.2018, 11:18
#3572
BithSachs


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


Цитата:
Сообщение от 1958 Посмотреть сообщение
В каком месте?
Смутное подозрение, что у вас в (setq ss (ssget "_P")) вместо P (Пэ на латинице) стоит Р (эР на кириллице).
Нет, там все нормально. Я не понимаю.. это самое примитивное, что можно вообще придумать, и оно не работает.
BithSachs вне форума  
 
Непрочитано 21.05.2018, 11:23
1 | #3573
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от gnuvse Посмотреть сообщение
Как теперь можно перезаписать это значение?
Если через ActiveX, то vla-put-<ИмяСвойства>. Просто про точки вставки не забудь.
Цитата:
Сообщение от BithSachs Посмотреть сообщение
это самое примитивное, что можно вообще придумать, и оно не работает.
Тупой (ssget) работает? pickfirst чему равна?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.05.2018, 12:19
#3574
gnuvse


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если через ActiveX, то vla-put-<ИмяСвойства>. Просто про точки вставки не забудь.

Тупой (ssget) работает? pickfirst чему равна?
Алексей, пожалуйста, приведите пример кода.

Спасибо.
gnuvse вне форума  
 
Непрочитано 21.05.2018, 13:18
#3575
BithSachs


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тупой (ssget) работает? pickfirst чему равна?
Не работает, Пикфест - 1
После всех setq пишет, что функция прервана, и запускает _rotate

Даже вот так не работает

Код:
[Выделить все]
 (defun c:ТЕСТ (/)
	(command) "ПОВЕРНУТЬ" (ssget) (getpoint "\nДай точку") "опорный угол" "30"
)
BithSachs вне форума  
 
Непрочитано 21.05.2018, 13:59
#3576
Кулик Алексей aka kpblc
Moderator

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


Примерно так, на скорую руку:
Код:
[Выделить все]
 (vl-load-com)

(defun test (/ adoc selset pt1 pt2)
  (if (and (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget "_:L")))))) 'pickset)
           (= (type
                (setq pt1 (vl-catch-all-apply
                            (function (lambda () (getpoint "\nУкажите точку, вокруг которой вращаем <Отмена> : ")))
                            ) ;_ end of vl-catch-all-apply
                      ) ;_ end of setq
                ) ;_ end of type
              'list
              ) ;_ end of =
           pt1
           (= (type (setq pt2 (vl-catch-all-apply
                                (function (lambda () (getangle pt1 "\nУкажите, насколько поворачиваем <Отмена> : ")))
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'real
              ) ;_ end of =
           pt2
           ) ;_ end of and
    (progn (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
           (foreach ent (mapcar (function vlax-ename->vla-object)
                                ((lambda (/ item tab)
                                   (repeat (setq tab  nil
                                                 item (sslength selset)
                                                 ) ;_ end setq
                                     (setq tab (cons (ssname selset (setq item (1- item))) tab))
                                     ) ;_ end of repeat
                                   ) ;_ end of lambda
                                 )
                                ) ;_ end of mapcar
             (vla-rotate ent (vlax-3d-point pt1) pt2)
             ) ;_ end of foreach
           (vla-regen adoc acactiveviewport)
           (vla-endundomark adoc)
           ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
----- добавлено через 44 сек. -----
Код написан без оптимизации, некоторые проверки там лишние - воткнул по привычке.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.05.2018, 14:02
#3577
RrRR


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


BithSachs, а если ещё упростить:
Код:
Так работает?
Перезапустить acad и в новом документе пробовать...
RrRR вне форума  
 
Непрочитано 21.05.2018, 14:09
#3578
Кулик Алексей aka kpblc
Moderator

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


gnuvse, пример какого кода? Изменения выравнивания, что ли?

----- добавлено через ~8 мин. -----
Говорит, что
Цитата:
Сообщение от BithSachs Посмотреть сообщение
Не работает
Вот интересно, какие дополнения установлены и в каком количестве?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.05.2018, 15:14
#3579
1958


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


Цитата:
Сообщение от BithSachs Посмотреть сообщение
Нет, там все нормально. Я не понимаю.. это самое примитивное, что можно вообще придумать, и оно не работает.
Вы бы выложили кусок файла (желательно версии 2007)
1958 вне форума  
 
Непрочитано 21.05.2018, 15:40
#3580
BithSachs


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


И для такой тривиальной задачи нужно писать 40 строк с vla функциями? (считая проверки)
Мне просто нужна стандартная команда, только, чтобы она сразу строила по опорному углу
Т.е. последовательность такая:
1) Команда: ПОВЕРНУТЬ
2) Базовая точка: указываем точку
3) Выбираем опцию: "Опорный угол"
4) Впечатываем "@", чтобы вернуть последнюю точку
5) Указываем вторую точку
Т.е. получается, мы поворачиваем объект как в ревите: сразу строим опорный отрезок и затем поворачиваем его.

Можно было бы просто использовать рекордер операций, но он не видит, что я впечатываю "@", к сожалению, поэтому нужно долбить по одной и той же точке два раза (да, раздражает).

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Вот интересно, какие дополнения установлены и в каком количестве?
3 штуки установлено, но я их убрал из автозагрузки, перезапустил и попробовал без них - ничего не изменилось.

Я думал, это вполне реализуемо command функциями, кто-то же в начале темы рекомендовал с них изучать автолисп.

Цитата:
Сообщение от 1958 Посмотреть сообщение
Вы бы выложили кусок файла (желательно версии 2007)
В других файлах все точно также. Я не совсем понимаю, как они могут влиять на это.
BithSachs вне форума  
Ответ
Вернуться   Форум 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