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

Вернуться   Форум 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.
Просмотров: 2048387
 
Непрочитано 13.01.2012, 15:59
#1741
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Доброго всем времени суток! Подскажите, пожалуйста, почему значения num_cu и num_ou остаются пустыми? Код DCL и LISP приведены ниже.
Форма благополучно вызывается, забиваю значения, но переменные остаются пустыми..
Код:
[Выделить все]
 (defun num-dialog-handler( / dcl_id num_ou num_cu)
  (if (< (setq dcl_id (load_dialog "C:\\Documents and Settings\\user\\Ìîè äîêóìåíòû\\Automation LISP\\dialog_num.dcl")) 0) (exit))
  (if (not (new_dialog "dialog_num" dcl_id)) (exit))
  (setq num_cu (atoi (get_tile "kNum_cu")))
  (setq num_ou (atoi (get_tile "kNum_ou")))
  (setq num_list (list num_cu num_ou))
  (start_dialog)
  (unload_dialog dcl_id)
)
Код:
[Выделить все]
 
dialog_num: dialog {label="Êîëè÷åñòâî êðàíîâûõ óçëîâ è îòêðûòûõ ó÷àñòêîâ";
:edit_box{label="Êîëè÷åñòâî êðàíîâûõ óçëîâ"; key="kNum_cu";
	edit_width=12; edit_limit=24;}
:edit_box{label="Êîëè÷åñòâî îòêðûòûõ ó÷àñòêîâ"; key="kNum_ou";
	edit_width=12; edit_limit=24;}
ok_button;
}
La Persona вне форума  
 
Непрочитано 13.01.2012, 16:07
#1742
Дима_

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


Вас порядок действий не смущает?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.01.2012, 16:08
#1743
Кулик Алексей aka kpblc
Moderator

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


А в каком месте проверяешь? Это ж у тебя локальные переменные!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.01.2012, 17:08
#1744
gomer

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


Цитата:
Сообщение от La Persona Посмотреть сообщение
почему значения num_cu и num_ou остаются пустыми?
про action_tile не знал, да еще и забыл
gomer вне форума  
 
Непрочитано 13.01.2012, 19:48
#1745
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Вас порядок действий не смущает?
А должен? О каком порядке идет речь?
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А в каком месте проверяешь? Это ж у тебя локальные переменные!
По окну контрольных значений.
Цитата:
Сообщение от gomer Посмотреть сообщение
про action_tile не знал, да еще и забыл
Разве (setq num_cu (get_tile "kNum_cu") не равнозначно (action_tile "kNum_cu" "(setq num_cu $value)")??
La Persona вне форума  
 
Непрочитано 13.01.2012, 21:20
#1746
gomer

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


Цитата:
Сообщение от La Persona Посмотреть сообщение
Разве (setq num_cu (get_tile "kNum_cu") не равнозначно (action_tile "kNum_cu" "(setq num_cu $value)")??
отнюдь, более того

Цитата:
Сообщение от La Persona Посмотреть сообщение
(action_tile "kNum_cu" "(setq num_cu $value)")
это вообще моветон

в простых диалогах есть только два элемента, достойные action_tile - это кнопки accept и cancel (которой у вас нет, а она нужна, хотя бы потому, что пользователь должен иметь возможность отменить команду)
gomer вне форума  
 
Непрочитано 13.01.2012, 22:01
#1747
Кулик Алексей aka kpblc
Moderator

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


Offtop: Что значит дурная привычка использовать callback-функцию целиком на диалог!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.01.2012, 22:18
#1748
gomer

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


ООП, каг бэ
gomer вне форума  
 
Непрочитано 13.01.2012, 23:36
#1749
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Цитата:
Сообщение от gomer Посмотреть сообщение
ООП, каг бэ
Offtop: что наподобие )) .NETом все мозги уже замылились
Так что все-таки использовать: get_tile или action_tile? Если не затруднит - набросайте код, как примерно оно всё должно выглядеть.. Моё творения отказывается работать должным образом
La Persona вне форума  
 
Непрочитано 13.01.2012, 23:58
1 | #1750
gomer

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


La Persona, причем тут нет, вы должны понять что вообще происходит, тогда код сам напишется
по порядку грузим диалог, из файла назначаем кнопкам их действия, запускаем диалог, ждем выхода, отлавливая результат, выгружаем диалог
второй пункт подробнее: чтоб кнопка accept отловила значение полей ввода, ей нужно задать действие - отловить значения таких-то полей. Если перевести вышесказанное с русского на лисп, то можно увидеть, что и то и то нужно
gomer вне форума  
 
Непрочитано 14.01.2012, 00:29
#1751
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Цитата:
Сообщение от gomer Посмотреть сообщение
по порядку грузим диалог, из файла назначаем кнопкам их действия, запускаем диалог, ждем выхода, отлавливая результат, выгружаем диалог
второй пункт подробнее: чтоб кнопка accept отловила значение полей ввода, ей нужно задать действие - отловить значения таких-то полей. Если перевести вышесказанное с русского на лисп, то можно увидеть, что и то и то нужно
Благодарствую, подсказка помогла )
В итоге родилось это:

Код:
[Выделить все]
 (defun num-dialog-handler (/ dcl_id num_ou num_cu)
  (if (< (setq dcl_id (load_dialog "C:\\WK\\dialog_num.dcl")) 0)
    (exit)
  )
  (if (not (new_dialog "dialog_num" dcl_id))
    (exit)
  )
  (action_tile
    "accept"
    (strcat
      "(setq num_cu (get_tile \"kNum_cu\"))"
      "(setq num_ou (get_tile \"kNum_ou\"))"
      "(done_dialog)"
    )
  )
  (start_dialog)
  (unload_dialog dcl_id)
  (setq num_list (list num_cu num_ou))
)
La Persona вне форума  
 
