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

Вернуться   Форум 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.
Просмотров: 2048764
 
Непрочитано 31.01.2012, 12:47
#1761
La Persona

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


Цитата:
Сообщение от AlexSheep Посмотреть сообщение
AttachmentPoint - не координата, а способ выравнивания текста относительно координаты вставки (InsertionPoint)
Хм. Все становится сложнее...
La Persona вне форума  
 
Непрочитано 31.01.2012, 13:12
#1762
AlexSheep


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


Цитата:
Сообщение от La Persona Посмотреть сообщение
Хм. Все становится сложнее...
Хм. Почему? :-)
Какая цель-то?
AlexSheep вне форума  
 
Непрочитано 31.01.2012, 15:37
#1763
ShaggyDoc

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


Цитата:
а можно ли как-нибудь в этом лиспе сделать так, чтобы задание "направления копирования" и "участка копирования" производилось в одно действие?
Функцией getpoint от начальной точки pnt1. Запрос точки pnt2 наподобие "Направление и дистанция копирования". По углу от начальной до полученной точки (angle pnt1 pnt2) получите направление, а функцией (distance pnt1 pnt2) - расстояние.
ShaggyDoc вне форума  
 
Непрочитано 31.01.2012, 20:54
#1764
Никита Ремизов


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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Функцией getpoint от начальной точки pnt1. Запрос точки pnt2
пробовал, получается не так комфортно - нельзя задать угол и расстояние с клавиатуры, кроме того не попользуешься полярной привязкой и т.д. в идеале было бы чтобы механизм задания угла и расстояния совпадал с механизмом рисования отрезка, т.е. чтоб можно было как задать угол, длину(или что-то одно) с клавиатуры, так и "графически" мышью. надеюсь объяснил более или менее поянтно
Никита Ремизов вне форума  
 
Непрочитано 31.01.2012, 22:40
#1765
_mikka


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


Народ подскажите, как удалить колонку из таблицы автокад ?
_mikka вне форума  
 
Непрочитано 31.01.2012, 22:50
#1766
ShaggyDoc

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


Цитата:
нельзя задать угол и расстояние с клавиатуры
Как это нельзя, когда у всех льзя? Именно так моделируется построение отрезков, только надо опциями и проверками дополнять.

Код:
[Выделить все]
 Command: (setq pt1 (getpoint "Первая точка: "))
Первая точка:
Указали мышкой и получили результат
Код:
[Выделить все]
 (2240.0 970.0 0.0)
Запрос второй точки

Код:
[Выделить все]
 Command: (setq pt2 (getpoint pt1 "Вторая точка"))
Вторая точка
Вводим с клавиатуры расстояние и смещение
@300<0
и получаем результат:
Код:
[Выделить все]
 (2540.0 970.0 0.0)
Вычисляем угол:
Код:
[Выделить все]
 (setq ang (angle pt1 pt2))
0.0
Вычисляем расстояние:
Код:
[Выделить все]
 (setq dist (distance pt1 pt2))
300.0
"надеюсь объяснил более или менее поянтно"
ShaggyDoc вне форума  
 
Непрочитано 01.02.2012, 10:10
#1767
Дима_

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


Цитата:
Сообщение от _mikka Посмотреть сообщение
Народ подскажите, как удалить колонку из таблицы автокад ?
(vla-deletecolumns vla_представление_таблицы номер_столбца количество ) - а вобще лучше изучить как пользоваться справкой.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.02.2012, 12:48
#1768
Никита Ремизов


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


ShaggyDoc
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Как это нельзя, когда у всех льзя? Именно так моделируется построение отрезков, только надо опциями и проверками дополнять.
это все конечно здорово то, что вы написали, но мне нужно не это. я не хочу дополнительно вводить @ и <. Это не облегчает работу с начальным вариантом лиспа. Когда используется getpoint вводятся просто две отдельные точки, а хотелось бы иметь вот такую картинку: (см. приложение).
И чтобы между окошками ввода расстояния и угла можно было бы переключаться табом.
Кроме того в варианте с getpoint не воспользуешься привязками отслеживания.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 59
Размер:	17.0 Кб
ID:	74330  
Никита Ремизов вне форума  
 
Непрочитано 05.02.2012, 22:41
#1769
Frigate

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


Подскажите, пожалуйста, есть ли где наработки по программной замене определения ДИНблока (не вставки, а именно определения) другим определением. Имена блоков одинаковые. Они определены в разных файлах. Такое делает дизайнцентр (Ctrl+2), но хотелось бы иметь возможность программно все делать. Что упрощает алгоритм - библиотечный файл с образцовым вариантом блока известен (как и его местоположение).
А замена вставок блоков вроде рассматривалась на форуме. Надеюсь, найду.

