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

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

Доступ к параметрам (Custom) блока из кода

Ответ
Поиск в этой теме
Непрочитано 18.09.2012, 14:48 #1
Доступ к параметрам (Custom) блока из кода
Аркос
 
Регистрация: 18.09.2012
Сообщений: 23

Суть: к __атрибутам__ легко можно получить доступ из AutoLISP'а и через него их поправить,
а вот как достучаться из кода к __параметрам__?


Принципиально работаю только на Eng-версиях CAD'а,
просьба не пинать ногами за изобилие агглицкого и упорное непонимание русского переводного =)

____________________________________________________________________________________________________
Задача:

Требуется сделать автоматическую сетку из блоков-квадратов, с вычислениями внутри и пр. сложностями.
Причём каким-либо образом значения в углах у блоков нужно синхронизировать.
Не обязательно сразу после редактирования.

____________________________________________________________________________________________________
Способ, которым были попытки решить:

Нарисован квадрат, в узлах заданы "coincident'ы", сторонам заданы "horizontal" и "vertical", иначе встречались поползхновения при растягивании.
Серединам противоположных сторон заданы "constraints parameter'ы": "horizontal" и "vertical" соответственно.
В углах имеются аттрибуты, __только_отображающие__ дополнительные значения в этих углах и ещё некоторые вычисления.
Значения заданы искусственными "constraints parameter horizontal" от угла до точки скрытой.

Зачем constraints параметры вместо обычных?
Затем, что их значения затем можно атрибутам вставлять в качестве полей самого блока (с помощью BlockPlaceholder),
и тем самым и отображать их, и использовать в вычислениях.

____________________________________________________________________________________________________
Дурная голова рукам покою...

Есть ещё какие-то таблицы у блоков и куча других возможностей, с коими абсолютно не знаком.
Из программирования под AutoCAD понимаю разве что AutoLISP да немного C# .Net. В т.ч. не знаком с VisualLISP'ом.

____________________________________________________________________________________________________
Завтра выложу упрощёный пример блока, сегодня рабочий день уже к концу подошёл.

Просьба не обвинять в гробокопательстве, ибо подобных тем с ходу не нашёл.
Да и скорее всего нет их, т.к. аки самоучка выбрал путь длинною в сотни граблей =)
Просмотров: 5520
 
Непрочитано 18.09.2012, 18:56
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Offtop: умеешь красиво оформлять топики...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 19.09.2012, 06:55 файл0
#3
Аркос


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


Цитата:
Сообщение от Аркос Посмотреть сообщение
Завтра выложу упрощёный пример блока...
Обещаный пример.

Цифири вокруг "кружочков" необходимо любым образом синхронизировать.
В идеале, конечно, "на ходу" - после изменений в любом "соседе".
Как будут синхронизироваться "на старте" - значения не имеет, т.к. решительно все цифири будут последовательно забиваться руками.

Вопрос автоматизации ввода пока не стоит, а может и не встанет совершительно =)
__________________________________________________ __________________________________________________

Конечно же, допускается любая организация исходного блока, лишь бы всё было максимально удобно для конечного пользователя, а не для программиста =)))
Вложения
Тип файла: dwg
DWG 2004
CellExample_for_dwg.ru.dwg (114.8 Кб, 1925 просмотров)
Аркос вне форума  
 
Непрочитано 19.09.2012, 08:29
#4
Petrov-Vodkin


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


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

А то тебе тут напредлагают...
Например, написать "цифири вокруг кружочков" при помощи поля (field) - вот и вся синхронизация. Сойдет такой способ за "любой"?
Petrov-Vodkin вне форума  
 
Автор темы   Непрочитано 19.09.2012, 08:44
#5
Аркос


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


Цитата:
Сообщение от Petrov-Vodkin Посмотреть сообщение
Каким "любым"?
Имеется в виду, что неважно, когда - будет ли синхронизация во время ввода или после, или вообще после regen/attsynh.
__________________________________________________ __________________________________________________
Суть "алгоритма" такова:
- Пользователь вводит в окошке свойств или в диалоге цифири значений в углах (в оригинале их по два, в примере - один)
- Происходит расчёт значения в центре блока-клетки (в примере - суммирование)
- Происходит дублирование изменённого значения в соседние блоки в соответствующие примыкающие углы
- происходит перерасчёт значений в центрах соседних блоков-клеток
__________________________________________________ __________________________________________________
Желательно, чтобы приэтом пользователю не приходилось подгружать лишние скрипты (максимум - один),
менять ярлык запуска и/или пихать что-либо в автозагрузку, равно как и устанавливать нечто лишнее.
Желательно. Но не обязательно.
__________________________________________________ __________________________________________________

