| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
01.08.2013, 12:14 | 6 | | #1 |
LISP. Создание поля (field), ссылающегося на текстовое значение ячейки таблицы.
Регистрация: 20.03.2008
Сообщений: 2,653
|
||
Просмотров: 126722
|
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,686
|
А нельзя ли вложением как lsp сохранить? А то, подозреваю, копируется из браузера как-то неправильно..?
...получилось скопировать. Идея хорошая, но имеются несколько ложек дегтя..
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! Последний раз редактировалось AlexV, 01.08.2013 в 14:33. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Все верно. Забыл я совсем про то, что ObjectID меняется от сеанса к сеансу. Исправил в #1.
Отчего ж нельзя? Спасибо, AlexV за первые выявленные баги, и Кулику Алексею за освежение памяти |
|||
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,686
|
Ну, тогды второй баг.. Не работает, однако, второй варьянт..
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,686
|
А2012 64b. Создается свойство, создается текст с полем, но поле "не читает" значение из свойств документа. Причем даже если вручную создать поле, - не читается. И категория поля при открытии в редакторе почему-то получается не "Документ", а "Системная переменная"
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
AutoCAD 2014 Eng x64 : создать поле со ссылкой на текстовую ячейку таблицы не удалось.
Кстати, а что будет, если таких полей хотя бы 10 штук со ссылками на 3 разные таблицы?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
То работает... то нет...
Пока не выловил из-а чего и в какой момент. AutoCAD 2011 + SPDS 7.1
__________________
Лучше не обещать, чем обещать и не исполнять. Последний раз редактировалось LynxM, 01.08.2013 в 18:04. Причина: добавил инфор. о ПО |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Почему-то коряво воспринимались символы круглых скобок в имени свойства чертежа. Исправил, сейчас работает на всех файлах, пробовал на 2-х автокадах. Попробовал, в рабочем файле создал 100 полей из 8-ми разных таблиц - время обновления с регенерацией - 1.5сек. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Добавил обновление в #1.
В общем случае, этот минус неустраним. Для большего удобства, как я уже говорил, можно использовать команду UTCF вместо штатной регенерации. Это зависит от того, как вы привыкли ее производить. Если горячими клавишами (это как раз мой случай), то можно назначить это сочетание команде UTCF. Если кнопкой, то настроить на эту кнопку макрос с вызовом UTCF. Если иными способами, можно переопределить штатную команду _regenall. |
|||
|
||||
Регистрация: 23.03.2012
Сообщений: 7
|
спасибо программа очень интересная.
имею только одну проблему. итак что я сделал. взял создал эксель таблицу записал в нее тексты. всего три ячейки первая - латинский шрифт вторая - русский третья - иврит. сделал связь таблицы эксель с файлом чертежа. импортировал таблицу начал делать поля. с латинским и кириллицей проблем нет если я вставляю иврит поле превращается в вопросительные знаки. вопрос, что я делаю не так? |
|||
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
|
Личное наблюдение, может кому пригодится.
Если исходным значением для команды TCF будет поле, созданное с помощью команды TCF, то для обновления его значения команду UTCF нужно использовать 2 раза. Если поле TCF создано из поля TCF, созданного из поля TCF, то команду UTCF нужно использовать 3 раза. Ну и так далее. Да, это абсолютно логично, если понимать алгоритм работы программы. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Может, это и логично, но не совсем удобно и уж точно совсем не правильно. Я не рассчитывал на такой подход и постараюсь по мере возможности исправить этот баг. Но возникает еще одна мысль: может, дать пользователю вместо вставки одного поля вставлять поля до тех пор, пока он не нажмет Enter?
|
|||
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
|
Цитата:
----- добавлено через ~1 мин. ----- Ну или сделать настроку "Несколько", как вариант |
|||
|
||||
Регистрация: 20.12.2012
Сообщений: 8
|
Очень интересный для меня Lisp.
Спасибо большое. Но для полноты его использования для моего случая хотелось бы услышать возможность такого варианта. Место для вставки текста не указывать вручную, а например мне необходимо что бы текст вставлялся в исполнительные в определенные места и с определенным (одинаковым ) шагом. Если есть такая возможность, то буду признателен. Можно попытаться мне(чайнику) объяснить что примерно поменять. И я буду стараться если у вас нет времени на это. Заранее благодарен. Адрес эл. почты [email protected] |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Всё равно ничего не понял. В файле не нашлось ни одного объекта "Таблица". Те "таблицы", что там есть - это набор линий и текстов - с ними эта программа не работает.
Да и потом вовсе непонятна задача. Для чего может понадобиться жестко задавать в программе координаты точек вставки полей? Предполагаю, что используется шаблон, в котором от проекта к проекту не меняется расположение чертежей в пространстве модели и их количества. Но раз так, почему бы тогда просто не настроить один раз шаблон так, чтобы поля уже стояли на нужных местах и ссылались на нужные объекты? В общем, пока больше вопросов, чем ответов... |
|||
|
||||
Генплан Регистрация: 16.03.2014
Сообщений: 33
|
Интересно. Вопрос к автору - если используются "Свойства чертежа" как буфер, не проще ли сразу наполнять данными вкладку "Прочие" и по необходимости вставлять поля в нужные места со ссылкой на Документ? Например, под задачу автоматического заполнения штампов на всех листах, мне видится, так проще работать. Сделать шаблон с настроенными листами и свойствами документа, работать, а как надо заполнить штампы - зашел в свойства и забил значения. И никакой таблицы в модели держать не надо.
Но как понимаю задача была в другом. За лисп спасибо - будем юзать |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Так без таблиц и без наличия подобной штатной возможности сама идея такого подхода и не родилась бы. ----- добавлено через ~21 мин. ----- Цитата:
Признаюсь, мне с самого начала не нравилась мысль использовать в роли буфера вкладку "Прочие", поскольку этот инструмент при использовании данного лиспа становится практически недоступным для других целей. И честно говоря, есть желание это исправить. Нужно создать (или изыскать) в файле возможность для хранения неограниченного числа строковых значений, а также для их программного чтения и изменения. Может, есть у кого мысли, как это реализовать? Словари? Расширенные данные? Кто может задать направление мысли? |
|||
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
|
Пока в голову приходит только примитивный вариант - блок с атрибутами
|
|||
|
||||
skkkk
Вот это-то и обидно при наличии возможности автодеском не реализовано, а инструмент очень мощный -> вычисления в самом файле, омрачает ситуацию что автор таких вычислений с ними разберется, а вот сторонний пользователь вряд ли, пока нашел половинчатое решение, вычисление в живой таблице связь полями и вышеприведенным лиспом с мтекстом и сброс полей в мтексте. Автодеском много чего не реализовано, не дозволено им конкурентов Америке плодить ...
__________________
tc71 |
||||
|
||||
Можно обойтись встроенными средствами!
создаем связь с экселевской таблицей с настройками: 1. разрешить обновление экселя из акада 2. передавать в акад вычисленные ячейки Далее, работаем с таблицей в акаде, как с обычной таблицей, но при необходимости отправляем изменения в экселевский файл. Сразу после изменений, появляется уведомление о изменении экселя и обновляем таблицу в чертеже. При необходимости ссылки на другую текстовую ячейку, в акаде просто пишем обычную ссылку типа =B2 и акад как обычно заменяет ее символом ошибки типа #### после отправляем обновления в эксель и обновляем текущую таблицу - результат вычисленная ячейка и формула для ссылки в экселе...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
ОПС Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128
|
Я как-то примеривался к таблице autocad...пока тормознул...не до этого... Противникам этого метода - было желание иметь все нужные данные в самом чертеже и визуально их контролировать.
|
|||
|
|||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Цитата:
Цитата:
Сначала было подумал, что можно обойтись встроенными средствами для создания полей, ссылающихся на текстовые значения ячеек таблицы Автокада, но потом понял, что речь идет о написанном постом выше - связке таблиц AutoCAD - Excel. Цитата:
а) одни из них, такие как адрес или ФИО заказчика, нужно вписать от руки; б) другие (оборудование, материалы) удобней выбрать из выпадающего списка допустимых значений; в) над третьими, прежде чем использовать их в чертеже, нужно сначала произвести некоторые вычисления, причем часто те, которые не поддерживают таблицы в Автокаде, г) часто исходные данные в процессе или по окончании проектирования могут измениться, и нужно с минимальными трудозатратами, ничего не забыв, заменить их по всему проекту, в том числе, и в текстовой части. В итоге я пришел к тому, что ввод исходных данных организовал в Excel - он позволяет выполнить перечисленные условия в 99.9% случаев. Плюс появилась удобная возможность перенести все текстовые документы из Автокада, в котором автоматизация, например, пояснительной записки сопряжена с немалыми трудностями, да и не под это Автокад заточен. Далее таблица из Excel связывается с таблицей в Autocad, как указано Евгением двумя постами выше, а уже затем создаются поля со ссылкой на ячейки таблицы программой, выложенной в шапке темы. Что мы в итоге имеем? Один минус - появление в проекте связки AutoCAD<->Excel, со всеми вытекающими проблемами: обязанности таскать оба файла рядом, риск нарушения связи, и некоторые другие... И плюсы: - удобный ввод исходных данных, - визуальное отображение всех исходных и вычисленных данных на чертеже в виде таблицы, - удовольствие при внесении изменений в исходные данные, когда проект уже полностью готов, - одним кликом приводим все нужные значения в соответствие с данными в Excel, - перенос текстовой части, в которой также фигурирует много исходных данных, из Автокада и более удобная работа с текстовыми и табличными документами в Excel. Последний раз редактировалось skkkk, 17.01.2015 в 23:51. Причина: добавил пункт "г" |
||||
|
||||
Цитата:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
В общем-то да, учитывая, что удовольствие - это основа счастья, и вспоминая школу, хочу добавить: "Человек создан для счастья, как птица для полета..." (с) Короленко.
Хотелось бы узнать ваше, Евгений, мнение по поводу конструктивной части программы. Расскажите, пожалуйста, как бы вы поступили в данном случае? Где бы хранили данные? Или как бы предотвратили затирание словарей в процессе очистки? И вообще, что вы думаете по поводу решения данной задачи? И еще: какой на ваш взгляд способ внесения в проект исходных данных самый оптимальный и удобный для пользователя? |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
VVA, спасибо. Честно говоря, не уделял еще внимания этому вопросу, в большей степени потому, что спросом не особо пользуется. Написал я эту возможность в качестве потенциальной, как одну из тех, которая логически напрашивалась и гипотетически могла бы кому-то понадобится для того, если поле надо вставить не изменяя весь существующий текстовый объект целиком, а в определенное место текстового объекта посредством Ctrl+V. Добавлю, пожалуй, на досуге, хотя б для того, чтоб не делать программу бесперспективной на корню . Осталось подумать, как и когда добавлять поле в буфер обмена: ультимативно сразу при указании ячейки-источника или только после того, как пользователь нажмет правой кнопкой мыши в ответ на запрос точки вставки поля или текстового объекта?
|
|||
|
||||
ОПС Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128
|
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Offtop: Ну Автокад у нас априори. Не скажу насчёт Libre, но в OpenOffice всё работает, даже макросы, с небольшими оговорками.
Я бы с радостью рассмотрел альтернативные варианты, но сколько ни думал, ничего лучше и удобней для пользователя придумать не смог. Однако, это вопрос для отдельной темы. |
|||
|
||||
Регистрация: 07.10.2008
Сообщений: 94
|
Вообще супер, именно то что нужно!! очень долго мучились создавая отдельные таблицы из одной ячейки в тех местах где достаточно было вставить поле, которое ссылается на текстовую ячейку в таблице с расчетными данными... в одном файле получалось где то 10 связей, сейчас понадобилось около 30. Отличная программа, ничего лишнего и очень функционально!
Огромное СПАСИБО!! |
|||
|
||||
Цитата:
Для сброса таких полей необходимо иметь возможность выделять поля именно этого вида, для этого нужно иметь возможность их отфильтровать от встроенных. P.S. Меня не перестают удивлять энтузиасты функционал программ которых, превосходит функционал встроенный в продукт с ТАКОЙ стоимостью !!!
__________________
tc71 |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Avodo, это хорошо, что понравилось, спасибо за добрые слова.
Не совсем понял, вроде стало лучше, но было 10 - стало 30??? Может, было 100? Цитата:
Спасибо, perpetule. Просто для меня это весьма и весьма увлекательно. И мало-помалу становится еще все более и более полезным. |
|||
|
||||
Хотелось бы предупредить пользователей, при копировании одновременно стандартных -> источника поля и самого поля на этот источник -> создается копия такой пары (обновляется), с полями skkkk этого не происходит, связь теряется.
Пути решения - расчетную часть держать в одном экземпляре, исходники, теорию и результаты расчетов в многострочный текст полями для каждого применения -> копирование и сброс полей. Успешно реализован расчет зон молниезащиты непосредственно в dwg файле (несколько площадок). Автору огромное спасибо! В том числе за помощь! В свое время пытался оформить штампы таблицами, надо поискать, с программой обновление возможно без использования полей подшивки или свойств DWG, достаточно таблицы-штампа-образца (все в одном DWG).
__________________
tc71 Последний раз редактировалось perpetule, 29.01.2015 в 12:36. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
perpetule, справедливо. Во-первых, при копировании через буфер обмена значения свойств чертежа из вкладки "Прочее" не переносятся в другой чертеж. Во-вторых, уникальный в пределах файла буквенно-цифровой индекс таблицы (handle) при вставке ее в другой чертеж изменится, а адресация полей строго привязана к этому индексу. Скорее всего, метод переноса этой связи (источник-поле) между файлами, который реализован в Автокаде, недоступен из лиспа, однако сделать это возможно иным путем:
1. Создать реактор на команду копирования, который активизирует процедуру переноса между файлами, либо иначе придется производить такое копирование посредством отдельной команды. 2. При запуске такой процедуры одним из вышеуказанных способов к каждой таблице, на которую имеются ссылки в виде полей в данном файле, прикрепить расширенные данные - строку содержащую в себе handle исходной таблицы, либо некое число, созданное, как вариант, генератором случайных чисел. Однако, при таком подходе есть шанс, хоть и небольшой, напороться на коллизию - ситуацию, когда номер копируемой таблицы совпадет с номером таблицы, уже существующей в новом файле - тогда поле может сослаться не на ту таблицу. К тому же, расширенные данные могут использоваться другими программами, в следствие чего возможен их конфликт. 3. Обеспечить перенос свойств вкладки "Прочее" из одного файла в другой. 4. В новом файле (по реактору на команду вставки) назначить каждому свойству адрес новой таблицы, сопоставляя его с адресом в расширенных данных. Есть мысли и желание переписать программу с целью освободить вкладку "Прочее", которая может понадобиться пользователям для других целей. Несомненно, обеспечив поддержку файлов, созданных в текущей версии, при этом по команде "UTCF" переводя старые файлы в формат новой версии незаметно для пользователя, дабы не доставлять ему проблем. Если появится все же для этого время, постараюсь разобраться с двумя проблемами, выделенными жирным в пунктах выше, а также с третьей (точнее самой первой) проблемой хранения данных в чертеже без использования вкладки "Прочее" Свойств чертежа и без риска потерять эти данные при очистке. Очень жаль, что никто из настоящих программистов не заинтересовался данной темой и некому мне подсказать направления к решению данных вопросов. Но я постараюсь разобраться, а разобравшись, переписать код, не забыв добавить функцию копирования поля в буфер обмена и возможность удалять (преобразовывать в текст) поля, созданные данной программой. А пока, кроме могу предложить альтернативный путь решения, пришедший на ум: сохранять копию файла - либо в проводнике, либо через "Сохранить как..." - и в нее уже копировать все, что нужно из других файлов. При таком подходе связи сохранятся. Правда и тут есть свои проблемы: например, если в разных файлах настройки одноименных текстовых или иных стилей, слоев, состав описаний блоков будут разными, то результаты копирования могут быть неожиданными. Будьте бдительными. И не забывайте о таком инструменте, как шаблоны. perpetule, спасибо за конструктивные замечания! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Offtop: skkkk, если интересно мое мнение (код писать не буду, тут и так наворочено столько... )
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Еще как!
Цитата:
Цитата:
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Кстати, пока не забыл: словари можно записывать и на объекты. Вроде бы они не уничтожаются чисткой. Даже если принудительно чистить словари dwg.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 07.10.2008
Сообщений: 94
|
Цитата:
Еще писал что у меня было 10 связей - отдельных таблиц, это было не удобно, обновлялось долго, а бывало что и слетали все. При разработке нового проекта добавилось много оборудования вот и связей стало 30... Также есть момент, что если файл с полями созданными через TCF вставить в другой как внешнюю ссылку - то поля превратятся в решетки, думаю уже об этом говорилось. Было бы идеально исправить, но и без этого польза неимоверная от TCF !! А то что там не копируются эти поля - так не для этого и созданы. Даже если штатные поля копируются, не значит что поля TCF должны. Ведь штатные вообще текст из ячеек не читают. Поэтому лично я использую в основном штатные поля, а для обозначения марок оборудования на схемах и в спецификациях применяю TCF. Очень выручает!! Последний раз редактировалось Avodo, 01.10.2015 в 14:20. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
На мой взгляд проблема в том, что 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,653
|
У меня тоже не работает.
Цитата:
Как мы знаем, лисп в Автокаде делится на две ветки: 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,844
|
Offtop: Никакой СПДС в "коробку" AutoCAD не внедрен. Ни для какой версии.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Цитата:
Да, Вы правы. Все дело в СПДС. Нашел я СПДСфайл, из которого он подгружает свои таблицы. Причем, здесь все таблицы "чистой воды" и все работает. Цитата:
На всякий, может кому будет дико интересно. Прикреплю 2 файла с "чистой воды" таблицами: в первом когда-то в листах были таблицы СПДС(сейчас таблицы удалены и никаких видимых признаков их существования не осталось, но остались листы, в которых они были) и код не работает, во втором таблиц не было (то есть листы с таблицами были удалены, именно листы) и все работает! TCF не работает.dwg TCF работает.dwg Согласен, знание места зарытой собаки - ценно! Цитата:
Для 2016 автокада, насколько я понимаю и вижу. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Цитата:
Команда: (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
Новосибирск
Сообщений: 433
|
Думаю, мистики никакой, просто скопирована форматка из чужого чертежа
|
|||
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
|
Цитата:
Пользователь скопировал у кого-либо форматку. Как она определяется (прокси-объект или "Основная надпись") у этого пользователя мы не знаем (или я пропустил мимо глаз?). Пользователь продолжает пользоваться файлом сколько ему угодно, это нас и не интересует. Интересует то, что он хапнул ошибку при выполнении лиспа. И тут уже файл попадает к нам и мы делимся на 2 лагеря: - у кого нет спдс-модуля - видят прокси-объект - у кого есть - "Основную надпись". |
|||
|
||||
Цитата:
на 99.99% так и есть
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Offtop: RNB, видимо, на том компе, где я тестировал, СПДС все же установлен. Иначе я это объяснить не могу. Владелец им не пользуется (равно как и я, причем из-за таких вот проблем), он специально спросил сисадмина - тот не помнит. Да и в общем-то, не суть.
----- добавлено через ~17 мин. ----- Что и требовалось доказать. Проверил на своем 2011-м (точно без СПДС) - там эта "недотаблица" (или "пере-"?) видится как прокси, код работает, и при попытке ткнуть в нее код справедливо ругается, что это не таблица. Так что для работоспособности кода при установленном СПДС встает лишь задача "отфильтровать" такие объекты прежде, чем подсовывать набор HitTest'у. VVA, подскажи, пожалуйста свои мысли, как это можно лучше сделать, учитывая, что они выбираются ssget'ом при фильтре (0 . "ACAD_TABLE")? Создавать набор через vla-методы? Или фильтровать на основе какого-либо свойства из дампа, приведенного мною тремя постами выше? |
|||
|
||||
Цитата:
Цитата:
Меня смутило поэтому я и написал потому как не понимаю, как он, вообще, может быть внедрен! Цитата:
+ |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Я имел в виду того, на чьей машине с 2015-м Автокадом я проверял работу программы. Это он утверждал. У меня только 2011-й под рукой, и я решил не конвертировать файл в версию 2010, а по удаленке проверить у него. В итоге повезло, что у него стоит-таки СПДС, так как без него TCF работает, и сконвертировав в 2010-ю версию, я бы, наверное, долго у себя еще искал бы причину. В общем, по возможности постараюсь доработать код, надо только понять, как решить вопросы из моего предыдущего поста.
|
|||
|
||||
Если СПДСовские таблицы так же отбираются как ACAD_TABLE, то добавил фильтрацию по наличию/отсутствию метода 'HitTest
Но нужно проверить на машине с СПДС. Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
VVA, есть ли у Вас возможность посодействовать решению этих вопросов, что б не ходить такими долгими путями через промежуточные элементы
Цитата:
|
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
d.mOnII, valrond, работаю над этим сейчас, но катастрофически не хватает рук.
VVA, проверил на машине с СПДС - это то, что надо, чтобы отсеять таблицы НЕ Автокада. Внедрю обязательно в следующем выпуске. Поскольку в то время, когда я собирал с помощью VVA куски кодов со всей Сети, я только начинал вникать в лисп, и объединить все эти коды в один у меня получилось достаточно дилетантским образом. Хотя программа и выполняет поставленные задачи, мне не очень нравится момент, который я придумал тогда. А именно, при запросе второй точки для вставки поля запрашивается именно точка, а не объект. Сейчас это решение мне кажется корявым. С одной стороны я тогда стремился к универсальности: кликнул в пустое место - создался текстовый объект с полем; кликнул на текстовый объект - поле добавилось в него; кликнул в ячейке - и поле там. Но с другой стороны, допустим, если работать в строительных чертежах, где все в мм (я чаще всего работаю на подосновах и там метры), то алгоритм по обработке второго запроса дает сбои. Но эти сбои я уже нашел, как обработать. Поскольку я и коллеги сами этим кодом уже давно не пользуемся ввиду использования более продвинутых технологий под наши нужды, прошу совета пользователей данного лиспа, а также всех у кого есть мысли на этот счет - высказаться на предмет того, стоит ли оставить эту универсальность второго клика или ввести две или три команды: одна будет вставлять на пустом месте, вторая - в таблицу (оба запроса - точки), третья - в текстовый объект, в т.ч атрибут (запрос на выбор объекта), четвертая, например, вставляла бы содержимое поля в буфер обмена, ведь не всегда надо менять все содержимое текстового объекта? Первую со второй, конечно, можно объединить, но тогда несколько нарушается логичность интерфейса. Есть еще третий вариант, тоже универсальный, в противопоставление первому: ультимативно при запросе второй точки или объекта вместо перекрестья - прямоугольник выбора - и при указании на пустое место или ячейку таблицы обработать это тоже достаточно просто. На днях попытался обработать атрибуты своим корявым, но универсальным методом вставки поля в текстовый объект, но код не заработал. Кто сможет объяснить, почему конструкция Код:
- не срабатывает с атрибутами (комментарии в коде)? Если вместо атрибута там текст или мтекст - все в порядке, а с атрибутом - ни в какую! Пытался также с "ATTDEF" - результата нет. Поскольку основные использованные функции тут от Kpblc'а и VVA, то с вас основной спрос . |
|||
|
||||
если интересно и возможно реализовать, то как и в каде можно сделать:
вводится одна команда на создание поля первое действие - выбираем объект из которого берем информацию (текст, ячейка таблицы и т.д.) второе действие - по умолчанию ставится новый текст с полем, но есть возможность выбора (стрелками вверх/вниз вызывается контекстное меню) где пользователь выбирает нужную позицию и нажатием Ентер либо Пробел активирует дейсвие ну а дальше ищет объект, который выбрал (атрибут либо ячейка таблицы и т.д.) |
||||
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
|
Цитата:
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
и лично я бы рекомендовал пользоваться где возможно все же стандартными полями, как более общедоступными и надежными. В новой версии, которая сейчас у меня на карандаше и которая подверглась серьезным изменениям, но еще не готова к выпуску, я обработал уже вариант, когда пользователь жмет ячейку, а в ней число, а не текст, то вставляется стандартное поле. Оно и понятно стремление многих воспользоваться TCF даже при наличии стандартной возможности - ведь для того, чтобы вставить поле стандартными средствами, необходимо сделать куда больше кликов. Тому, кто согласен со мной в этих рассуждениях, рекомендую попробовать quickfield от Lee Mac. Там используются штатные поля. Все же не хочется заниматься повторением имеющегося функционала. Во-вторых, если даже мы все же решим, и я захочу добавить в обработку текстовые объекты, то как это сделать? Опять те же грабли: штатный автокадовский выбор ячейки таблицы - крестик и запрос точки, а выбор объекта - квадратик и запрос объекта. Впрочем, пока я склоняюсь к тому, чтобы обрабатывать только ячейки таблиц. Если есть желание и мысли как, то попробуйте меня переубедить. Цитата:
Итак, имеем варианты (пока принимаем, что первый запрос - точка, и она должна быть указана только внутри таблицы): 1. Второй запрос - тоже точка, курсор в форме крестика (то, как сейчас, но дошлифованное с учетом всех выявленных багов, в т.ч. обработка атрибутов). 2. Второй запрос - объект, курсор в форме квадрата. Если выбран текстовый объект (в т.ч. атрибут, конечно), он модифицируется, если клик внутри ячейки таблицы - вставка в ячейку, при этом вставится в ту ячейку, где был центр квадрата в момент клика. Если клик на пустом месте - вставка нового объекта, - в общем все как сейчас, отличие только в форме курсора при втором запросе. 3. Второй запрос - точка, курсор в форме крестика, правая кнопка вызывает меню 4. Второй запрос - точка, курсор в форме крестика, стрелка вниз вызывает меню 5. Второй запрос - объект, курсор в форме квадрата, правая кнопка вызывает меню 6. Второй запрос - объект, курсор в форме квадрата, стрелка вниз вызывает меню. В планах на развитие продумываю переход от использования пользовательских свойств чертежа к использованию словарей, попробую додумать возможность копирования таблицы-мамы с ее полями-детками в новый чертеж и исправить отображение таких полей во внешних ссылках. Правда скоро - не обещаю. Эти три пункта уже в следующих релизах, сейчас основная цель обработать атрибут и навести порядок в коде, используя новые знания по сравнению с моментом написания первой версии. Прошу высказать мнения, по итогам я приплюсую к ним свое, продвинем вариант, одобренный большинством голосов. |
|||
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
|
2й или 5й.
Один вопрос, при вставке в аттрибут/текст/ячейку - будет заменять её содержимое или добавлять в начало/конец содержимого? UPD. Исправлена опечатка (вместо 5го изначально написал 6й) Последний раз редактировалось RNB, 27.11.2015 в 05:42. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
По идее - меняется полностью - как сейчас, так я думал и оставить, таким же образом и атрибут хочу прикрутить. А для того, чтоб добавить в любое место имеющегося текста я придумал внедрить занесение поля в буфер обмена. Нетрудно сделать, чтоб добавлялось в конце. Но кому-то нужно будет в начале. А кому-то через пробел, кому-то через точку с запятой. Дабы угодить всем, придется делать дополнительные запросы, а при частой работе с командой они раздражают. А так - кликнул ячейку, отменил команду, ничего не вставляя, сделал двойной клик на тексте, вставил в нужное место курсор, Ctrl+V. Вот еще тут вопрос: делать ли независимо ни от чего занесение поля в буфер обмена или же сделать отдельную команду для этого? Которая сделает все то же, но еще и занесет поле в буфер? Или вообще отдельную команду, которая сначала спросит ячейку, а затем просто добавит поле в буфер, а может, и предложит выбрать текстовый объект, который откроет по одному щелчку, как _.DDEDIT. Правда как тут поступить с атрибутом - вопрос. Не знаю программного способа, как открыть его в редакторе, наподобие того, как он открывается при двойном клике с зажатым CTRL. В случае с принудительным добавлением поля в буфер есть вероятность, что пользователь будет ожидать другого содержимого буфера, который он наполнил этим содержимым до вызова TCF.
Последний раз редактировалось skkkk, 26.11.2015 в 14:46. |
|||
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
|
Цитата:
Цитата:
Цитата:
И небольшое лирическое отступление, о том, как я получил эту команду. Может пригодится кому. Когда мне нужно узнать команду, которой пользуется Автокад при двойном клике, или, как в этом случае, двойном клике с CTRL, я начинаю запись макроса и провожу указанные действия. Команды отражаются в макросе. Так я, например, выяснил команду редактирования текста мультивыноски. |
|||
|
||||
Регистрация: 05.12.2014
Сообщений: 6
|
Скажите пожалуйста, что необходимо изменить в тексте программы TCF чтобы при выборе пустой ячейки таблицы выводить в текст не "----" а ""?
Или, если это невозможно, выводить те же "----", только с белым цветом шрифта? Последний раз редактировалось hardbringer, 30.12.2015 в 14:57. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
hardbringer, подобное поведение, когда при пустой ячейке поле принимает вид "----", зашито в ядре программы, и изменить его лиспом нельзя.
С белым цветом шрифта можно сделать, но это несколько неразумно на мой взгляд. Как менять цвет обратно на черный, когда ячейка перестанет быть пустой? Вручную? Или назначать реактор на изменение таблицы? Не нравятся мне эти варианты. Предлагаю иное решение. Если указанная ячейка-источник окажется пустой, то добавить в нее пробел (программно). Правда при этом поле "потеряется", точнее, текстовый объект, в котором оно находится, если в нем содержится только это поле и более ничего, пропадет из вида, и его нельзя будет выбрать мышкой. Аналогично тому, как если бы в мтексте оставить один пробел. При этом можно добавить скрытие заднего плана этого текстового объекта и цвет фона назначить 255,255,255 - то есть белый на печати. Тогда этот текстовый объект можно будет выбирать и редактировать. Попробуйте, если устроит такой вариант, сделаю. |
|||
|
||||
Цитата:
Цитата:
Цитата:
|
||||
|
||||
Регистрация: 05.12.2014
Сообщений: 6
|
Цитата:
upd. И как это сделать не подскажите? Последний раз редактировалось hardbringer, 13.01.2016 в 17:22. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Цитата:
Боюсь, подсказать тут не получится, поскольку там вопрос не простой замены пары символов в коде, но внедрить эту возможность в ближайшее время также постараюсь. Вот только добавлять ли программно такому тексту белый фон? Убирать его в случае нужды после придется вручную. Или оставить без фона, и тогда одиночный мтекст, содержащий такое поле нельзя будет выбрать мышкой? |
|||
|
||||
Цитата:
одинаково хорошо читается и у тех кто работает на белом фоне, и утех кто на темном.
__________________
tc71 |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
perpetule, с точки зрения универсальной видимости - да, но ведь этот цвет будет выводиться на печать. Думаю, за такое юзеры спасибо не скажут. Тут, я так понимаю, смысл в том, чтобы при пустой ячейке поле, ссылающееся на нее, оставалось пустым до того, как в ячейке не появится текстовое значение. А раз черточки поля (----) при ссылке на пустую ячейку не устраивают, то, предположительно, и фон тут будет лишним на бумаге.
|
|||
|
||||
Регистрация: 05.12.2014
Сообщений: 6
|
Цитата:
Если так получится сделать, это будет просто шикарно. |
|||
|
||||
Цитата:
P.S. Все сказанное ИМХО, холивар по этому поводу излишен. Холивар или холивор (от англ. holy war, «священная война»)
__________________
tc71 |
||||
|
||||
Регистрация: 30.10.2008
Сообщений: 53
|
Очень годный лисп.
Кому не нравятся черточки, то проще пробелы вводить в исходную таблицу. Посоветуйте способ как весь этот огород (исходная таблица, польз. поля и наконец мои блоки в атрибутах котрых ссылки на эти поля) скопировать в другой файл с сохранением связей. При копировании только элементов чертежа поля не перенесутся и поменяется handle таблицы. У меня одна большая таблица, всего полей 200 получится. Что можно придумать? |
|||
|
||||
Регистрация: 30.10.2008
Сообщений: 53
|
RNB, мда...
Может подскажет кто-то как сделать поиск с заменой по всем field expression в чертеже? Где то тут советовали использовать редактор из vetcad, но у меня не сработало. И еще: как победить знаки вопроса вместо символов куба, квадрата? (00B2, 00B3) Последний раз редактировалось quazi, 18.04.2016 в 17:17. |
|||
|
||||
В текстовом стиле поменять шрифт на "понимающий" символы куба и квадрата
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 30.10.2008
Сообщений: 53
|
VVA, эти символы есть в шрифте, теряются они при переносе содержимого ячейки таблицы в пользовательское свойство чертежа, уже в свойстве получаются вопросы.
Если руками создать свойство и вписать в него любой символ, то поле ссылающееся на это свойство будет нормально отображать весь юникод, как минимум эти символы. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Я поражаюсь... Тема вроде вообще не о пользовательских свойствах чертежа.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
инжинириг Регистрация: 26.01.2012
Сообщений: 20
|
Цитата:
Я имел ввиду в один клик, выделить любой текст, а далее при кликании любого другого текста вставлялось поле (ссылка) на первый выеденный |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
pobat, у Lee Mac'а есть такая программа - Quick Field (ссылка вверху страницы на lsp-файл).
Цитата:
Код:
|
|||
|
||||
Регистрация: 08.04.2012
Сообщений: 16
|
приветствую!
а как эту прогу (как функцию или подпрограмму) использовать для копирования значения определенных содержимого ячеек строки одной таблицы и вставки в определенное поле ячейки другой таблицы. для лучшего понимания прикладываю dwg. Алгоритм такой: из таблицы извлечения данных смотрим на ячейку 1 столбца строки N и по значению этой ячейки выбираем поля в таблице спецификации, куда копировать содержимое ячеек строки. Прогоняем все строки и увеличиваем кол-во в спецификации по мере продвижения вниз по таблице извлечения данных. Надеюсь, понятно пояснил. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
greyser, боюсь, что воплощение подобного алгоритма потребует в разы (если не в десятки раз) больше кода, чем сама эта прога (TCF).
Во-первых, TCF не приспособлена для вставки поля в часть ячейки таблицы - она заменит полностью содержимое ячейки. Думаю, тут лучше писать все с нуля, возможно, используя некоторые куски кода из TCF, если там действительно будет необходимость ссылаться на текстовые ячейки таблицы. Во-вторых, алгоритм нужно прорабатывать куда более серьезно, чем поместить его в три строки текста, как в #94. И делать это должен, скорее всего, сам программист, который сможет взяться за это. При этом он должен основательно вникнуть в рабочий процесс, и скорее всего научить пользователей делать работу по-новому, так, как это будет необходимо программе - ни шага в сторону. По опыту могу сказать, что если это и реально, то стоить будет очень недешево. |
|||
|
||||
Регистрация: 08.04.2012
Сообщений: 16
|
Цитата:
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Offtop: Думаю, я бы в данном случае не связывался с полями. И с извлечением данных - тоже. Анализировал бы нужным образом схему, составляя по результатам анализа структурированный список,который содержал бы списки строк в количестве, равном числу столбцов. А затем эти строки из списка загонял бы программно в таблицу. |
|||
|
||||
Регистрация: 09.02.2017
Сообщений: 2
|
Всем добрый вечер. Про лисп узнал сегодня, так что пожалуйста не ругайте, если туплю.
У меня есть следующая задача. В эксель таблицу вводятся числовые и текстовые данные. Таблицу я загрузил в модель када, и теперь данные при изменении в эксель меняются в кадовской табличке (после обновления связи). На чертеже у меня есть текстовые поля, которые должны брать текст из таблички. После курения интеренета, я понял что так просто расставлять текст по чертежу из таблички не выйдет и попал в эту тему. Загрузил данный лисп скрипт в кад и при наборе команды textcellfield выходит сообщение нет определения функции: vla-endundomark. У меня есть подозрения, что я что-то делаю не так а может и вовсе пишу не в ту тему. Поясните пожалуйста. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Это странно, поскольку (vl-load-com) - функция, подгружающая Visual LISP, в коде присутствует. Похоже на какой-то сбой в системе AutoCAD, слышал о таком, но нечасто.
Какая версия AutoCAD? Нет ли возможности попробовать на других машинах с той же версией? |
|||
|
||||
добрый день.
При вставке текстового поля данным лиспом из таблицы возникает слдующая проблема: 1. при вставке в файл внешней ссылки, в которой присутствует данное поле, в конечном файле это поле не отражается, точнее отражается как ### 2. пробовал решить проблему промежуточным элементом с текстовым полем, в итоге пи вставке внешней ссылки в конечном файле видно следующее: текстовое поле первое отражается как ###, второе текстовое поле со ссылкой на первое отражается корректно в автокаде, но при печати в ПДФ - снова ### скрины во вложениях. |
||||
|
||||
Регистрация: 07.10.2008
Сообщений: 94
|
Выражаясь простым языком (профи поправят) поля созданные этим лиспом берут информацию из текущего файла, не совсем как хотелось бы по логике, но вот так. Продумайте другой алгоритм работы, возможно сделать таблицу в Экселе и во все файлы загрузить ее через диспетчер связей. Далее следите чтоб все поля TCF напрямую ссылались на таблицу...
Скорее всего вы закидываете все файлы в один как внешние ссылки для автоматической печати? думаю можно придумать вариант с печатью другим способом, например попробуйте Диспетчер подшивок. |
|||
|
||||
Цитата:
Тем не менее для решения вопроса либо отрегулировать печать текстового поля из внешней ссылки либо вовсе отказаться от TCF и печатать ручками. тут, учитывая что все же отражение текстового поля во внешней ссылке можно добиться путем промежуточного объекта (внесенного на дефпоинт) с текстовым полем, необходимо как-то сделать что бы отражающие символы все же пропечатывались в ПДФ. (ведь несколько странно, что, отражаясь в модели, не печатаются в ПДФ) поэкспериментировал с атрибутами, но один фиг - только символы ### Последний раз редактировалось d.mOnII, 10.05.2017 в 13:26. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Что значит "поля перестали работать", интересно? А если вручную создать поле - оно тоже перестает работать?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 25.03.2013
Сообщений: 47
|
Отличнейший lisp, очень помог при автоматизации в проектах - сейчас очень много проектов КЖ к примеру, где меняются отметки, геология, длина свай, название объекта, шифр. Проект для меня с использованием этого лиспа - заполнить табличку в Екселе (10 минут), поправить геологический разрез (10 минут) и все "ЭКСПОРТПДФ". Огромное спасибище авторам!!!!
|
|||
|
||||
Регистрация: 25.03.2013
Сообщений: 47
|
Доброго времени суток всем.
Уже сделал порядка 50-60 проектов используя этот лисп. Но тут столкнулся с проблемой - в файле-доноре (образце) все работало как часы. Взяв этот файл за основу - сменил в екселе текст в ячейках, все обновилось. Но после какого-то момента - начались проблемы. при вводе команды UTCF - автокад выдает ошибку: "Команда: UTCF; ошибка: неверный тип аргумента: lentityp nil", и часть полей в тексте и таблицах обновляется, а часть нет. С чем связана ошибка ума не приложу, проверка и очистка чертежа не помогают. К сожалению проект выложить не могу (конфиденциальность - поля не меняются, так бы ересь какую-нибудь бы вбил и выложил), если кто готов помочь - скину в личку. Заранее спасибо! |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Скиньте мне файл на почту через мой профиль. В личке файлы не прикладываются.
----- добавлено через ~6 ч. ----- zRaFiNaDz, перезалил файл в первом посте. Ошибку вызывал тот факт, что несколько таблиц, на которые ссылались поля, были удалены из чертежа. Не найдя их, программа удивлялась и отваливалась. Ошибку устранил, заодно добавил чистку ненужных свойств чертежа. При первом запуске UTCF в приложенном файле в комстроке будет выведен отчет о том, скольких и каких таблиц не хватает (указана малоинформативная для пользователя метка объекта-таблицы в базе данных чертежа) |
|||
|
||||
Цитата:
__________________
Вечность это: (while T) |
||||
|
||||
Цитата:
----- добавлено через 44 сек. ----- зачем вообще эта шифровка идет?
__________________
Вечность это: (while T) |
||||
|
||||
Регистрация: 17.12.2020
Сообщений: 1
|
Приветствую!
Как я заметила, ссылка на ячейку содержит название таблицы. Можно ли как так сделать, чтобы ссылка была на "свою" таблицу? Я сделала таблицу со ссылками на ячейку, дальше я хочу сделать кучу копий этой таблицы, где информация в ячейке, на которую ссылаюсь, отличается от исходной таблицы. Сейчас все копии ссылаются на изначальную первую таблицу, а хотелось бы чтобы ссылка была на ячейку копии. Каждый раз обновлять ссылки для меня не имеет смысла, по времени это выйдет так же, как если бы я просто руками освежала нужные данные. |
|||
|
||||
Инженер-электрик Регистрация: 08.08.2013
Нижний Новгород
Сообщений: 131
|
Добрый день. Вопрос не совсем по данной программе, но по данной тематике)) Можно ли как-то автоматизировать стандартную вставку ссылки на ячейку по ПКМ? Скажем макросом. Чтобы в 1 клик было. И повесить на кнопку или ещё что-то. Просто очень часто и мнорго использую для связки кабельного жруналп и принципиалок, а стандартная вставка по ПКМ отнимает много времени при больших объёмах. Пробовал команду EDITTABLECELL, но не получается
Последний раз редактировалось shmulka, 25.03.2022 в 10:09. |
|||
|
||||
Регистрация: 16.10.2013
Сообщений: 323
|
уважаемый skkkk, возможно ли допилить лисп так, чтобы можно было просто значение текста (числа) из чертежа отправлять в свойства файла минуя вставку в выноску, и также вставлять полем из свойств?
смысл действия: создать связь разных файлов чертежей через свойства файла, которые отдельным лиспом копировать. ну, например, в первом файле у меня идет спецификация с порядковыми номерами позиций, а во втором файле чертеж детали, в названии которой указана позиция этой детали в общей спецификации. когда создаю спецификацию, все номера отправляю с помощью лиспа в свойства файла, потом эти свойства копирую в файлы с чертежами деталей и в каждом файле с деталью уже беру нужное поле. как только изменится номер позиции в спецификации я свойства файла спецификацией перенесу в другие файлы и обновлю чертежи. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
posetitel, не совсем понял. Нужно просто быстрая вставка поля со ссылкой на свойство чертежа?
Вроде того: 1. Запускаем лисп 2. Выпадает список всех свойств чертежа 3. Выбираем нужное 4. На курсоре висит поле. Выбираем текстовый объект, его значение отправляется в свойства чертежа? А с каким именем свойства? Так я понял? В общем, ТЗ пока на четвёрочку с минусом) И боюсь, нас за такое поругают. Лучше создать отдельную тему, ибо тут всё же о таблицах. Сделать такое несложно, кодов для работы со свойствами есть немало даже тут, на форуме. |
|||
|
||||
Регистрация: 16.10.2013
Сообщений: 323
|
skkkk, давайте порассуждаем тут в рамках темы, думаю, все же это не будет оффтопом и строгий админ не накажет.
Итак. В лиспе значение текста из ячейки записывается в переменную, которая сохраняется в свойствах чертежа. Это очень интересное решение, раньше такого вроде не встречал, все происходило через буфер обмена либо через какую-то внутреннюю лисповскую переменную, т.е. нигде не сохранялось значение для возможности дальнейшего использовался. Так вот, раз у нас в чертеже появляется переменная со значением из таблицы, то почему бы и дальше эту переменную не использовать. Как варианты использования как вы ранее писали, можно сделать повторный вызов списка переменных и выбирать, какую конкретно вставить в поле, т.е. если надо сделать две выноски со значением из одной ячейки таблицы, чтобы не плодить переменные просто использовать уже ранее сохраненную. Когда писал предыдущее сообщение, то не совсем верно понимал принцип работы лиспа, в переменную копируется не значение из ячейки, а адрес этой ячейки в таблице, т.е. если перед ячейкой вставить строку или столбец, то все ссылки на эту ячейку собьются, т.к. по адресу ссылки будет уже новая вставленная строка или столбец. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Что-то понимания у меня сильно не прибавилось.
Таблица, как я понял, всё же нужна, значения нужно брать из неё. Цитата:
Цитата:
Или я что-то недопонял? Последний раз редактировалось skkkk, 30.06.2023 в 17:08. |
|||
|
||||
Регистрация: 16.10.2013
Сообщений: 323
|
Да все верно поняли, предыдущие предложения по вариантам модификации лиспа отпали в процессе обсуждения.
В идеале бы конечно, как выразились: "придумать новый эксель",точнее сделать ссылку на конкретную ячейку, чтобы вставка строк в таблице перед этой ячейкой не сбивала привязку к значению... Но сам понимаю, что принципы таблиц автокада несколько иные. |
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
Цитата:
Можно конвертировать акадовскую таблицу в массив блоков с атрибутами, каждый из блоков будет соответствовать одной строке, каждый атрибут - одной ячейке (будем считать, что структура столбцов неизменна). На эти атрибуты уже без проблем могут ссылаться поля. Вся штука в том, чтобы обеспечить соответствие "строкоблоков" первый раз заданным строкам. Чтобы если в екселе и связанной акадовской таблице первая строка стала второй, соответствующий "строкоблок" переместился на вторую позицию, а на первой позиции появился новый. Если первый раз заданная строка таблицы будет все время соответствовать одному и тому же "строкоблоку" с одним и тем же хендлом, ссылающиеся на него поля не будут сбиваться! Чтобы этого добиться, при создании массива строкоблоков хендл каждого из них записывается в последнюю, "служебную" ячейку соотв. строки. Профит, что ли... Написал себе для этих целей довольно глючный лисп, пока не хочу выкладывать на посмешище... Последний раз редактировалось kp+, 30.06.2023 в 18:20. |
|||
|
||||
Регистрация: 16.10.2013
Сообщений: 323
|
Переделывание таблицы в блок - это уже какие-то костыли, не очень хорошая идея. В каком-то отдельном случае может быть и поможет, но в общем случае таблица для того и создается, чтобы потом в ней работать.
Не сочтите за грубость, лишь стараюсь высказывать аккуратную критику, и надеюсь, что она наведет на иные способы решения. Как вариант - копировать в свойство чертежа не адрес ячейки, а содержимое ячейки, и тут же вставлять ссылку свойства чертежа в саму ячейку, т.е. чтобы в ячейке тоже было поле. Тогда, как минимум, при вставке новой строки, значения полей в выносных линиях не уплывут. Проблема будет с корректировкой этих значений этих свойств чертежа. Может быть тогда и пригодится вызов меню со значениями всех свойств и там надо будет руками править. Ну или прям в лоб, т.е. через "свойства файла", "дополнительно" Последний раз редактировалось posetitel, 30.06.2023 в 19:21. |
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
Offtop:
Цитата:
И вообще, большая часть всех прог на этом форуме - "костыли" для тех, у кого нет денег на "шашечки", а "ехать" хоть как-то надо Не костыли, то уже полноценная вертикалка типа Acad MEP или близкое к этому, типа VetCAD, ruCAD, линейки CS... |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
После я полностью пересмотрел модель своей работы, уйдя от полей в пользу генерации результатов лиспом, а отчасти - перейдя всё же в эксель, а еще позднее задача вообще отпала. А так можно было бы и развить эту прогу, можно и бд подкрутить, и даже реактор на таблицу привесить, чтоб при изменении количества строк или столбцов менялась адресация ячеек, но это уже будет настолько грандиозный проект, что съест немеряную кучу времени, а смысла большого от него нет. Автокадовские таблицы для подобных задач - тугая вещь, тупиковый путь это. Разве что для каких-то мелких задачек. |
|||
|
||||
Регистрация: 16.10.2013
Сообщений: 323
|
Товарищи, ссылался на другие лиспы, а стал их искать и что-то не нахожу
Поделитесь ссылкой на лисп, который копирует значение из ячейки таблицы и вставляет в другое место (выноска, другая таблица, мультитекст и т.д.), только минует добавление свойств в файл чертежа. Ну т.е. такой же лисп, как и в теме, но без промежуточных переменных в чертеже. |
|||
|
||||
Котло- и реакторостроение Регистрация: 25.02.2010
Барнаул
Сообщений: 807
|
Добрый день.
А обратный вариант возможен? К примеру мне нужно сделать поле цифрового значения мультивыноски в ячейке таблицы. Стандартным путем слишком муторно (Вставить поле, выбрать строку "Объект", указать объект, выбрать строку "значение"). А было бы удобно, если как в этом лиспе, только наоборот. Лисп - выбрать мультивыноску- указать ячейку таблицы. Возможно такое?
__________________
AutoCad 2011 -> AutoCad 2013 |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |