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

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

Попытался сделать автоматическое составление спецификации по

Ответ
Поиск в этой теме
Непрочитано 16.05.2007, 09:18
Попытался сделать автоматическое составление спецификации по
mmmx
 
Москва
Регистрация: 06.07.2006
Сообщений: 42

Попытался сделать автоматическое составление спецификации по чертежу.

В общем, ничего сложного она из себя не представляет: если у блока есть описание
(а также у блоков, вложенных в него), то программа их показывает для выбранных блоков,
позволяет отредактировать, скопировать.

Проблема для меня только в том, где держать это описание блока.
Я решил этот вопрос с помощью пояснения к блоку (Block.Comments), и на основе этого и сделал программку....

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


Не поможете, как приаттачить текстовые данные к блоку? (с помощью словарей, что ли... Не очень хорошо в этом разбираюсь)

Или может, можно как-то отключить уничтожение комментария блока при его вставке в другой чертеж?


Был бы очень благодарен!
Программка получилась вполне нужная, да вот из-за того, что недоглядел вовремя, бестолковая...
Просмотров: 17126
 
Автор темы   Непрочитано 17.05.2007, 11:10
#21
mmmx


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


В общем, когда-то мне уважаемый kpblc помог с доступом к комментарию блока. Технически оказалось проще решить все через AcadBlockReference. А чем это грозит, я тогда не понял... Теперь, чтобы данные держались при вставке блока в другой чертеж (дизайн центром или дропом из файла) мне нужно переделать эту процедуру в соответствии с замечанием VetalBY:
Цитата:
Конечно держаться не будут, так как ты цепляешь данные к ссылке на блок (BlockReference), а не к описанию блока (BlockTableRecord)
А процедура выглядит следующим образом:
Код:
[Выделить все]
Function GetBlockDescription(BlockName As String, Optional NewDescr As String) As String
Dim objBlock As AcadBlock
Set objBlock = ThisDrawing.Blocks.Item(BlockName)

For Each Item In objBlock
      If TypeName(Item) = "IAcadBlockReference2" Then
    GetBlockDescription (Item.Name)
    End If
Next

If NewDescr <> "Null" Then
objBlock.Comments = NewDescr
End If

If NewDescr = "Null" Then ADD_TO_GRID (objBlock.Comments)
Exit Function
      
End Function
Помогите переделать, а? Я уже совсем запутался...
mmmx вне форума  
 
Непрочитано 17.05.2007, 11:42
#22
VetalBY


 
Регистрация: 16.05.2005
г. Минск
Сообщений: 276


это мы уже все скоро запутаемся. Комментарий как раз таки и цепляется к описанию блока и ДЦ его нормально перетаскивается. Только я никак не пойму, как можно использовать такую информацию для спецификаций? Каждый блок имеет в чертеже только одну вставку (BlockReference или INSERT) что ли?
Мне показалось, что ты не совсем понимаешь, что такое описание блока (BlockDefinition) и его вставка (BlockReference или INSERT). Описание блока оно одно в файле, но ссылок на этот блок может быть несколько в этом же файле. К BlockReference по-моему нет возможности прикрепить комментарий...
Короче нужна более четкая постановка задачи, имхо.
VetalBY вне форума  
 
Непрочитано 17.05.2007, 12:35
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Продвигаю свою идею - хранить данные в гиперссылке как наименее трудоемкую. К сожалению с VBA не работаю, но про гиперссылки на VBA нашел эти примеры
http://discussion.autodesk.com/threa...hreadID=569748
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=34298ea
И храни свою базу в URLDescription каждого вхождения блока в чертеже (INSERT)
VVA вне форума  
 
