|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Хотелось бы предупредить пользователей, при копировании одновременно стандартных -> источника поля и самого поля на этот источник -> создается копия такой пары (обновляется), с полями skkkk этого не происходит, связь теряется.
Пути решения - расчетную часть держать в одном экземпляре, исходники, теорию и результаты расчетов в многострочный текст полями для каждого применения -> копирование и сброс полей. Успешно реализован расчет зон молниезащиты непосредственно в dwg файле (несколько площадок). Автору огромное спасибо! В том числе за помощь! ![]() В свое время пытался оформить штампы таблицами, надо поискать, с программой обновление возможно без использования полей подшивки или свойств DWG, достаточно таблицы-штампа-образца (все в одном DWG).
__________________
tc71 Последний раз редактировалось perpetule, 29.01.2015 в 12:36. |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,634
|
perpetule, справедливо. Во-первых, при копировании через буфер обмена значения свойств чертежа из вкладки "Прочее" не переносятся в другой чертеж. Во-вторых, уникальный в пределах файла буквенно-цифровой индекс таблицы (handle) при вставке ее в другой чертеж изменится, а адресация полей строго привязана к этому индексу. Скорее всего, метод переноса этой связи (источник-поле) между файлами, который реализован в Автокаде, недоступен из лиспа, однако сделать это возможно иным путем:
1. Создать реактор на команду копирования, который активизирует процедуру переноса между файлами, либо иначе придется производить такое копирование посредством отдельной команды. 2. При запуске такой процедуры одним из вышеуказанных способов к каждой таблице, на которую имеются ссылки в виде полей в данном файле, прикрепить расширенные данные - строку содержащую в себе handle исходной таблицы, либо некое число, созданное, как вариант, генератором случайных чисел. Однако, при таком подходе есть шанс, хоть и небольшой, напороться на коллизию - ситуацию, когда номер копируемой таблицы совпадет с номером таблицы, уже существующей в новом файле - тогда поле может сослаться не на ту таблицу. К тому же, расширенные данные могут использоваться другими программами, в следствие чего возможен их конфликт. 3. Обеспечить перенос свойств вкладки "Прочее" из одного файла в другой. 4. В новом файле (по реактору на команду вставки) назначить каждому свойству адрес новой таблицы, сопоставляя его с адресом в расширенных данных. Есть мысли и желание переписать программу с целью освободить вкладку "Прочее", которая может понадобиться пользователям для других целей. Несомненно, обеспечив поддержку файлов, созданных в текущей версии, при этом по команде "UTCF" переводя старые файлы в формат новой версии незаметно для пользователя, дабы не доставлять ему проблем. Если появится все же для этого время, постараюсь разобраться с двумя проблемами, выделенными жирным в пунктах выше, а также с третьей (точнее самой первой) проблемой хранения данных в чертеже без использования вкладки "Прочее" Свойств чертежа и без риска потерять эти данные при очистке. Очень жаль, что никто из настоящих программистов не заинтересовался данной темой и некому мне подсказать направления к решению данных вопросов. ![]() Но я постараюсь разобраться, а разобравшись, переписать код, не забыв добавить функцию копирования поля в буфер обмена и возможность удалять (преобразовывать в текст) поля, созданные данной программой. А пока, кроме могу предложить альтернативный путь решения, пришедший на ум: сохранять копию файла - либо в проводнике, либо через "Сохранить как..." - и в нее уже копировать все, что нужно из других файлов. При таком подходе связи сохранятся. Правда и тут есть свои проблемы: например, если в разных файлах настройки одноименных текстовых или иных стилей, слоев, состав описаний блоков будут разными, то результаты копирования могут быть неожиданными. Будьте бдительными. И не забывайте о таком инструменте, как шаблоны. perpetule, спасибо за конструктивные замечания! ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,250
|
Offtop: skkkk, если интересно мое мнение (код писать не буду, тут и так наворочено столько...
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,634
|
Еще как!
Цитата:
Цитата:
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,250
|
Кстати, пока не забыл: словари можно записывать и на объекты. Вроде бы они не уничтожаются чисткой. Даже если принудительно чистить словари dwg.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 07.10.2008
Сообщений: 94
|
Цитата:
Еще писал что у меня было 10 связей - отдельных таблиц, это было не удобно, обновлялось долго, а бывало что и слетали все. При разработке нового проекта добавилось много оборудования вот и связей стало 30... Также есть момент, что если файл с полями созданными через TCF вставить в другой как внешнюю ссылку - то поля превратятся в решетки, думаю уже об этом говорилось. Было бы идеально исправить, но и без этого польза неимоверная от TCF !! А то что там не копируются эти поля - так не для этого и созданы. Даже если штатные поля копируются, не значит что поля TCF должны. Ведь штатные вообще текст из ячеек не читают. Поэтому лично я использую в основном штатные поля, а для обозначения марок оборудования на схемах и в спецификациях применяю TCF. Очень выручает!! Последний раз редактировалось Avodo, 01.10.2015 в 14:20. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,634
|
На мой взгляд проблема в том, что FieldToText преобразует в текст либо все поля, либо поля только в выбранных примитивах, а я говорил о том, что нужна команда для преобразования только тех полей, которые созданы посредством TCF, плюс нужно почистить неиспользуемые свойства чертежа, дабы не копить хлам.
Offtop: Не знаю, может, у меня одного так по какой-то причине, но эти связи с данными - это такой пожиратель времени! Можно ждать по несколько минут, пока обновится одна связь, не представляю, что будет, если их сделать 10. Цитата:
Цитата:
Последний раз редактировалось skkkk, 04.10.2015 в 10:14. |
|||
![]() |
|
||||
skkkk,
1. В командной строке не происходит ничего. 2. Файл прикрепляю. 3. Нет, таблица - чистой воды, таблица. Вот блин, решил прикрепить Вам файл: создал новый чертеж, скопировал туда 2 таблицы - и все работает! Как так? ![]() Прикрепляю рабочий файл с отдельными таблицами (вот в нем все работает), а также 2 скрина, которые демонстрируют "ничего не происходит в командной строке" и "свойства таблицы" в старом файле. Так вот, как я уже отметил, возник новый вопрос. Почему все стало работать в новом файле? И тут я решил прикрепить Вам и старый файл, дабы доказать, что не вру. ![]() Может, у Вас есть какие догадки на этот счет? |
||||
![]() |
|
||||
Доброго дня.
проверил ЛИСП из сообщения автора, все супер, вставляет текст с полем и инфой из ячейки Вопрос1: как вставлять такое поле в атрибут динамического блока? можноли это реализовать? Вопрос2: если файл с полями созданными через TCF вставить в другой как внешнюю ссылку - то поля превратятся в решетки, можно ли это исправить? (вопрос, как я понял, задаю уже повторно) ----- добавлено через ~8 мин. ----- пока что решение проблемы можно сделать так: создаем текстовые поля в объектах многострочного текста при исполнении лисп.команды TCF (как промежуточные), а затем в атрибут блока вставляем текстовое поле со значением содержимого промежуточного объекта [многострочный текст, созданный при исполнении лиспа] и на выходе получаем блок с атрибутом и текстовым полем, который в качестве внешней ссылки отображается корректно Последний раз редактировалось d.mOnII, 22.10.2015 в 16:50. |
||||
![]() |
|
|||||
Регистрация: 20.03.2008
Сообщений: 2,634
|
У меня тоже не работает.
Цитата:
Как мы знаем, лисп в Автокаде делится на две ветки: AutoLISP и Visual LISP. Обычно, многие задачи можно решить альтернативно: как одной ветвью, так и второй. Но реалии показывают, что одно проще выполнить первым, другое - вторым, поэтому многие используют мешанину из этих веток - лично мне так удобнее, да и не всё, что можно реализовать через одно, можно реализовать и через второе. Если копнуть глубже, чем описано в шапке, то алгоритм программы TCF таков: при указании точки внутри ячейки происходит программная выборка всех таблиц средствами AutoLISP и поочередный анализ каждой таблицы на предмет принадлежности ей указанной точки методом HitText из Visual LISP и далее считывание значения ячейки методом GetText из него же. Так вот, Автолисп распознает ее как таблицу. А для Visual LISP это другой объект, для которого методы HitText и GetText не срабатывают. Иными словами, пока в файле есть такая вот таблица от СПДС, программа не сработает. Почти уверен, что я смогу сделать так, чтобы в выборку не попадали эти "не чистой воды" таблицы, и с обычными таблицами код будет работать в любом файле. Но вот не знаю, можно ли что-то предпринять, чтобы код срабатывал и на таких таблицах. Дело в том, что большая часть используемых в коде функций не моя - я просто собрал все воедино, - и мне скорее всего понадобиться помощь VVA, чтоб в этом разобраться. Тут, похоже, придется переписывать значительную часть кода на новый алгоритм, который мне пока непонятен, да и есть большие сомнения, что это вообще удастся. И не знаю, где найти информацию по программной работе с такими объектами (чувствую, в 2015-м это не первый сюрприз). Так что предлагаю пока исключить таблицы СПДС из файла для пользования кодом, а я по мере возможности постараюсь подправить код под то, чтобы работал в файле с присутствием таких таблиц, но не именно с ними. Не абсолютное, конечно, решение, но хотя бы уже знаем, где собака зарыта - и то хорошо. Цитата:
Цитата:
Цитата:
![]() |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,250
|
Offtop: Никакой СПДС в "коробку" AutoCAD не внедрен. Ни для какой версии.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Цитата:
![]() Да, Вы правы. Все дело в СПДС. Нашел я СПДСфайл, из которого он подгружает свои таблицы. Причем, здесь все таблицы "чистой воды" и все работает. Цитата:
На всякий, может кому будет дико интересно. Прикреплю 2 файла с "чистой воды" таблицами: в первом когда-то в листах были таблицы СПДС(сейчас таблицы удалены и никаких видимых признаков их существования не осталось, но остались листы, в которых они были) и код не работает, во втором таблиц не было (то есть листы с таблицами были удалены, именно листы) и все работает! TCF не работает.dwg TCF работает.dwg Согласен, знание места зарытой собаки - ценно! Цитата:
Для 2016 автокада, насколько я понимаю и вижу. |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,634
|
Цитата:
Цитата:
Команда: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T) Выберите объект: ; ISiberiaBasicInscription: ISiberiaBasicInscription Interface ; Значения свойств: ; Application (RO) = #<VLA-OBJECT IAcadApplication 000000013f82a130> ; Document (RO) = #<VLA-OBJECT IAcadDocument 0000000040623618> ; EntityTransparency = "ПоСлою" ; Handle (RO) = "CBA" ; HasExtensionDictionary (RO) = 0 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000004a628d98> ; Layer = "EIR_025" ; Linetype = "Continuous" ; LinetypeScale = 1.0 ; Lineweight = -1 ; Material = "ByLayer" ; Name (RO) = "Боковая надпись - инвентарный номер СПДС" ; ObjectID (RO) = 53 ; ObjectName (RO) = "AcDbTable" ; OwnerID (RO) = 57 ; PlotStyleName = "ByLayer" ; Position = (20.0 90.0 0.0) ; Style = "Основная надпись [базовый]" ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 000000004a6377f0> ; Visible = -1 ; Поддерживаемые методы: ; ArrayPolar (3) ; ArrayRectangular (6) ; Copy () ; Delete () ; GetBoundingBox (2) ; GetExtensionDictionary () ; GetXData (3) ; Highlight (1) ; IntersectWith (2) ; Mirror (2) ; Mirror3D (3) ; Move (2) ; Rotate (2) ; Rotate3D (3) ; ScaleEntity (2) ; SetXData (2) ; TransformBy (1) ; Update () T А вот для обычной таблицы: Команда: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T) Выберите объект: ; IAcadTable: Интерфейс IAcadTable для работы с таблицами. ; Значения свойств: ; AllowManualHeights = 0 ; AllowManualPositions = 0 ; Application (RO) = #<VLA-OBJECT IAcadApplication 000000013f82a130> ; BreaksEnabled = 0 ; BreakSpacing = 13.75 ; Columns = 10 ; ColumnWidth (RO) = ...Индексированное содержимое не выводится... ; Direction = (1.0 0.0 0.0) ; Document (RO) = #<VLA-OBJECT IAcadDocument 0000000040623618> ; EnableBreak (RO) = ...Индексированное содержимое не выводится... ; EntityTransparency = "ПоСлою" ; FlowDirection = 0 ; Handle (RO) = "FC0" ; HasExtensionDictionary (RO) = 0 ; HasSubSelection (RO) = 0 ; HeaderSuppressed = -1 ; Height = 55.0 ; HorzCellMargin = 0.5 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000004a624dd8> ; InsertionPoint = (33381.8 29692.0 0.0) ; Layer = "0" ; Linetype = "Continuous" ; LinetypeScale = 1.0 ; Lineweight = -1 ; Material = "ByLayer" ; MinimumTableHeight (RO) = 47.6667 ; MinimumTableWidth (RO) = 35.0 ; ObjectID (RO) = 55 ; ObjectName (RO) = "AcDbTable" ; OwnerID (RO) = 58 ; PlotStyleName = "ByLayer" ; RegenerateTableSuppressed = 0 ; RepeatBottomLabels = 0 ; RepeatTopLabels = 0 ; RowHeight (RO) = ...Индексированное содержимое не выводится... ; Rows = 11 ; StyleName = "GOST_21.101_F3" ; TableBreakFlowDirection = 1 ; TableBreakHeight = 0.0 ; TableStyleOverrides (RO) = (1 2) ; TitleSuppressed = -1 ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 000000004a625610> ; VertCellMargin = 0.5 ; Visible = -1 ; Width = 185.0 ; Поддерживаемые методы: ; ArrayPolar (3) ; ArrayRectangular (6) ; ClearSubSelection () ; ClearTableStyleOverrides (1) ; Copy () ; CreateContent (3) ; Delete () ; DeleteCellContent (2) ; DeleteColumns (2) ; DeleteContent (2) ; DeleteRows (2) ; EnableMergeAll (3) ; FormatValue (4) ; GenerateLayout () ; GetAlignment (1) ; GetAttachmentPoint (2) ; GetAutoScale (2) ; GetAutoScale2 (3) ; GetBackgroundColor (1) ; GetBackgroundColorNone (1) ; GetBlockAttributeValue (3) ; GetBlockAttributeValue2 (4) ; GetBlockRotation (2) ; GetBlockScale (2) ; GetBlockTableRecordId (2) ; GetBlockTableRecordId2 (3) ; GetBoundingBox (2) ; GetBreakHeight (1) ; GetCellAlignment (2) ; GetCellBackgroundColor (2) ; GetCellBackgroundColorNone (2) ; GetCellContentColor (2) ; GetCellDataType (4) ; GetCellExtents (3) ; GetCellFormat (2) ; GetCellGridColor (3) ; GetCellGridLineWeight (3) ; GetCellGridVisibility (3) ; GetCellState (2) ; GetCellStyle (2) ; GetCellStyleOverrides (2) ; GetCellTextHeight (2) ; GetCellTextStyle (2) ; GetCellType (2) ; GetCellValue (2) ; GetColumnName (1) ; GetColumnWidth (1) ; GetContentColor (1) ; GetContentColor2 (3) ; GetContentLayout (2) ; GetContentType (2) ; GetCustomData (4) ; GetDataFormat (3) ; GetDataType (3) ; GetDataType2 (5) ; GetExtensionDictionary () ; GetFieldId (2) ; GetFieldId2 (3) ; GetFormat (1) ; GetFormula (3) ; GetGridColor (2) ; GetGridColor2 (3) ; GetGridDoubleLineSpacing (3) ; GetGridLineStyle (3) ; GetGridLinetype (3) ; GetGridLineWeight (2) ; GetGridLineWeight2 (3) ; GetGridVisibility (2) ; GetGridVisibility2 (3) ; GetHasFormula (3) ; GetMargin (3) ; GetMinimumColumnWidth (1) ; GetMinimumRowHeight (1) ; GetOverride (3) ; GetRotation (3) ; GetRowHeight (1) ; GetRowType (1) ; GetScale (3) ; GetSubSelection (4) ; GetText (2) ; GetTextHeight (1) ; GetTextHeight2 (3) ; GetTextRotation (2) ; GetTextString (3) ; GetTextStyle (1) ; GetTextStyle2 (3) ; GetValue (3) ; GetXData (3) ; Highlight (1) ; HitTest (4) ; InsertColumns (3) ; InsertColumnsAndInherit (3) ; InsertRows (3) ; InsertRowsAndInherit (3) ; IntersectWith (2) ; IsContentEditable (2) ; IsEmpty (2) ; IsFormatEditable (2) ; IsMergeAllEnabled (2) ; IsMergedCell (6) ; MergeCells (4) ; Mirror (2) ; Mirror3D (3) ; Move (2) ; MoveContent (4) ; RecomputeTableBlock (1) ; RemoveAllOverrides (2) ; ReselectSubRegion () ; ResetCellValue (2) ; Rotate (2) ; Rotate3D (3) ; ScaleEntity (2) ; Select (8) ; SelectSubRegion (10) ; SetAlignment (2) ; SetAutoScale (3) ; SetAutoScale2 (4) ; SetBackgroundColor (2) ; SetBackgroundColorNone (2) ; SetBlockAttributeValue (4) ; SetBlockAttributeValue2 (5) ; SetBlockRotation (3) ; SetBlockScale (3) ; SetBlockTableRecordId (4) ; SetBlockTableRecordId2 (5) ; SetBreakHeight (2) ; SetCellAlignment (3) ; SetCellBackgroundColor (3) ; SetCellBackgroundColorNone (3) ; SetCellContentColor (3) ; SetCellDataType (4) ; SetCellFormat (3) ; SetCellGridColor (4) ; SetCellGridLineWeight (4) ; SetCellGridVisibility (4) ; SetCellState (3) ; SetCellStyle (3) ; SetCellTextHeight (3) ; SetCellTextStyle (3) ; SetCellType (3) ; SetCellValue (3) ; SetCellValueFromText (4) ; SetColumnName (2) ; SetColumnWidth (2) ; SetContentColor (2) ; SetContentColor2 (4) ; SetContentLayout (3) ; SetCustomData (4) ; SetDataFormat (4) ; SetDataType (3) ; SetDataType2 (5) ; SetFieldId (3) ; SetFieldId2 (5) ; SetFormat (2) ; SetFormula (4) ; SetGridColor (3) ; SetGridColor2 (4) ; SetGridDoubleLineSpacing (4) ; SetGridLineStyle (4) ; SetGridLinetype (4) ; SetGridLineWeight (3) ; SetGridLineWeight2 (4) ; SetGridVisibility (3) ; SetGridVisibility2 (4) ; SetMargin (4) ; SetOverride (4) ; SetRotation (4) ; SetRowHeight (2) ; SetScale (4) ; SetSubSelection (4) ; SetText (3) ; SetTextHeight (2) ; SetTextHeight2 (4) ; SetTextRotation (3) ; SetTextString (4) ; SetTextStyle (2) ; SetTextStyle2 (4) ; SetToolTip (3) ; SetValue (4) ; SetValueFromText (5) ; SetXData (2) ; TransformBy (1) ; UnmergeCells (4) ; Update () T Как видим, для таблицы СПДС набор методов весьма скудноват. Что это за объект такой - " ISiberiaBasicInscription"? И вообще, причем тут Сибирь? VVA, под помощью, в которой я бы нуждался будь нужна эта обработка, я подразумевал советы и участие в переписании функции get_cell_by_pick без использования метода HitTest, а также get_cell_value без GetText. Хотя, я сомневаюсь, что это вообще возможно. Тем более, и не надо уже. Цитата:
|
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Думаю, мистики никакой, просто скопирована форматка из чужого чертежа
|
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Цитата:
Пользователь скопировал у кого-либо форматку. Как она определяется (прокси-объект или "Основная надпись") у этого пользователя мы не знаем (или я пропустил мимо глаз?). Пользователь продолжает пользоваться файлом сколько ему угодно, это нас и не интересует. Интересует то, что он хапнул ошибку при выполнении лиспа. И тут уже файл попадает к нам и мы делимся на 2 лагеря: - у кого нет спдс-модуля - видят прокси-объект - у кого есть - "Основную надпись". |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Какой язык перспективен для инженера-конструктора с условием | The_Mercy_Seat | Программирование | 705 | 17.03.2021 14:19 |
Считывание значение ячейки таблицы в виде Field в AutoLISP | tokhot | LISP | 9 | 08.01.2017 17:54 |
Может ли поле принимать текстовое значение ячейки таблицы? | Sergiy | AutoCAD | 23 | 01.08.2013 12:30 |