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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Редактирование блока, используя значение его атрибутов

Редактирование блока, используя значение его атрибутов

Ответ
Поиск в этой теме
Непрочитано 25.12.2008, 17:05 #1
Редактирование блока, используя значение его атрибутов
Mazai
 
Москва
Регистрация: 04.04.2008
Сообщений: 97

Здравствуйте.
Задумался над тем, что бы можно было автоматически изменять элементы блока. То есть скажем есть блок=линия, у блока есть атрибут - длина линии. Хочу добиться того, что бы указывая в атрибуте значение длины изменялась бы длина отрезка в самом блоке. Конечно эта возможность на данном примере кажется абсурдным, но в сложном блоке это помогло бы решить некотрые задачи.

Просмотрев возможности динамического блока - такого инструмента я не обнаружил (может плохо смотрел?).
Начал ковырять блок Лиспом, смог достать из него пока только значения атрибутов с помощью команды ENTNEXT. До объектов достучаться пока не удалось, подскажите где копать?
Просмотров: 6500
 
Непрочитано 25.12.2008, 17:27
#2
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А зачем тебе именно атрибутами пользоваться? Динамических свойств мало? А если ты поменяешь сам объект в блоке, то он во всех копиях (вхождениях) этого блока тоже изменится.
Supermax вне форума  
 
Непрочитано 25.12.2008, 17:55
#3
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Анализируй чужие коды и делай по образу и подобию
http://forum.dwg.ru/showthread.php?t=21492
Sleekka вне форума  
 
Непрочитано 25.12.2008, 19:27
#4
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от Mazai Посмотреть сообщение
То есть скажем есть блок=линия, у блока есть атрибут - длина линии. Хочу добиться того, что бы указывая в атрибуте значение длины изменялась бы длина отрезка в самом блоке. Конечно эта возможность на данном примере кажется абсурдным, но в сложном блоке это помогло бы решить некотрые задачи. Просмотрев возможности динамического блока - такого инструмента я не обнаружил (может плохо смотрел?).
В общем-то, действительно, "кажется абсурдным"... Если возможно изменить значение атрибута, почему нельзя изменить значение динамического параметра? "Ручками", через окно свойств или даже при необходимости - программно? И какие такие задачи можно решить, реализовав эту идею, которые нельзя решить стандартными средствами дин. блоков?
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 25.12.2008, 21:53
#5
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Mazai Посмотреть сообщение
Начал ковырять блок Лиспом, смог достать из него пока только значения атрибутов с помощью команды ENTNEXT. До объектов достучаться пока не удалось, подскажите где копать?
Надо получить перечисление объектов вхождения блока или описания блока?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.12.2008, 10:46
#6
Mazai


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


Нужно это для задания точного значения, например высоты от уровня моря (блок для создания профиля). Пытаться самостоятельно ручками попасть в нужное значение - долго. То есть я пользуюсь растяжением. Соседнии блоки при это остаются без изменения. Вот мне бы и хотелось растягивать отрезок на указанное значение атребута. Предусмотреть все отметки в ЛукАпе - невозможно, вручную пытаться быстро попасть на нужное значение - долго.
Вся изюминка в данном методе в том, что необходимое значение для растяжения должно будет расчитываться по формуле в зависимости от масштаба профиля и начального значения шкалы. Я знаю, что для этих целей существует Цивил, но что-то похожее можно сообразить и в Автокаде. Вот и ковыряюсь.
Мне нужно понять: как можно будет растянуть объекты блока автоматически. Стандартными элементами блока выходит это невозможно, вот и полез в Лисп, но пока не смог понять как достать и изменить необходимые мне свойства. Наверное мне надо получить описание блока.
Mazai вне форума  
 
Непрочитано 26.12.2008, 10:57
#7
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Ну, а что мешает в окне свойств это значение точно выставить для динамического параметра? Если же значение рассчитывается по формуле и априори будет использоваться программа - лисп там или VBA, то что мешает программно менять дин. параметр? Передавать значение динамическому параметру, изменяя значение атрибута - на мой взгляд, неправильно (не знаю, реализуемо ли, даже если да - можно сделать проще)
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 26.12.2008, 11:33
#8
Mazai


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


Вот можно было бы сделать так - в значении аттрибута указывалось бы действительное значение (высота над уровнем моря), а в динамическом параметре указать формулу, в которой бы присутсвовало значение аттрибута...

Подскажите тогда как программно изменить значение динамического параметра? (на Лиспе)
Mazai вне форума  
 