Непрочитано 14.01.2012, 05:36
#1752
gomer

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


Цитата:
Сообщение от La Persona Посмотреть сообщение
В итоге родилось это:
очень мило, а теперь попробуйте избавиться от абсолютного пути в имени файла диалога, одного setq, добавить кнопку отмена и ее обработчик (см. внимательно функции start_dialog и done_dialog) и наконец избавиться от num_list
gomer вне форума  
 
Непрочитано 14.01.2012, 06:17
#1753
ShaggyDoc

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


Цитата:
очень мило, а теперь попробуйте ....
...подумать, что будет гадать пользователь, если условия if будут выполняться. Функция будет молча не работать. Надо сообщения давать.
ShaggyDoc вне форума  
 
Непрочитано 15.01.2012, 13:13
#1754
dirge


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


Всем привет! Ребят, есть такая задача. Опишу приведённое вложение в письме. Нужно соединить полилинии (geo_base и geo_extend), так чтобы можно было выбирать направление соединения, иными словами щёлкнули по базовой геометрии потом по той линии которую хотим удлинить и ещё раз либо справа от "мнимой" точки пересечения либо слева и вся геометрия повторилась по тем же координатам (синяя или зелёная линия). Вроде бы казалось ничего сложного, но есть момент который я не могу понять как решить. Вся засада в том, что заранее неизвестно в какой последовательности идут номера точек объектов, а ведь они могут идти и в обратном направлении, а это тогда получится совсем другая геометрия.
Миниатюры
Нажмите на изображение для увеличения
Название: Untitled-1.jpg
Просмотров: 78
Размер:	44.9 Кб
ID:	72874  
dirge вне форума  
 
Непрочитано 15.01.2012, 23:14
#1755
Дима_

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


Лично я ничего не понял - какие линии с чем соединять - попробуйте по шагам расписать - как должен получается результат (там может и сами ответ найдете).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 16.01.2012, 19:34
#1756
VVA

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


Цитата:
Сообщение от dirge Посмотреть сообщение
Вся засада в том, что заранее неизвестно в какой последовательности идут номера точек объектов, а ведь они могут идти и в обратном направлении
1. Можно узнать "в каком направлении" идет полилиния см. ф-цию lwcl
2. Принудительно преобразовать все полилинии к одному виду (ВСЕ по часовой или ВСЕ ПРОТИВ ЧАСОВОЙ). см. здесь или здесь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.01.2012, 20:44
#1757
dirge


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


Цитата:
Сообщение от VVA Посмотреть сообщение
1. Можно узнать "в каком направлении" идет полилиния см. ф-цию lwcl
2. Принудительно преобразовать все полилинии к одному виду (ВСЕ по часовой или ВСЕ ПРОТИВ ЧАСОВОЙ). см. здесь или здесь
Большое спасибо за ссылки, направили на нужное русло меня.
dirge вне форума  
 
Непрочитано 31.01.2012, 11:59
#1758
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Здравствуйте! Подскажите, пожалуйста, как узнать координаты AttachmentPoint объекта MText?
Код:
[Выделить все]
     (setq mtext_obj (vla-AddMText
	    (vla-get-ModelSpace
	      (vla-get-ActiveDocument (vlax-get-acad-object))
	    ) ;_ end of vla-get-ModelSpace
	    (vlax-3D-point pt11) 20
	      (strcat
		"{\\A1;"
		(itoa k)
		"\\P"
		"замер"
		" }"
	      )
	  ) ;_ end of vla-AddMText
    ) ;_ end of setq
    (vla-put-AttachmentPoint mtext_obj acAttachmentPointBottomCenter)
La Persona вне форума  
 
Непрочитано 31.01.2012, 12:34
#1759
Никита Ремизов


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


Здравствуйте! а можно ли как-нибудь в этом лиспе сделать так, чтобы задание "направления копирования" и "участка копирования" производилось в одно действие?
Код:
[Выделить все]
(defun C:MASSIV ()
(setvar "cmdecho" 0)
(setvar "osnapcoord" 1)
(prompt "\nВыберите объекты: ")
(setq old_error *error*)
(setq *error* ERR_)
(setq
     LL        (ssget)
     W         (entget (ssname LL 0))
     TN        (cdr (assoc 10 W))
     S         (getreal "\n Шаг копирования: ")
);setq
(setq
     UG        (getangle "\n Направление копирования: <горизонтально> ")
);
(if (= UG nil)
(setq UG 0)
);if
(setq
     L         (getdist "\n Участок копирования: ")     
     Q         (fix (/ L S))
     TK        (polar TN UG S)
     N         2)
(command "_.undo" "_be")
(repeat Q
(command "_.copy" LL "" TN TK)
(setq
      S1       (* S N)
      TK       (polar TN UG S1)
      N        (+ 1 N))
);repeat
(command "_.undo" "_end") 
(setq *error* old_error)
);setq
(defun ERR_ (msg)
(command "_.undo" "_end")
(setq *error* old_error)
(princ)
)efun ERR

Последний раз редактировалось Никита Ремизов, 31.01.2012 в 13:23.
Никита Ремизов вне форума  
 
Непрочитано 31.01.2012, 12:36
#1760
AlexSheep


 
Регистрация: 08.09.2010
Москва
Сообщений: 28


Цитата:
Сообщение от La Persona Посмотреть сообщение
Подскажите, пожалуйста, как узнать координаты AttachmentPoint объекта MText?
AttachmentPoint - не координата, а способ выравнивания текста относительно координаты вставки (InsertionPoint)
AlexSheep вне форума  
Ответ
Вернуться   Форум 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