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

Вернуться   Форум 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.
Просмотров: 1972925
 
Непрочитано 22.03.2015, 18:16
#2541
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,048


Этот форум почитайте для начала)

Offtop:
Цитата:
Сообщение от Alexll Посмотреть сообщение
А вот когда значение написано отдельной текстовой строкой делать "ссылку" на эту строку у меня так и не получилось.
Если эта строка - например, мультитекст в чертеже.. То в полях выбираете тип "объект", а затем через дополнительную кнопку-саму строку. Там вывалится список свойств выбранного объекта.. выбрать там значение
Сергей812 вне форума  
 
Непрочитано 23.03.2015, 07:27
#2542
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 433


Такой вопрос возник. Знает ли кто, какой командой AutoCad выполняет редактирование текста мультивыноски?

----- добавлено через ~1 ч. -----
UPD. Разобрался. При выделенной мультивыноске _MLEADERCONTENTEDIT

----- добавлено через ~3 ч. -----
Спасайте, товарищи. Мозг сплавил. Как сделать так, чтобы после выполнения лиспа остались выделенные объекты?
RNB вне форума  
 
Непрочитано 23.03.2015, 10:33
1 | #2543
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,048


Цитата:
Сообщение от RNB Посмотреть сообщение
Как сделать так, чтобы после выполнения лиспа остались выделенные объекты?
Может так ?
Сергей812 вне форума  
 
Непрочитано 23.03.2015, 10:40
1 | #2544
Кулик Алексей aka kpblc
Moderator

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


Или через sssetfirst
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2015, 10:57
#2545
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 433


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Может так ?
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Или через sssetfirst
Получилось и через _pselect и через sssetfirst
Собственно, добился от мультивыноски, чтобы она работала как надо с заменой слоя. Выкладываю варик с _pselect.
С удовольствием выслушаю замечания
Код:
[Выделить все]
 (defun c:MYmleader ()
  (setvar "cmdecho" 0)
  (vl-cmdf "_-layer" "_make" "mleader" "")
  (if (= (type
	   (vl-catch-all-apply
	     (function
	       (lambda ()
		 (command "_mleader" pause pause "")
	       ) ;_ end of lambda
	     ) ;_ end of function
	   ) ;_ end of vl-catch-all-apply
	 ) ;_ end of type
	 'list
      ) ;_ end of =
    (princ)
    (princ)
  ) ;_ end of if
  (vl-cmdf "_layerp")
  (vl-cmdf "_pselect" "_l" "" "_mleadercontentedit")
  (setvar "cmdecho" 1)
  (princ)
) ;_ end of defun
RNB вне форума  
 
Непрочитано 23.03.2015, 11:45
#2546
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,048


копаться вглубь лень, но строчка 3 - почему не проверяете, существует ли уже данный слой? Проверяется одной строчкой вида (tblsearch "LAYER" %Имя слоя%) - если вернула nil, то тогда создаем. Иначе - просто делаем слой активным через "CLAYER". Естественно, перед этим значение нужно сохранить (setq lOldLayer (getvar "CLAYER")) и в строке 18 восстановить из этой переменной.
Сергей812 вне форума  
 
Непрочитано 23.03.2015, 11:58
#2547
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 433


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
копаться вглубь лень, но строчка 3 - почему не проверяете, существует ли уже данный слой? Проверяется одной строчкой вида (tblsearch "LAYER" %Имя слоя%) - если вернула nil, то тогда создаем. Иначе - просто делаем слой активным через "CLAYER". Естественно, перед этим значение нужно сохранить (setq lOldLayer (getvar "CLAYER")) и в строке 18 восстановить из этой переменной.
Дельное замечание, спасибо.
Но и в этом варианте, думаю, достаточно будет _layerp, без переменных
RNB вне форума  
 
Непрочитано 27.03.2015, 06:26
#2548
Alexll


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


Подскажите как из LISPа получить доступ к атрибутам блока. Создал блок, создал для него пару атрибутов, а стандартными способами(как у примитива) доступ к этим атрибутам получить не могу.
Alexll вне форума  
 
Непрочитано 27.03.2015, 08:33
#2549
Кулик Алексей aka kpblc
Moderator

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