Непрочитано 26.12.2008, 11:44
#9
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от Mazai Посмотреть сообщение
Вот можно было бы сделать так - в значении аттрибута указывалось бы действительное значение (высота над уровнем моря), а в динамическом параметре указать формулу, в которой бы присутсвовало значение аттрибута...Подскажите тогда как программно изменить значение динамического параметра? (на Лиспе)
На лиспе - это не ко мне. Это к Кулику Алексею aka kpblc, например. Я только VBA знаю.
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 26.12.2008, 12:19
#10
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Подскажите тогда как программно изменить значение динамического параметра? (на Лиспе)
Юзай поиск, функцию Алексей выкладывал.
ЗЫ: ваша задача с успехом решается если вводить значение самого динамического свойства поле которое доступно (Ctrl+1) вам это пытаются сказать а вы не слышите.
Sleekka вне форума  
 
Автор темы   Непрочитано 26.12.2008, 13:46
#11
Mazai


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


Sleekka, Я понял и услышал все советы. Просто хотел разобраться, как это можно было сделать более автоматизированно, так как вводимое значение должно заранее высчитываться в зависимости от аттрибута.

Сейчас пытаюсь проанализировать код из поста #3
Mazai вне форума  
 
Непрочитано 26.12.2008, 16:32
#12
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Есть вариант автоматизации.
http://forum.dwg.ru/showthread.php?t=27431
http://forum.dwg.ru/showpost.php?p=319854&postcount=36
Цепляешь на блок реактор. Как только ты хоть что-то изменишь в свойствах или в атрибутах, он сработает и запустит прогу, которая прочитает значение нужного атрибута или свойства и выставит все что угодно в любое состояние. Блок может быть и не динамическим. Писать можно хоть в хаперлинк или вложенный в блок текст.
Supermax вне форума  
 
Непрочитано 27.12.2008, 06:59
#13
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от Mazai Посмотреть сообщение
Нужно это для задания точного значения, например высоты от уровня моря (блок для создания профиля). Пытаться самостоятельно ручками попасть в нужное значение - долго. То есть я пользуюсь растяжением. Соседнии блоки при это остаются без изменения. Вот мне бы и хотелось растягивать отрезок на указанное значение атребута. Предусмотреть все отметки в ЛукАпе - невозможно, вручную пытаться быстро попасть на нужное значение - долго.
Вся изюминка в данном методе в том, что необходимое значение для растяжения должно будет расчитываться по формуле в зависимости от масштаба профиля и начального значения шкалы. Я знаю, что для этих целей существует Цивил, но что-то похожее можно сообразить и в Автокаде. Вот и ковыряюсь.
Мне нужно понять: как можно будет растянуть объекты блока автоматически. Стандартными элементами блока выходит это невозможно, вот и полез в Лисп, но пока не смог понять как достать и изменить необходимые мне свойства. Наверное мне надо получить описание блока.
Выложи пример файла, а то ничего не понятно. М.б. что-то и выйдет
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Автор темы   Непрочитано 19.01.2009, 17:28
#14
Mazai


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


Я продолжу.
Supermax, спасибо за наводку. Буду пытаться вникнуть и осилить, это будет не легко.
А для тех кто знает как это сделать попроще - выкладываю пример.
На чертеже изображён профиль поверхности земли. Высота над уровнем моря. Шкала отсчёта ведётся не от нуля. На профиле отмечены точки поверхности земли и подземных коммуникаций.
Идея блока следующая - указываем в атрибуте блока высоту от уровня моря, а в блоке высота подписи меняется в зависимости от указанного значения и нулевого значения шкалы (её тоже можно задать как атрибут). И в результате остаётся только выбрать место на профиле для вставки этого блока. Мне бы понять: как можно связать значение атрибута и динамическое свойство блока, а остальное доработать можно по аналогии.
Или тут без реактора не обойтись?
--
Во вложении схема вида профиля и разрабатываемый блок (справа от схемы). Один файл сохранён для версии 2004.
Вложения
Тип файла: dwg
DWG 2007
Точка профилирования.dwg (95.9 Кб, 924 просмотров)
Тип файла: dwg
DWG 2004
Точка профилирования 2004.dwg (62.0 Кб, 904 просмотров)

Последний раз редактировалось Mazai, 19.01.2009 в 17:52.
Mazai вне форума  
 
Непрочитано 19.01.2009, 20:49
#15
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Без реактора не обойтись, а то руками придется делать.
Supermax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Редактирование блока, используя значение его атрибутов

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить свойства атрибутов блока ALFMario AutoCAD 15 25.01.2008 00:42
Имя блока по его вхождению Mischa Программирование 3 14.10.2007 14:57
Как поставить значение посадок в размере не разбивая его vano_13 AutoCAD 6 26.09.2007 13:18