Непрочитано 17.05.2007, 12:45
#24
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Вот примерчик из helpa как задать URLDescription объетку
Код:
[Выделить все]
Sub Example_URLDescription()
    ' This example creates a Circle object in model space and
    ' adds a new Hyperlink to its Hyperlink collection
    
    Dim Hyperlinks As AcadHyperlinks
    Dim Hyperlink As AcadHyperlink
    Dim circleObj As AcadCircle
    Dim centerPoint(0 To 2) As Double
    Dim radius As Double
    Dim HLList As String
    
    ' Define the Circle object
    centerPoint(0) = 0: centerPoint(1) = 0: centerPoint(2) = 0
    radius = 5#
    
    ' Create the Circle object in model space
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)

    ThisDrawing.Application.ZoomAll
    
    ' Get reference to the Circle's Hyperlinks collection
    Set Hyperlinks = circleObj.Hyperlinks
    
    ' Add a new Hyperlink complete with all properties
    Set Hyperlink = Hyperlinks.Add("AutoDesk")
    Hyperlink.URL = "www.autodesk.com"
    Hyperlink.URLDescription = "Autodesk Main Site"
    Hyperlink.URLNamedLocation = "MY_LOCATION"
    
    ' Read and display a list of existing Hyperlinks and
    ' their properties for this object
    For Each Hyperlink In Hyperlinks
        HLList = HLList & "____________________________________" & vbCrLf   ' Separator
        HLList = HLList & "URL: " & Hyperlink.URL & vbCrLf
        HLList = HLList & "URL Description: " & Hyperlink.URLDescription & vbCrLf
        HLList = HLList & "URL Named Location: " & Hyperlink.URLNamedLocation & vbCrLf
    Next
    
    MsgBox "The circle has " & Hyperlinks.count & " Hyperlink: " & vbCrLf & HLList
End Sub
Как взять в примерах выше. Единственный минус, гиперссылка хранится в расширенных данных (16 кБ органичение)
VVA вне форума  
 
Непрочитано 17.05.2007, 13:10
#25
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Гиперссылки для таких целей, в принципе, использовать можно. Но это плохо:

1. Они доступны для ручной правки, а значит, могут быть (и будут) попорчены.
2. Кто-то использует их и по прямому назначению. Только не надо думать, что если вы этим не пользуетесь, так и никто больше не применяет.
3. У гиперссылки есть "база", которая может к ссылке добавляться. Она также доступна и может все испортить.

Гораздо проще раз и навсегда научиться привязывать данные - пригодится много раз. Разумеется, не к определению блока, а к вставке. Одно и то же определение блока при вставке может быть связано с разными записями БД. Иначе - тупик. Сколько типоразмеров и модификаций изделий - столько и определений блока. А если у оборудования изменилось название, ТУ или еще что? Менять во всех определениях блока во всех чертежах, куда их наперетаскивали?

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

Приходилось использовать гиперссылки для БД таким образом:

1. У примитивов были привязанные скрытые ссылки на записи в БД.
2. Для размещения в интернете генерировались тысячи DWF-файлов (план города). При этом перед созданием DWF к примитиву, из расширенных данных, привязывалась гиперссылка.
3. При просмотре DWF в Интернет щелчок по объекту заставлял работать гиперссылку. При этом в браузер выводилась информация об объекте.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 17.05.2007, 14:00
#26
mmmx


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


VVA, Shaggy Doc: пока с гиперссылками подожду, оставлю этот вариант на крайний случай.
А также: мне не нужно привязать описание к конкретной вставке блока. Поясняю:

Постановка задачи:
Имеются файлы с изображениями: шкафы, монтажные платы для них, различные аппараты, на них устанавливаемые, и всевозможные аксессуары.

Папка с этими файлами открыта в Дизайн Центре. Я вытягиваю нужный мне шкаф, и начинаю его компоновать, устанавливая нужную монтажную плату, на нее, в свою очередь, нужный аппарат, и так далее.

Шкаф состоит из рамы, боковых и верхней панели, рым-болтов. Если на чертеже три шкафа, то соответственно, все эти компоненты шкафа имеются в тройном размере.
Таким образом, спецификация должна быть привязана к описанию блока, а не к его конкретной вставке.


VetalBY, аналогично с Comments, работает и Xdata, ту же функцию нетрудно переделать:

Код:
[Выделить все]
Function GetBlockDescription(BlockName As String, Optional NewDescr As String) As String
Dim objBlock As AcadBlock
Set objBlock = ThisDrawing.Blocks.Item(BlockName)

For Each Item In objBlock
      If TypeName(Item) = "IAcadBlockReference2" Then
    GetBlockDescription (Item.Name)
    End If
Next

Dim datatype(0 To 1) As Integer
datatype(0) = 1001
datatype(1) = 1000

If NewDescr <> "Null" Then
Dim data(0 To 1) As Variant
data(0) = "My"
data(1) = NewDescr
objBlock.SetXData datatype, data
End If

If NewDescr = "Null" Then
Dim datatype2 As Variant
Dim comm As Variant
objBlock.GetXData "My", datatype2, comm

    TXT = comm(1)
    ADD_TO_GRID (TXT)
    Exit Function

End If
      
End Function
НО: ни в том, ни в другом случае прикрепленные данные не сохраняются!
Цитата:
Комментарий как раз таки и цепляется к описанию блока и ДЦ его нормально перетаскивается.
Этого не происходит!!! Видимо, по причине привязки к Reference, а не к описанию блока
mmmx вне форума  
 
Непрочитано 17.05.2007, 15:04
#27
VetalBY


 
Регистрация: 16.05.2005
г. Минск
Сообщений: 276


Цитата:
Сообщение от mmmx
Таким образом, спецификация должна быть привязана к описанию блока, а не к его конкретной вставке.
Видимо я чего-то не допонимаю....
Цитата:
Сообщение от mmmx
Этого не происходит!!! Видимо, по причине привязки к Reference, а не к описанию блока
Это легко проверить. Вставляем блок в файл, выделяем его и видим, что у него нет свойства "Description", кликаем дважды по блоку и входим в редактор блока (в описание блока) и видим, что там это свойство присутствует.
VetalBY вне форума  
 
Непрочитано 17.05.2007, 15:05
#28
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Такая постановка - перетаскивание из DesignCenter принципиально неверна.

DesignCenter - это для "блондинок" (жгучие брюнеты, не обижайтесь). Это средство "малой механизации", для небольшого облегчения ручной работы. Работа все равно остается ручной. Для ручной работы можно придумать множество вариантов микроскопического улучшения (ломик, полиспаст, "эх, дубинушка, ухнем"). Все равно это ручной труд.

Привязка данных к объектам, притаскиваемых откуда-то бессмысленна. Ну, если "конечно, хочется хорошенько помучиться" (как говорил тов. Сухов) - пробуйте. Радикального результата, сопоставимого с затраченными усилиями не будет.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 17.05.2007, 18:22
#29
mmmx


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


Цитата:
Привязка данных к объектам, притаскиваемых откуда-то бессмысленна. Ну, если "конечно, хочется хорошенько помучиться" (как говорил тов. Сухов) - пробуйте. Радикального результата, сопоставимого с затраченными усилиями не будет.
Неужели? То есть автоматическое составление спецификации по сборочному чертежу - это блажь, никому не нужная? А ведь ее многие 2Д и 3Д системы реализуют (я не говорю здесь о подходе к проектированию)
mmmx вне форума  
 
Непрочитано 17.05.2007, 20:22
#30
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Ну тогда создай в блоке ПОСТОЯННЫЙ атрибут, или лучше атрибуты и храни там имформацию. Во вхождении блока его не будет, в описании блока - пожалуйста
VVA вне форума  
 
Непрочитано 17.05.2007, 21:37
#31
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от mmmx
Неужели? То есть автоматическое составление спецификации по сборочному чертежу - это блажь, никому не нужная? А ведь ее многие 2Д и 3Д системы реализуют (я не говорю здесь о подходе к проектированию)
Очень нужная. Блажь - строить на основе блоков, да еще "притаскиваемых". Да, можно в атрибутах блока заложить все данные. А потом мучиться с тем, что эти данные устарели и неконтролируемо растаскиваются. И в каждом чертеже надо или переопределять блоки или переписывать их атрибуты.

Системы строятся не так. У них разная идеология в реализациях, но никак не такая.

Например, сведения об изделиях (не только для спецификации, но и например, для расчетов) хранятся в базе данных. Объект создается по данным из базы. В "продвинутых" системах (АДТ, ABS и т.п.) это вообще специальный вид примитивов. В более простых - это стандартные примитивы Автокада, но связанные с базой данных.

Блоки также могут использоваться, но как частный случай примитива. Если щит на плане здания можно изобразить блоком, то трубопроводы, проводники, крепления и тысячи других мелочей - не получится. А именно с ними проблема, а не с подсчтетом, например, количества колес на сборочном чертеже автомобиля.
ShaggyDoc вне форума  
 
Непрочитано 18.05.2007, 20:49
#32
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от ShaggyDoc
Блоки также могут использоваться, но как частный случай примитива. Если щит на плане здания можно изобразить блоком, то трубопроводы, проводники, крепления и тысячи других мелочей - не получится. А именно с ними проблема, а не с подсчтетом, например, количества колес на сборочном чертеже автомобиля.
Это точно! Больше всего шансов на автоматические спецификации имеют модели из 3д тел, когда каждая деталь представлена отдельным телом, а не набором отрезков, кружочков и прочего зверинца примитивов. У меня, к примеру, программа находит в модели одинаковые тела и считает их (с учётом вложенности в блоки). Для двухмерки - это совершенно ненадёжно.
Евгений А. вне форума  
 
Автор темы   Непрочитано 21.05.2007, 09:51
#33
mmmx


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


Цитата:
Больше всего шансов на автоматические спецификации имеют модели из 3д тел, когда каждая деталь представлена отдельным телом, а не набором отрезков, кружочков и прочего зверинца примитивов. У меня, к примеру, программа находит в модели одинаковые тела и считает их (с учётом вложенности в блоки). Для двухмерки - это совершенно ненадёжно.
Команда Explode успешно превратит ваше "три дэ" в набор отрезков, кружочков, и т.д. Я не вижу принципиального отличия между автокадовскими 2D и 3D.
Зато у меня уже есть своя база блоков, которые мне достаточно просто обработать (добавить спецификацию или ссылку на запись в БД, и сделать эти блоки неразбиваемыми, чтобы исключить эту опасность).
Вот вобщем-то и весь вопрос.
Перерисовывать все хозяйство автокадовскими 3Д-телами я не стану, с учетом того, что рисовать трехмерку в акаде - это ношение воды в решете.
mmmx вне форума  
 
Непрочитано 21.05.2007, 10:06
#34
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>mmmx Как начсет постоянного атрибута?
VVA вне форума  
 
Непрочитано 21.05.2007, 11:22
#35
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от mmmx
Команда Explode успешно превратит ваше "три дэ" в набор отрезков, кружочков, и т.д.
Коли так рассуждать, то знаю ещё более успешную команда - ERASE !
Цитата:
Я не вижу принципиального отличия между автокадовскими 2D и 3D.
Просто вам достаточно 2д. Я на 3д не толкаю. Но есть другие, которым нужно именно 3д (со временем их всё больше и больше) и во многих сферах стандартных блоков просто не может быть принципиально!
Цитата:
Зато у меня уже есть своя база блоков, которые мне достаточно просто обработать
но если вам дали сторонний проект без вашей базы, то что .... пальчиком будете считать? Или представьте модель металлоконструкции - в ней стандартным блоком можно сделать разве что крепёж, всё остальное - уникольные детали, на которые нельзя сделать стандартные блоки заранее. Поэтому и говорю, что в общем случае у 3д больше всего шансов на программный анализ.
Евгений А. вне форума  
 
Непрочитано 21.05.2007, 11:54
#36
RomaV


 
Регистрация: 21.03.2007
Санкт-Петербург
Сообщений: 2,701


Поностью согласен с Евгением А, 3Д-моделирование более объектно-риентировано. Здесь можно извлекать данные объектов и использовать их в спецификациях не заморачиваясь с блоками которые являются всё-таки уникальными объектами и набор характеристик ограничен. В 3-х мерке руки больше развязаны. На примере ADT все вышеперечисленные ухищрения со спецификациями забавно смотрятся. Хотя в то-же время лёгкость создания спецификаций, накладывает условия создания практически всех элементов конструкции без упрощения, но от этого тоже есть польза - меньше ошибок.
RomaV вне форума  
 
Автор темы   Непрочитано 21.05.2007, 13:44
#37
mmmx


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


Цитата:
VVA: Как начсет постоянного атрибута?
Думаю, мне проще заносить в БД уникальное имя блока, и привязывать к нему любое количество строк описания. Хотя, еще раз говорю, хотелось бы описание хранить прикрепленным непосредственно к блоку...

Цитата:
Евгений А.: но если вам дали сторонний проект без вашей базы, то что ....
Нет, у меня не такая ситуация... Я понял, как лучше объяснить.
Вы на турбо паскале программировали? А почему перешли на дельфи? В чем их отличия? Отличие, в частности - в "визуальности" программирования.

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

Для моих целей это вполне осуществимо, поверьте. Велосипеда каждый раз не изобретаем, все детали стандартные.
mmmx вне форума  
 
Непрочитано 30.01.2012, 11:37
#38
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 427
<phrase 1=


Подождите обвинять в некрофилии!
Пролог.
С 2007 прошло уже почти 5 лет. Многое изменилось в этом мире в целом и в автокаде в частности. На смену просто блокам (тогда и это была диковинка), пришли динамические блоки (хотя и статические никуда не делись), а также "атрибуты" и "таблица блоков".
Основная часть. Идея.
1. Создание "правильных" блоков (то что может сделать каждый).
Создаем блок и восемь атрибутов в нем. Имена атрибутов могут быть разными - это не принципиально. Важно, чтобы в "таблице блоков" для этих атрибутов записывалась нужная информация.
Первый атрибут это классификация блока ("Оборудование", "Изделия и материалы", "Кабели, провода, шнуры и шины", "итд"). По этому атрибуту блоки будут сортироваться.
Второй - шестой атрибуты это 2-6 столбцы в спецификации ("наименование....", "тип, марка...", "Код оборудования.....", "Завод-изготовитель", "Единица измерения").
Седьмой, восьмой атрибуты это восьмой и девятый столбцы спецификации.
Создали блок, заполнили атрибуты.
2. Программа (вот тут уже не каждый может).
Запускаем программу. Выделяем рамочкой область подсчета. Программа сама определяет блоки и начинает их сравнивать. И считает количество блоков, у которых атрибуты №№2,3,4 и 5 одинаковые. Далее раскладывает блоки по значению первого атрибута - "оборудование" к "оборудованию", "изделия..." к "изделиям....".
3. Финальная часть программы.
Создание таблички в автокаде. Табличка стандартная - спецификация по ГОСТу. Заполнение таблицы делает сама программа. Точку вставки (левый верхний угол) задает пользователь.
4. Улучшение программы.
После того как она будет считать блоки и делать спецификацию в одном файле можно расширить область действия несколькими файлами.

Эпилог.
Прошли те времена когда машина пользовала человека.
Alexeipost вне форума  
 
Непрочитано 08.06.2012, 14:23
#39
Flash51

ГКП
 
Регистрация: 18.01.2009
Подольск
Сообщений: 18
<phrase 1= Отправить сообщение для Flash51 с помощью Skype™


Все бы хорошо, вот только одна загвоздка: если наименование длинное, то при переносе строк в спецификации текст не попадает в следующую строку, а межстрочный интервал не редактируется. Кто-нибудь решил данную задачу?
Flash51 вне форума  
 
Непрочитано 08.06.2012, 14:36
#40
Boxa

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


ИМХО используйте экспорт в Excel (в шаблон). И потом уже вставляйте табличку в Акад.
Собрать данные из нескольких xls файлов в итоговый несложно.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Попытался сделать автоматическое составление спецификации по