Последний раз редактировалось Frigate, 06.02.2012 в 00:18.
Frigate вне форума  
 
Непрочитано 05.02.2012, 22:55
#1770
Дима_

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


То Frigate - а дин. блоки с параметром видимости в Вашем варианте не подходят?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 06.02.2012, 00:16
#1771
Frigate

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


Дима_,

можно и на "ты" )))

так я именно динблоки "старого образца" хочу менять программно на динблоки "нового".

Это нужно, когда хочешь использовать старые наработки, но динблоки уже "усовершенствованы". Каждый раз переопределять через Дизайн-центр - это не выход.
Frigate вне форума  
 
Непрочитано 07.02.2012, 22:28
#1772
pavelgeorgievich


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


Добрый вечер форумчане!!! может кто подскажет начинающему изучать лисп программирование. задался вопросом. можно-ли написать лисп на следующий набор действий, которые я выполняю при оформлении документации. я пользуюсь подшивками и при создании листов в подшивки произвожу множество манипуляций. хотелось бы облегчить себе жизнь. черчу в модели. листы компаную на вкладке лист. причем каждый лист я делаю отдельным файлом с ВЭ на файл, в котором находится чертеж на в пространстве модели. так вот хотелось бы, запустив всего одну команду получить автоматически следующий набор действий:
- выделить рамкой в модели пространство, которое я хотел бы разместить на листе в определенном масштабе
- далее выбрать шаблон для создания листа (открывается окно выбора шаблона) на который переносится ВЭ с писанной с определенным масштабом пространство листа
- далее присоединить этот файл к подшивке и сохранить его в нужном месте.
к сожалению код я не писал еще (проект только в мечтах). хотелось бы посоветоваться возможно ли такое осуществить при помощи лиспа и много ли потребуется времени для его написания начинающему? за советы заранее благодарю
pavelgeorgievich вне форума  
 
