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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,970

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 1551699
 
Непрочитано 03.08.2019, 08:42
#3761
superkot007


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


skkkk, благодарю!
Код:
[Выделить все]
 (open (getfiled "Выбрать файл для сохранения данных" (strcat (getvar "DWGPREFIX")(vl-filename-base (getvar "DWGNAME"))) "txt" 1) "a")
В такой конструкции не будет проблем?
Технически, в составе лиспа, работает корректно.
superkot007 вне форума  
 
Непрочитано 03.08.2019, 09:04
#3762
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,260


Цитата:
Сообщение от superkot007 Посмотреть сообщение
В такой конструкции не будет проблем?
Не должно быть, вроде.
skkkk на форуме  
 
Непрочитано 04.08.2019, 21:30
#3763
Кулик Алексей aka kpblc
Moderator

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


Ну, не будет - если только в ответ на getfiled не нажать Esc
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2019, 17:58
#3764
Сет


 
Регистрация: 19.11.2014
Сообщений: 1,352


Подскажите, как программно изменить высоту рамки и установить выравнивание мультитекста?
Сет вне форума  
 
Непрочитано 13.08.2019, 18:51
#3765
Кулик Алексей aka kpblc
Moderator

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


Выравнивание: либо менять свойство AttachmentPoint, либо менять 71 группу в DXF. А что за "высота рамки"? Если блок - то соответствующие масштабы.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2019, 22:40
#3766
Сет


 
Регистрация: 19.11.2014
Сообщений: 1,352


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что за "высота рамки"?
Мультитекст же вписывается в рамку. Мне нужно программно задать ее ширину, высоту и выравнивание. С шириной все просто, с выравниванием ты подсказал, а с высотой пока вопрос.
Сет вне форума  
 
Непрочитано 13.08.2019, 23:19
#3767
Сергей812


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


Цитата:
Сообщение от Сет Посмотреть сообщение
а с высотой пока вопрос.
вроде 45 группа задает отступ рамки от границы самого текста. А сама рамка никак не настраивается - видима, она рассматривается как контейнер для мультитекста, а не как отдельный элемент.
Сергей812 вне форума  
 
Непрочитано 14.08.2019, 15:40
#3768
Сет


 
Регистрация: 19.11.2014
Сообщений: 1,352


Тогда как бы решить вот такую задачу. Смотри поясняющую картинку. Нужно программно задать ширину, высоту, содержимое и выравнивание мультитекста. В случае на картинке пользователь задает ширину зеленой рамки, высоту этой рамки, текст, указывает точку вставки (красный квадратик) и программно рисуется мультитекст по заданным параметрам. Прототип функции такой:

Код:
[Выделить все]
 
(vl-load-com)
(setq acad_application (vlax-get-acad-object))
(setq active_document (vla-get-ActiveDocument acad_application))
(setq model_space (vla-get-ModelSpace active_document))

(defun c:my_mtext (/) 
(setq width (atoi (getstring T "Введите ширину текста:")))
(setq height (atoi (getstring T "Введите высоту текста:"))) 
(setq text (atoi (getstring T "Введите текст:")))
(setq mtext (vla-AddMText model_space (vlax-3D-point (getpoint "\nУкажите точку вставки:")) width text))
) 
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 10
Размер:	1.6 Кб
ID:	216837  
Сет вне форума  
 
Непрочитано 18.08.2019, 18:58
#3769
jeka_me


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


Добрый день.
Прошу написать команду, к примеру "deltemp", при вызове которой, удалялось бы все с конкретного слоя "Temp". И пояснить используемые команды в программе.
Спасибо.
jeka_me вне форума  
 
Непрочитано 18.08.2019, 20:34
#3770
Кулик Алексей aka kpblc
Moderator

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


Все просто:
1. Проверить наличие слоя
2. Если слой есть, то разблокировать и разморозить
3. Пройтись по всем блокам (включая модель и пространства листов) и удалить в них примитивы, лежащие на слое

Скорее всего, будут проблемы с атрибутами и описаниями атрибутов, но это уже отдельная песня.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2019, 22:54
#3771
jeka_me


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


Благодарю за быстрый ответ, но есть пару нюансов:
1. Алгоритм действительно не сложный и понятный, но с реализацией у меня проблема, хочу воспользоваться: "Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)".
2. Из блоков и листов удалять не надо.
jeka_me вне форума  
 
Непрочитано 19.08.2019, 00:13
1 | #3772
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,260


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Все просто
Вспомнился Эйнштейн со своим "Вы думаете, что всё так просто? Все просто, но совсем не так!"
jeka_me, "научите" и "напишите" - это ведь два разных слова с далеким друг от друга смыслом. Ход хитрый, но кажется, его уже раскусили
Знаю, знаю, вместо того, чтобы ворчать тут, предложил бы что-то по делу.
Рекомендую попробовать из готового - тема на форуме "Подготовка подосновы". Там есть команда, которая удаляет слой вместе со всеми объектами на нем.
Правда, судя по описанию задачи, сам слой удалять не нужно. Тогда можно вот так (без проверки на блокировку/заморозку слоя, без удаления в блоках и на листах - удаляет в текущем пространстве, т.е. в данном случае - в модели):
Код:
[Выделить все]
 (defun C:deltemp ( / ss)
	(setq ss (ssget "_X" '((8 . "Temp"))))
	(if ss
		(vl-cmdf "_.ERASE" ss "")
		(princ "/nОбъекты не найдены")
	)
	(princ)
)
Код не проверял, но надеюсь, нигде не напортачил, так как особо и негде тут напортачить. В свете последних новостей не уверен, что будет работать на самых новых автокадах. Хотя должен бы.
skkkk на форуме  
 
Непрочитано 19.08.2019, 00:42
#3773
jeka_me


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


Всего 8 строк, а моей признательности нет границ)
Все работает именно так как я ожидал.
Хорошая мотивация для саморазвития, еще раз выражаю благодарность.
jeka_me вне форума  
 
Непрочитано 19.08.2019, 08:15
1 | #3774
Кулик Алексей aka kpblc
Moderator

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


А есть еще команда _.laydel, которая заодно и слой сносит...
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Расчет зданий и сооружений в сейсмоопасных районах
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 269 22.07.2019 17:19
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46