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

Вернуться   Форум 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.
Просмотров: 1972961
 
Непрочитано 20.01.2011, 21:46
#1281
Woron


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


Такое я пока еще не умею, только начал разбираться.
Скопирую для примера
Woron вне форума  
 
Непрочитано 20.01.2011, 23:18
#1282
Кулик Алексей aka kpblc
Moderator

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


Прежде чем копировать, советую все же определиться: пишется внешнее приложение, обращающееся к AutoCAD как к СОМ-серверу? Или что-то внутреннее?
И обязательно, обязательно! проверить работу кода.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.01.2011, 06:05
#1283
Woron


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


Внешнее. Я еще книгу почитаю, когда время будет.
А пока мне соманда хватит. (обезьянью работу не делать).
Спасибо за помощь.
(З.Ы. Я не конструктор, мне акад для "узкоспециализированных" операций нужен )
Woron вне форума  
 
Непрочитано 21.01.2011, 21:03
#1284
ashas-


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


Здраствуйте, уважаемые форумчане !

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

Заранее Благодарю!
ashas- вне форума  
 
Непрочитано 21.01.2011, 21:19
#1285
Кулик Алексей aka kpblc
Moderator

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


Можно, почему нет...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.01.2011, 22:28
#1286
ashas-


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


Буду очень признателен если подскажете как . Ну или хотя бы с помощью каких команд это можно воплотить в жизнь...
ashas- вне форума  
 
Непрочитано 21.01.2011, 23:42
#1287
Кулик Алексей aka kpblc
Moderator

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


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

(defun c:test (/ adoc circle spline end)
  (if (and (= (type (setq spline (vl-catch-all-apply
                                   (function
                                     (lambda ()
                                       (car (entsel "\nУкажите сплайн <Отмена> : "))
                                       ) ;_ end of lambda
                                     ) ;_ end of function
                                   ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'ename
              ) ;_ end of =
           (= (cdr (assoc 0 (entget spline))) "SPLINE")
           (= (type (setq circle (vl-catch-all-apply
                                   (function
                                     (lambda ()
                                       (car (entsel "\nУкажите окружность <Отмена> : "))
                                       ) ;_ end of lambda
                                     ) ;_ end of function
                                   ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'ename
              ) ;_ end of =
           (= (cdr (assoc 0 (entget circle))) "CIRCLE")
           ) ;_ end of and
    (progn
      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
      (vla-addline (vla-objectidtoobject
                     adoc
                     (vla-get-ownerid (setq spline (vlax-ename->vla-object spline)))
                     ) ;_ end of vla-ObjectIDToObject
                   (vlax-3d-point (setq end (vlax-curve-getendpoint spline)))
                   (vlax-3d-point (vlax-curve-getclosestpointto (vlax-ename->vla-object circle) end))
                   ) ;_ end of vla-AddLine
      (vla-endundomark adoc)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.01.2011, 08:45
#1288
ashas-


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


Видимо я не совсем корректно задал вопрос. (

Мне нужно что бы при рисовании сплайна, последняя его точка, в моем случае это 4-ая (именно точка сплайна) соединялась с заданной окружностью. Которую до этого мы закрепили за букву.
ashas- вне форума  
 
Непрочитано 22.01.2011, 08:47
#1289
Кулик Алексей aka kpblc
Moderator

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


Ничего не понял. Ну используй привязки, в чем трудность?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.01.2011, 09:24
#1290
ashas-


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


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

Я хочу сделать, свою мультивыноску. Стандартная меня не устраивает... У нее сплайн либо слева, либо снизу, либо сверху, либо справа и другого не дано. Смотрится по колхозному...

Была идея довести сплайн до центра окружности, а потом нужную часть обрезать... Но так и не смог придумать как это сделать, что бы не приходилось выбирать нужный конец сплайна.

Последний раз редактировалось ashas-, 22.01.2011 в 09:44.
ashas- вне форума  
 
Непрочитано 22.01.2011, 11:34
#1291
Кулик Алексей aka kpblc
Moderator

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


А просто свой вариант стиля почему не настроить?
Вложения
Тип файла: dwg
DWG 2007
DimStyles2007.dwg (67.7 Кб, 3012 просмотров)
Тип файла: dwg
DWG 2010
DimStyles2010.dwg (54.1 Кб, 3010 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.01.2011, 20:27
#1292
ashas-


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


Не знаю , раньше я не замечал настройки которая решает эту проблему )! Спасибо!
ashas- вне форума  
 
Непрочитано 24.01.2011, 21:31
#1293
ashas-


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


Возникла такая проблема, нужно что бы после нажатия ESC программа все равно закончила ее до конца.

Помогите пожалуйста кто может... И вообще это возможно?
ashas- вне форума  
 
Непрочитано 24.01.2011, 21:37
#1294
Кулик Алексей aka kpblc
Moderator

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


Какая программа? И потом, в этой теме как бы обучают лиспу. Помогают решить проблему в разделе "Программирование"...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.01.2011, 21:48
#1295
gomer

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
нужно что бы после нажатия ESC программа все равно закончила ее до конца.
А в чем тогда смысл эскейпа?
gomer вне форума  
 
Непрочитано 24.01.2011, 22:01
#1296
Кулик Алексей aka kpblc
Moderator

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


gomer, я этого не говорил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.01.2011, 22:23
#1297
ashas-


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


Прошу прощения, если разместил свой вопрос не в том разделе. Я вроде как тоже пытаюсь научиться поэтому решил, что здесь самое место. Программа все та же ), мультивыноска... Все таки стандартная мне все равно не устраивает ))). Я зациклил с помощью While, что бы постоянно ставилась мультивыноска, и когда все проставил, нужно что бы привязка и орто вкл. (до этого я их выкл.). Но они включается только когда я жму Enter. Было бы вообще здорово если бы при любом раскладе, привязка и орто включались обратно... Но не знаю как это сделать.
ashas- вне форума  
 
Непрочитано 24.01.2011, 22:32
#1298
Кулик Алексей aka kpblc
Moderator

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


Тогда показывай, каким кодом у тебя идет вставка выноски.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.01.2011, 18:02
#1299
ashas-


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


Вот код.
Код:
[Выделить все]
 (defun C:Poz ()
                (getvar "orthomode")
                 (setvar "orthomode" 0)
                  (getvar "osmode")
                   (setvar "osmode" 0) 
       (setq nomer_poz (getint "\Введите № позиции <1>: " ))
        (if (= nomer_poz nil) (setq nomer_poz 1))
         (command "_.CLAYER" "р")
(setq T1 (getpoint "\Укажите точку № позиции: "))
(while T1
         (command "_.circle" T1 "40")
          (setq T2 (getpoint))
           (command "_.circle" T2 "1.5")
            (command "_.hpname" "solid")
             (command "_.bhatch" "_s" (entlast) "" "") 
              (command "_.Spline" T2 pause pause "_per" pause "" "" "")
               (command "_.CLAYER" "о")
                (command "_.text" "стиль" "позиции" "Выравнивание" "СЦ" T1 "0" Nomer_poz )
                 (command "_.CLAYER" "р")
(setq T1 (getpoint "\Укажите точку: "))
         (setq nomer_poz (+ nomer_poz 1))
) ;while
         (setvar "orthomode" 1)
          (setvar "osmode" 1)
         (command "_.osnap" "нор,сер,пер,цен,ква,кас,пар,узе,кон")
)
Смастерил что мог )).
ashas- вне форума  
 
Непрочитано 26.01.2011, 08:24
#1300
Лиспер


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


А я из вредности предложу сделать другой размерный стиль Нет, ну кто мешает в качестве стрелки для выносок использовать Dot или Dot small?
Теперь по коду:
Зачем выполняются строки (getvar "osmode") и (getvar "orthomode"), если возвращаемые значения нигде не используются?
А если в ответ на приглашение "Введите № позиции <1> " я нажму Esc?
(command "_.clayer" - и дальше на каком языке опция? А если такого слоя нет? И, кстати, это меняет значение системной переменной, которую неплохо было бы вернуть обратно...
А если в ответ на приглашение "Укажите точку № позиции " я отвечу Esc (кстати, про какой там номер позиции-то разговор)?
Зачем вообще менять osmode, если вместо (command "_.circle" t1 40.) можно использовать (command "_.circle" "_none" t1 40.) - я не понимаю.
(command "_.hpname" <>) тоже меняет системные переменные AutoCAD. Обратно кто вертать все будет?
Почему в командах все опции на русском языке? А если у пользователя английский AutoCAD?
Почему принудительно возвращается orthomode в 1? А если на момент вызова не был установлен режим орто? Почему сначала osmode устанавливается в 1, а потом через неизвестно какие опции устанавливается новое значение (которое, кстати, тоже не факт что совпадает со стартовым)?
---
В общем и целом, я бы задумался о применении ToolPalettes - там можно попроще организовать, и все получится более целостное. Настроить только надо
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
Ответ
Вернуться   Форум 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