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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp. Как изменить примитивы в динамическом массиве?

Autolisp. Как изменить примитивы в динамическом массиве?

Ответ
Поиск в этой теме
Непрочитано 13.03.2016, 00:06 #1
Autolisp. Как изменить примитивы в динамическом массиве?
mikls
 
Регистрация: 01.12.2013
Сообщений: 25

Возникла следующая проблема. Создаю динамический массив, содержащий текстовую строку с подчеркиванием (в качестве подчеркивания отрезок). Устанавливаю горизонтальный параметр и соответственно операцию растягивания для линии подчеркивания, а также вертикальный параметр и соответственно операцию массива для вертиканого копирования текстовых строк с подчеркиванием. С помощью ручки динамического блока создаю несколько одинаковых текстовых строчек с подчеркиванием. Подскажите пожалуйста:
1. Как поменять содержимое текстовых строк, так чтобы в каждой строке был свой текст?
2. Как с помощью операции растягивания, установить определенную длину линии подчеркивании для каждой строки (важно, чтобы это сделать используя операцию растягивания, то есть например используя функцию Change_din_sv (din_bl sv new_value) с сайта http://acad-prog.ru/izmenenie-dinamicheskogo-bloka/ с установкой значения new_value своё для каждой строки)?
Выбор соответствующих текстовых строк или линий подчеркивания выполняю с помощью nentsel.
Используя (subst (cons ...) (assoc ...) (entget (CAR (nentsel)))) могу поменять содержимое текстовой строки, но не получается обновить динамический блок.
Файл с динамическим блоком: Din_array.dwg

Просмотров: 2645
 
Непрочитано 13.03.2016, 00:22
#2
Кулик Алексей aka kpblc
Moderator

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


Я почему-то подозреваю, что надо вместо текста использовать атрибуты. Это раз. Второе: если все-таки надо менять текст, то придется менять его в описании блока (если я не ошибаюсь). А потом уже обновлять все вхождения этого блока.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.03.2016, 11:50
#3
mikls


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


Попробовал вставить в динамический массив атрибут и включил его в набор операции массива, но при растягивании ручки динамического блока атрибут почему-то не копируется: Din_array_s_atr.dwg
mikls вне форума  
 
Непрочитано 14.03.2016, 14:26
#4
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от mikls Посмотреть сообщение
Попробовал вставить в динамический массив атрибут и включил его в набор операции массива, но при растягивании ручки динамического блока атрибут почему-то не копируется: Din_array_s_atr.dwg
И не должен, т.к. каждый атрибут должен иметь уникальное имя (tag), по которому к нему можно обратиться. И как Вам удалось включить атрибут в набор операции массива - непонятно. В представленном блоке атрибут в этот набор не входит. При попытке добавить его принудительно - не выбирается, как и должно быть (по крайней мере, в 2010 версии)
Поэтому предлагаю один раз сделать блок с максимально мыслимым количеством атрибутов, и управлять их отображением с помощью параметра видимости. Заодно можно для каждой полки добавить операцию растягивания.

Последний раз редактировалось kp+, 14.03.2016 в 14:31.
kp+ вне форума  
 
Автор темы   Непрочитано 15.03.2016, 00:21
#5
mikls


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


Да, если добавлять атрибут через изменение набора объектов операции массив, то атрибут не выделяется. Просто я сначала удалил массив, а потом заново создал и атрибут выделился. Может быть попробовать считать все примитивы динамического массива, выполнить необходимые изменения содержимого, а затем используя entmake воссоздать копию обновленного не динамического блока, а динамический массив скрыть... Тогда вопрос, как перебрать все созданные примитивы в динамическом массиве?
mikls вне форума  
 
Непрочитано 15.03.2016, 10:14
#6
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от mikls Посмотреть сообщение
Может быть попробовать считать все примитивы динамического массива, выполнить необходимые изменения содержимого, а затем используя entmake воссоздать копию обновленного не динамического блока, а динамический массив скрыть... Тогда вопрос, как перебрать все созданные примитивы в динамическом массиве?
Месье знает толк...
Вообще, дин. блоки на то и придуманы, чтобы вносить в них изменения ЛЕГКО И БЕЗ ПРОГРАММИРОВАНИЯ. Чуть позже могу переделать приведенный Вами блок под решения, о которых я упоминал в #4 (без массива, с состояниями видимости).

Последний раз редактировалось kp+, 15.03.2016 в 10:19.
kp+ вне форума  
 
Автор темы   Непрочитано 15.03.2016, 23:35
#7
mikls


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


Да, будет интересно посмотреть решение этой задачи, особенно с возможностью для каждой полки добавлять операцию растягивания, спасибо...
mikls вне форума  
 
Непрочитано 20.03.2016, 18:03
#8
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Если еще интересно - вот тот вариант блока, о котором я говорил. Сделал только на три "полочки", но принцип наверняка ясен. Конечно, сделать блок на 20 полочек - еще та морока, но это ж только один разOfftop: ...и очень не хотелось бы, чтобы выноски с таким количеством полок реально понадобились
Вложения
Тип файла: dwg
DWG 2010
Din_array-visibilyty.dwg (75.3 Кб, 48 просмотров)
kp+ вне форума  
 
Автор темы   Непрочитано 21.03.2016, 00:51
#9
mikls


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


Спасибо, всё работает, буду использовать!

Спасибо, всё работает, буду использовать!

Последний раз редактировалось Кулик Алексей aka kpblc, 21.03.2016 в 01:04.
mikls вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp. Как изменить примитивы в динамическом массиве?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autolisp Acad2008 Каким образом заменить значение атрибута в динамическом блоке Zaghim LISP 12 14.03.2023 10:19
Как изменить цвет выбранных примитивов? Замена цвета объектов в autocad (с помощью autolisp). Halfback LISP 8 24.12.2018 20:52
Изменить block unit в динамическом блоке Juss_00 Динамические блоки 7 30.06.2010 02:56
Как выделить примитивы в AutoLISP? RastaMANNN LISP 3 10.06.2008 00:37