P.S. если это поможет, то одна из целей - расчёт земляных масс.
Аркос вне форума  
 
Непрочитано 19.09.2012, 11:05
#6
Дима_

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


Цитата:
Сообщение от Аркос Посмотреть сообщение
Суть "алгоритма" такова:
...
по моему это все прекрасно решается полями
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 19.09.2012, 11:19 Умный ум покоя в жизни не даёт
#7
Аркос


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
по моему это все прекрасно решается полями
__________________
Когда в руках молоток все вокруг кажется гвоздями.
А вы пример хотя бы открывали, Дима_?

Моему молотку однажды заметилось, что к полям аттрибутов изнутри блока обратится не представляется возможным
А параметры замечательно доступны из "BlockPlaceholder".

Но даже если упразднить "лишние" построения, вопроса синхронизации это не решает.
Если сетка из этих всегда фиксированного размера - её можно однажды железно привязать за поля, да и копипастить потом.

А если сетка из чертежа в чертёж меняется в размерах? Если в ней то 10*10 ячеек (что уже напрягает), а то и 200*100...
__________________________________________________ __________________________________________________

P.S.
Цитата:
Сообщение от Дима_ Посмотреть сообщение
по моему это все прекрасно решается полями
Пример решения полями сетки 100*100 блоков-ячеек в студию!
Аркос вне форума  
 
Непрочитано 19.09.2012, 12:13
#8
Дима_

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


Цитата:
Сообщение от Аркос Посмотреть сообщение
А вы пример хотя бы открывали, Дима_?
Да классный пример - а главное всем сразу понятно что нужно по 15 одинаковым квадратам
Цитата:
Сообщение от Аркос Посмотреть сообщение
Моему молотку однажды заметилось, что к полям аттрибутов изнутри блока обратится не представляется возможным
А как Вы себе представляете доступ к полю ВХОЖДЕНИЯ блока из его ОПИСАНИЯ, но к аттрибуту вхождения блока доступ таки есть.
Цитата:
Сообщение от Аркос Посмотреть сообщение
А если сетка из чертежа в чертёж меняется в размерах?
А где у Вас до этого написанно что сетка изменяемая? Или до чего за Вас должны все догадаваться.
Цитата:
Сообщение от Аркос Посмотреть сообщение
Пример решения полями сетки 100*100 блоков-ячеек в студию!
Такую как вашу "сетку" могу размножить хоть 1000 на 1000 - Вы бы перед тем как разную "галематью с примерами" писать расписали бы исходную задачу, и посоветовались бы о методах ее решения, тратить время на решение непонятной задачи да еще и для выполнение ее через ***у, лично у меня нет ни какого желания, ну а коли Вы "такой умный" и лучше всех знаете как ее надо решать - так и решайте сами - удачи.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 19.09.2012, 15:19
#9
Klo

Инженер-конструктор
 
Регистрация: 29.10.2007
Юбилейный МО
Сообщений: 266


Согласен, описание хреновое.
Хотелось помочь человеку, но так до конца и не разобрался, что требуется.
За исключением того, что Дима_ погорячился, он прав, автору неплохо было бы подробно описать задачу.
Например непонятно, как создаётся сетка: чертится руками, составляется из блоков или генерируется программно?
Можно ли применить динамические блоки?
Остальные нюансы тоже описать бы...
Klo вне форума  
 
Автор темы   Непрочитано 20.09.2012, 06:35
#10
Аркос


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


Цитата:
Сообщение от Klo Посмотреть сообщение
Согласен, описание хреновое.
Согласен =)

Задача следующая:
Есть произвольный многоугольник, очерчивающий территорию.
На эту территорию накладывается сетка, в узлах которой отображается текущая высота местности и целевая.
В центре клеток отображается "земельная масса", которую требуется "убрать/досыпать".
Отдельно также имеется таблица, суммирующая результат. Вида "итого выкопать:", "итого насыпать:", "итого:".

О неполных клетках речи пока не идёт, хотя было бы неплохо.
__________________________________________________ __________________________________________________

В данном примере задействованы динамические блоки, вставленные в чертёж insert'ом вручную.
Соответственно, такой подход не даёт гибкого результата.

Как подосвобожусь - постараюсь закинуть более вменяемый пример.
__________________________________________________ __________________________________________________

P.S. Ребят, полный самоучка, к тому же всего полгода как начал копать в теме динамических блоков и LISP'а =)
Аркос вне форума  
 