Непрочитано 09.02.2012, 19:27
#1773
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Для начала вот так:
Код:
[Выделить все]
 (defun c:layoutcreate  (/ x00 x01 x02 x03 x04 x05 x06 x07)
  (setvar 'ctab "Model")
  (while (not (and (setq x00 (getpoint "\nУкажите первый угол рамки..."))
                   (setq x01 (getcorner x00 "\nУкажите второй угол рамки или <отменить>..."))))
    (princ "\nПовторите..."))
  (setq x02 (getfiled "\nВыбор файла с шаблонами листов"
                      (vl-registry-read
                        (strcat (setq x02 (strcat (setq x02 (strcat "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R" (substr (getvar 'acadver) 1 4)))
                                                  "\\"
                                                  (vl-registry-read x02 "CurVer")
                                                  "\\Profiles"))
                                "\\"
                                (vl-registry-read x02)
                                "\\General")
                        "TemplatePath")
                      "dwt"
                      16))
  (vl-load-com)
  (and (vl-catch-all-error-p
         (setq x03 (vl-catch-all-apply
                     'vla-open
                     (list (setq x04 (vla-getinterfaceobject
                                       (vlax-get-acad-object)
                                       (strcat "ObjectDBX.AxDbDocument."
                                               (if (>= (setq x04 (substr (getvar 'acadver) 1 2)) "16")
                                                 x04
                                                 ""))))
                           x02))))
       (vl-catch-all-error-message x03))
  (setq x02 ""
        x03 (vla-item (vla-get-dictionaries x04) "ACAD_LAYOUT")
        x05 (list)
        x06 -1)
  (repeat (length
            (setq x05 (cdr
                        (reverse
                          (while (not (vl-catch-all-error-p (setq x07 (vl-catch-all-apply 'vla-item (list x03 (setq x06 (1+ x06)))))))
                            (setq x05 (append x05 (list (vla-get-name x07)))))))))
    (setq x02 (strcat x02 (car x05) " ")
          x05 (cdr x05)))
  (initget 1 x02)
  (setq x05 (getkword (strcat "\nШаблоны листов: " x02 "\nВведите имя шаблона листа для вставки: ")))
  (while (or (zerop (setq x06 (1- x06)))
             (not (eq x05 (vla-get-name (setq x07 (vla-item x03 x06)))))))
  (and (vl-catch-all-error-p
         (setq x03 (vl-catch-all-apply
                     'vla-copyfrom
                     (list (setq x02 (vla-add (vla-get-layouts (vla-get-activedocument (vla-get-application (vlax-get-acad-object))))
                                              x05))
                           x07))))
       (vl-catch-all-error-message x03))
  (vlax-release-object x04)
  (vla-getpapersize x02 'x03 'x04)
  (gc)
  (setvar 'ctab x05)
  (setview (list (cons 0 "VIEW")
                 (cons 2 "calc")
                 (cons 70 0)
                 (list 10 (/ x04 2) (/ x03 2))
                 (cons 40 x04)
                 (cons 41 100.0)
                 (list 11 0.0 0.0 1.0)
                 (list 12 0.0 0.0 0.0)
                 (cons 42 1.0)
                 (cons 43 0.0)
                 (cons 44 0.0)
                 (cons 50 0.0)
                 (cons 71 0)
                 (cons 72 1)
                 (list 110 0.0 0.0 0.0)
                 (list 111 1.0 0.0 0.0)
                 (list 112 0.0 1.0 0.0)
                 (cons 79 0)
                 (cons 146 0.0))
           0)
  (princ))
Совершенно непонятно, что нужно с масштабами, иначе говоря, что куда вписывается. И не очень понятно, что в шаблоне: только установки печати или еще какие-то примитивы.
ciril вне форума  
 
Непрочитано 09.02.2012, 19:46
#1774
ashas-


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


Здравия всем!
У меня следующий вопрос, где можно взять, узнать, вытащить, координаты последних точек??? Всю справку перелопатил... Например когда делаешь какой нибудь выбор объекта с помощью команды select, как после ее окончания достать координату точки того места куда ты тыкнул курсором? Конечная цель получить переменную с координатами. Единственный известный мне способ это с помощью стрелочек... Но где это храниться? (((
Заранее всех БлагоДарю.
ashas- вне форума  
 
Непрочитано 09.02.2012, 20:38
1 | #1775
Кулик Алексей aka kpblc
Moderator

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


(getvar "lastpoint") катит?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2012, 20:47
#1776
aso3


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


Здравствуйте.
захотел написать программу отрисовки вертикальных линий красного цвета, по завершению которой, чтобы цвет возвращался на тот который был до начала команды, но не получилось.
рисует одну красную а все остальные предыдущего.
Прошу помочь разобратся.
Вложения
Тип файла: lsp moi komandu1.LSP (146 байт, 41 просмотров)
aso3 вне форума  
 
Непрочитано 09.02.2012, 21:43
#1777
pavelgeorgievich


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


Цитата:
Сообщение от ciril Посмотреть сообщение
Совершенно непонятно, что нужно с масштабами, иначе говоря, что куда вписывается. И не очень понятно, что в шаблоне: только установки печати или еще какие-то примитивы.
спасибо, что откликнулись
по масштабам: необходимо, чтобы выделенная область появлялась в созданном ВЭ с масштабом, которыы мы задаем
в шаблоне лист с заданными параметрами печати. из примитивов если только рамка с основной надписью (которые уже храняться в шаблоне)
pavelgeorgievich вне форума  
 
Непрочитано 10.02.2012, 08:17
#1778
ashas-


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



Благодарю ). Катит.
Теперь бы любопытство свое успокоить, было бы вообще шикарно ... Когда выбираешь команду "отрезок" она предлогает указать первую точку, если в место этого нажимать стрелку вверх (на клавиатуре) то автокад дает несколько последних координат. Эти координаты можно где нибудь достать? Где они хранятся ? (((
ashas- вне форума  
 
Непрочитано 10.02.2012, 09:18
#1779
Кулик Алексей aka kpblc
Moderator

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


aso3, оно?
Код:
[Выделить все]
(defun c:пг (/ *error* sysvar)

  (defun *error* (msg)
    (if sysvar
      (setvar "cecolor" sysvar)
      ) ;_ end of if
    (princ msg)
    (princ)
    ) ;_ end of defun

  (setq sysvar (getvar "cecolor"))
  (setvar "cecolor" "1")
  (while (vl-cmdf "._xline" "_h" pause))
  (if sysvar
    (setvar "cecolor" sysvar)
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.02.2012, 13:37
#1780
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Цитата:
Сообщение от pavelgeorgievich Посмотреть сообщение
по масштабам: необходимо, чтобы выделенная область появлялась в созданном ВЭ с масштабом, которыы мы задаем
в шаблоне лист с заданными параметрами печати. из примитивов если только рамка с основной надписью (которые уже храняться в шаблоне)
Масштабы целочисленные? Проверка на превышения размеров ВЭ при заданном масштабе на выбранном шаблоне листа нужна? Примитивы с листа шаблона клонировать все или выборочно? На каком слое создавать ВЭ?

Последний раз редактировалось ciril, 10.02.2012 в 14:03.
ciril вне форума  
Ответ
Вернуться   Форум 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