Поискать: http://www.google.ru/cse?cx=partner-...%B0&gsc.page=1
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.03.2015, 11:02
#2550
Alexll


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


Прежде чем написать вопрос, я поискал. Большая часть тем ссылается на пару существующих программ lispа. Но дело в том, что те программы создавались для других целей, и для того что бы узнать атрибуты в некоторых случаях надо подключать до пяти функций.
Поэтому и задал такой вопрос, в надежде что кто то скажет что типа "....эта команда выдает атрибуты блока по его имени".
Alexll вне форума  
 
Непрочитано 27.03.2015, 11:16
#2551
Кулик Алексей aka kpblc
Moderator

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


Такой команды нет. Получить указатели на атрибуты конкретного вхождения блока возможно - и любой пример это показывает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.03.2015, 11:47
#2552
gomer

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Такой команды нет
как минимум properties
gomer вне форума  
 
Непрочитано 27.03.2015, 11:47
#2553
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,048


блок по сути -это контейнер, куда можно напихать примитивов, определений атрибутов и т.д. Так как структура данных никак не фиксирована - то получить и как-то работать с ними можно только последовательно.. начиная с верхнего уровня - вставки блоки..
Сергей812 вне форума  
 
Непрочитано 27.03.2015, 11:59
#2554
Кулик Алексей aka kpblc
Moderator

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


gomer, я отвечал на вопрос
Цитата:
Сообщение от Alexll Посмотреть сообщение
типа "....эта команда выдает атрибуты блока по его имени".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.03.2015, 15:43
#2555
Alexll


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


Итак, товарищи, почитал по форуму еще раз, теперь скажите прав я или нет.
получается что имя атрибута блока, всегда следует за блоком. И зная имя блока, с помощью команды entnext мы можем узнать имя атрибута. А уж из имени атрибута достать все его данные не сложно.
Вопрос в том, всегда ли соблюдается это условие, что за именем блока следует имя атрибута? и не бывает ли это каким то образом перемешано?
Если этот способ получения атрибутов блока надежный, то он меня устраивает.
Alexll вне форума  
 
Непрочитано 27.03.2015, 15:58
#2556
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,048


подсказка - смотрите DXF коды для INSERT, в частности - код 66.
Сергей812 вне форума  
 
Непрочитано 27.03.2015, 16:05
#2557
Alexll


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


Ну это я понял. Если там 1, то далее идут еще какие то примитивы. Или вы что то другое имеете ввиду?
Alexll вне форума  
 
Непрочитано 27.03.2015, 16:23
#2558
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,048


Цитата:
Сообщение от Alexll Посмотреть сообщение
Ну это я понял. Если там 1, то далее идут еще какие то примитивы.
Дальше идут не какие то примитивы - а атрибуты)

Цитата:
Variable attributes-follow flag (optional; default = 0); if the value of attributes-follow flag is 1, a series of attribute entities is expected to follow the insert, terminated by a seqend entity.
Сергей812 вне форума  
 
Непрочитано 02.04.2015, 06:59
#2559
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Помогите идеей пожалуйста. Есть чертеж трубы, создаваемой спец прогой, на нам надо найти два одинаковых числа и одно из них заменить. в общем случае все работает, за одним исключением.
1.нахожу в таблице отметку в поле Н8 (0 TEXT)
2.нахожу оба текста с этим значением (ssget "_X" (list (cons 0 "TEXT") (cons 1 val_h8))) ;;тут val_h8 - текстовая строка
3.изменяю тот, что не в таблице (их однозначно два и проверяю по точке вставки. например программа выдает 125,24, а надо Н8=125,24)
Есть один момент, когда это не срабатывает: когда отметка 125,20. В таблице она пишется как есть с двумя знаками, а на разрезе, где надо добавить "Н8=" хвостовые ноли подавляются и соответственно "125,20" /= "125,2"
Как еще можно реализовать подобный поиск?
з.ы. (rtos x 2 2) так же выдает без подавления - проверил сразу... хоть впору сначала все числа обработать, что бы везде до 2х знаков было.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 02.04.2015, 08:51
#2560
Кулик Алексей aka kpblc
Moderator

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


Используй нечто типа (strcat "H8=" <Текстовая строка>)
Здесь <Текстовая строка> - прямо тот текст, который получаешь откуда надо.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум 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