Непрочитано 20.09.2012, 08:52
#11
Кулик Алексей aka kpblc
Moderator

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


Мне почему-то кажется, что вариант использования квадратов (да и вообще не-треугольников) может дать немного неверный результат. И на самом задача сводится к расчету разницы между поверхностями.
Насколько я слышал, в Civil подобные задачи решаются достаточно просто (инструментария не знаю). Если же надо "только AutoCAD и без вариантов", то задачу триангуляции вроде бы решал Евгений Елпанов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.09.2012, 09:09 Задача __отображения__ расчёта, а не его проведения (он итак элементарно в excel'е производится)
#12
Аркос


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


Стоит не задача триангуляции, а оформление соответствующих чертежей - первое, что нашёл яндекс.

И вся соль именно в отображении всех этих цифирей на чертеже, что с треугольниками куда как менее удобно.
__________________________________________________ __________________________________________________

P.S. это вообще из области СПДС, не наш профиль, но вот поручили сделать. Так что, возможно, есть и другие варианты оформления по ГОСТ, с которыми не знаком.
Аркос вне форума  
 
Непрочитано 20.09.2012, 09:32
#13
Дима_

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


Построить по точкам две копии трехмерных тел (текущие и целевые) и вычесть в каждой одно из другого (получиться в одной сколько досыпать, в другой - выборка) - потом нарезать любой нужной сеткой и посчитать объем хоть весь, хоть по клеткам - будет наглядно и красиво.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 57
Размер:	71.7 Кб
ID:	87272  
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 20.09.2012, 10:39
#14
Аркос


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


Есть такая "вредная хреновина" - ГОСТ. Оформление требуется с соблюдением оного =)
А уж если речь о расчётах, то есть и специальное узкозаточенное ПО, в котором всё давно посчитано.

Остаётся всё это вынести и оформить. И обычно этим занимались строители...
____________________________________________________________________________________________________

P.S. нет ничего непостояннее, чем окончательное решение... Кажись, планчик отпадает.
Остаётся чисто спортивный интерес.
Пока что.
Пока снова не примут обратное окончательное =)
Аркос вне форума  
 
Непрочитано 20.09.2012, 12:00
#15
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589


Автор, вы бы в одном файле показали исходное положение, промежуточное и результат.
Все что я понял , это что число в центре блока - сумма чисел в вершинах.
Откуда берутся числа в углах, не понял, но они должны быть одинаковые в смежных углах.


Исходя из того что понял:
Выбираем все блоки
Прибираем блоки
--Проходим по вершинам
---Собираем значения и ссылки на аттрибуты в углах
--Ищем множество блоков с такими же координатами вершины
--- Проходим по полученной выборке
--- Ищем атрибут в блоке с координатами: Коорд. вершины +- некоторое значение
----Заполняем атрибут новым значением
----Считаем сумму атрибутов
Переходив в начало

Наверняка что то напутал или не так выразился/понял, но пока , из того что понял, задача тривиальная и в связке .net+LinQ/любая БД решается не сложно.

Последний раз редактировалось Boxa, 20.09.2012 в 12:15. Причина: И параметры не нужны...
Boxa вне форума  
 
Непрочитано 20.09.2012, 13:19
#16
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


33 раза обсуждалось. Искать "картограмма земляных масс"
__________________
... а Автокад то - голый
Victor вне форума  
 
Автор темы   Непрочитано 21.09.2012, 06:58
#17
Аркос


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


Цитата:
Сообщение от Victor Посмотреть сообщение
Искать "картограмма земляных масс"
Семён Семёныч...
А я всё по блокам рыскал =)
Благодарю!
__________________________________________________ __________________________________________________

А в целях повышения квалификации и уровня костыльных знаний, можно ли к параметрам из AutoLISP'а достучаться?
__________________________________________________ __________________________________________________

P.S. уже на AutoLISP'е в черновом сваял с автопробегом по блокам вариант, который опирается на координаты вставки блока.
Аркос вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Доступ к параметрам (Custom) блока из кода

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кто знает есть ли доступ к параметрам динамичесого блока из Lisp GaD200900 LISP 15 07.08.2016 18:36
Фильтр динамических блоков по аттрибутам и другим (custom) параметрам как выполнить? m00ny Динамические блоки 3 02.08.2012 14:04
Как получить доступ к свойствам дин. блока в VBA shprot Программирование 3 30.04.2012 18:49
VBA програмный доступ к параметрам динамического блока (чтение/установка) sergtranes Программирование 6 07.02.2011 17:16
Управление параметром видимости дин. блока через sheetset custom properties Red Nova AutoCAD 12 25.06.2008 13:44