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

Вернуться   Форум 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.
Просмотров: 1972505
 
Непрочитано 10.02.2014, 15:15
#2101
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Тогда какие варианты для защиты от удаления из чертежа (блока или набора примитивов, группы)? Как я понимаю нужно вести счетчик количества листов в чертеже, и примитивы надо както обозначить что это лист и по отдельности их удалять не надо. Можно еще анонимные блоки попробовать... но не хочется перемудрить...
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 10.02.2014, 15:17
#2102
Кулик Алексей aka kpblc
Moderator

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


Делай MINSERT-блок (вопросы защиты чертежей на форуме были).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.02.2014, 15:28
#2103
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


тут под "защитой" понимается не удалить половину листа например. Т.е. чтобы при добавлении например листа программой точно было посчитано что в чертеже 6 листов а не 5,5 А за PICKSTYLE спасибо - учтем. Я уже проверил "блок" из группы на рядовом пользователе - по частям у него удалить не получилось.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 10.02.2014, 15:59
#2104
Кулик Алексей aka kpblc
Moderator

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


Я говорю - делаешь MINSERT-блок. Можно даже анонимный. Вставляешь его, меняешь атрибуты. Потом при вставке следующего получаешь все вхождения соответствующих MINSERT-блоков, считываешь оттуда данные.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.02.2014, 18:10
#2105
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


уже тренируюсь создавать группу... но наверно блоки вставлять было бы попроще Но мы же не ищем легких путей.
Пока план такой:
0. делаем кнопку по нажатию на которой выполняется программа по вставке листа в пространство модели
1. Рисую рамку vl-cmdf
2. Заношу нарисованные объекты в группу, присваиваю группе имя, описание.
это уже реализовал
3. при следующем нажатии (как и при первом) проверяем сколько групп с именем (шаблон) уже вставлено.
4. По описанию прибавляем к координатам поправки и вставляем следующие листы
5. создаем видовой экран в пространстве листа и по поправкам координат даем ему размеры + настраиваем лист - это для меня самое сложное наверно будет...
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 10.02.2014, 18:28
#2106
Кулик Алексей aka kpblc
Moderator

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


Если хочется совсем заморочиться, то вот еще вариант:
  1. Создается анонимный блок, содержащий всю рамку. В описание блока (например, в словарь) засовываются данные, позволяющие определить - что это за блок и что он требует дополнительной обработки
  2. Блок вставляется как MINSERT с количеством строк и столбцов равным 1
  3. Проверяются все вхождения MINSERT-блоков (точнее, анонимных блоков), в описании которых есть данные, определенные в п.1.
  4. С блоков считываются данные о номерах листов и общем количестве листов.
  5. Вызывается диалог, позволяющий заполнить атрибуты этого самого блока
Все это на уровне идеи, поскольку я такое не буду реализовывать. И не буду я этим заниматься по единственной причине: программа, может, и будет работать, да только пользоваться ею никто не будет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2014, 09:10
#2107
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Все понял кроме атрибутов. А зачем они? Какбы штамп я не планирую в рамку. А дополнительную информацию в атрибутах хранить мне кажется незачем.
В любом случае доделаю - выложу исходник посмеятся
Программа действительно специфичная... врядли кому пригодится, но я точно уверен, что в наш отдел она очень нужна. У нас 90% чертежей это формат А3. Другие форматы выполняются в специальственных программах где создание видового экрана этого листа не требуется. А те что делаем чертежи могут содержать от 1 до 150 листов А3 в одном чертеже. Создавать руками для каждого листа даже копируя видовой экран это долго. А тут и потренеруюсь и польза будет


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

Код:
[Выделить все]
 (vl-cmdf "_.rectang" "Ширина" "1" "" '(20 5) '(415 292))
(vl-cmdf "_.rectang" "Ширина" "0" "" '(0 0)  '(420 297))
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 11.02.2014 в 09:46.
Shoorup вне форума  
 
Непрочитано 11.02.2014, 10:15
#2108
Дима_

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


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Объясните мне пожалуйста вот такую штуку. Почему если поменять первую строку со второй получим разные результаты?
Ищи по слову привязки...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 11.02.2014, 10:31
#2109
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/2013/12/19/comman...utre-troubles/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2014, 10:35
#2110
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Дима_, Кулик Алексей aka kpblc, спасибо! Граблями по лбу получил
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 11.02.2014, 10:50
#2111
Кулик Алексей aka kpblc
Moderator

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


Касаемо слова "Ширина" в команде: http://autolisp.ru/2010/03/04/localization/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2014, 14:37
#2112
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Кулик Алексей aka kpblc, я начал тему перечитывать потиху. Правило №1,2 VVA уже учу Но я и так про них знал, просто пользуюсь только локализованым AutoCADом да и программка не планируется за пределы.
Лучше поясните мне плиз как работает osnapcoord на примере. Справку почитал и по форуму тоже полистал. Эту переменную тоже сохраняют зачемто, но я не пойму даже как она работает и на что может повлиять при выполнении lisp.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 14.02.2014, 16:52
#2113
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992


Уважаемые товарищи программисты! Помогите подправить программку, пожалуйста! Самому ума не хватило

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

Код:
[Выделить все]
 (defun c:widedit (/ aDoc x attent uwd option tag blk bn)
;;;	pBe 11JN2013	;;;
 (vl-load-com)
 (setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object))) 
 (if (and (setq x (car (nentsel "\nSelect attribute: ")))
 	  (eq "ATTRIB" (cdr (assoc 0 (entget x))))
	  (setq attent (vlax-ename->vla-object x))
          (princ (strcat "\nCurrent Width is <" (rtos (vla-get-scalefactor attent) 2)"> "))
    	  (setq uwd (getreal "\nEnter new width:  "))) 
  (progn	          
	(initget "Y N")
	(setq option (cond
	               ((getkword "\nApply width to all Attribute of the same block? [Yes/no] <N>: "))
                       ( "N" ))) 
	(if (eq option "N")
          	(vla-put-scalefactor attent uwd)
                (progn
                  (setq tag (vla-get-tagstring attent))
                  (setq Blk (vla-ObjectIdToObject aDoc
					(vla-get-OwnerId  attent))
                        Bn  (vla-get-effectivename blk))
                  (vlax-for itm (vla-item (vla-get-blocks aDoc) bn)
                    	(if (and (eq (vla-get-objectname itm) "AcDbAttributeDefinition")
                    		 (eq (vla-get-tagstring itm) tag))
                          		(vla-put-scalefactor itm uwd)))
		(vlax-for layout (vla-get-layouts aDoc)
		    (vlax-for i (vla-get-block layout)
		      (if (and
		            (eq (vla-get-objectname i) "AcDbBlockReference")
		            (eq (Vla-get-hasAttributes i) :Vlax-true)
		            (eq (vla-get-effectivename i) bn)
		          )
		        (foreach itm  (vlax-invoke i 'GetAttributes)
		                  (if (eq (vla-get-tagstring itm) tag)
		                      (vla-put-scalefactor itm uwd))
		          	)
		          )
		      	)
		      )
                  )
          )
    )
   (vl-some
         '(lambda (j) (if (null (eval (car j))) (princ (cadr j))
              )) 
         '((x "\n<<None Selected>>")
           (attent "\n<<Selected object not an Attribute>>")
           (uwd "\n<<No Width value>>"))
         )
   )
  (princ)

)
Nike вне форума  
 
Непрочитано 20.02.2014, 13:51
#2114
mankurt

геодезист
 
Регистрация: 25.10.2011
Москва
Сообщений: 45


Подскажите, существует ли способ удалить из selection set, содержащего vla- объекты, какой-либо элемент "начисто", чтобы он позднее не нашелся при обращении к этому selection set?
Я пробовал удалять методом vla-delete, но во модели остается упоминание об объекте. Далее в процессе циклического перебора программа натыкается на удаленный элемент и возвращает ошибку.
Проверить на vlax-erased-p не удается, так как указатель на удаленный элемент selection set нельзя получить.
mankurt вне форума  
 
Непрочитано 20.02.2014, 13:54
#2115
Кулик Алексей aka kpblc
Moderator

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


Ничего не понял. Объект физически удаляется или его надо просто "выкинуть" из результата, возвращаемого ssget?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.02.2014, 14:21
#2116
mankurt

геодезист
 
Регистрация: 25.10.2011
Москва
Сообщений: 45


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ничего не понял. Объект физически удаляется или его надо просто "выкинуть" из результата, возвращаемого ssget?
Элементы selection set (бергштрихи-полилинии) проверяются, содержатся ли они внутри замкнутых контуров строений, если содержатся, то удаляются из чертежа физически.
Надо сделать так, чтобы при последующей проверке для других контуров, удаленный бергштрих "не отсвечивал", т.к. в selection set он все равно присутствует.

Selection set формируется методом
(vla-Select berg_ss acSelectionSetAll nil nil filter_code filter_value)
mankurt вне форума  
 
Непрочитано 20.02.2014, 14:26
1 | #2117
Дима_

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


Цитата:
Сообщение от mankurt Посмотреть сообщение
Далее в процессе циклического перебора программа натыкается на удаленный элемент и возвращает ошибку.
Скорее это ошибка в алгоритме - объект физически удалили, а ссылку на него оставили - вот и ругается. Из под автолиспа, я предпочитаю не работать напрямую с selectionset а перегнать в список (и если надо - потом обратно), хоть в принципе функция для удаления элемента из коллекции есть - ssdel.
p/s/ проверяйте последовательность команд - скорее всего Вы "попались" на ловушки переменных значений.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.02.2014, 14:30
1 | #2118
Кулик Алексей aka kpblc
Moderator

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


Кажется, так:
Код:
[Выделить все]
  (vlax-for item berg_ss
    (if (_is-ent-inside bound item)
      (vla-erase item)
      ) ;_ end of if
    )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.02.2014, 13:25
#2119
Алена92


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


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

Начала (учить '(lisp)), уже не терпиться написать программы, которые сократят количество кликов в разы на моей работе: возник вопрос.

Восстанавливаю 3D из 2D чертежей.
У меня есть штриховка, есть кнопка с коммандой восстановить контур штриховки _.HATCHGENERATEBOUNDARY
Иногда контур приходится редактировать.
Из полученного контура я кнопочкой создаю область (клик по кнопке создать область, затем выбираю контур)
После этого иногда бывает нужно преобразовывать область в поверхность, чтобы можно было обрезать лишнее.
Потом вытягиваю, вращаю и пр.

Собственно вопрос - как передавать полученный из штриховки контур функции автокада по созданию области? А затем область передавать функции по преобразованию в поверхность?

использую (vl-cmdf ...)

Спасибо за помощь!
Алена92 вне форума  
 
Непрочитано 27.02.2014, 13:34
#2120
Дима_

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


Цитата:
Сообщение от Алена92 Посмотреть сообщение
использую (vl-cmdf ...)
это зря он в понимании простой, но работать с ним сложно (геморно). По основному воросу - попробуй (entlast)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум 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