|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Цитата:
на 99.99% так и есть
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,648
|
Offtop: RNB, видимо, на том компе, где я тестировал, СПДС все же установлен. Иначе я это объяснить не могу. Владелец им не пользуется (равно как и я, причем из-за таких вот проблем), он специально спросил сисадмина - тот не помнит. Да и в общем-то, не суть.
----- добавлено через ~17 мин. ----- Что и требовалось доказать. Проверил на своем 2011-м (точно без СПДС) - там эта "недотаблица" (или "пере-"?) видится как прокси, код работает, и при попытке ткнуть в нее код справедливо ругается, что это не таблица. Так что для работоспособности кода при установленном СПДС встает лишь задача "отфильтровать" такие объекты прежде, чем подсовывать набор HitTest'у. VVA, подскажи, пожалуйста свои мысли, как это можно лучше сделать, учитывая, что они выбираются ssget'ом при фильтре (0 . "ACAD_TABLE")? Создавать набор через vla-методы? Или фильтровать на основе какого-либо свойства из дампа, приведенного мною тремя постами выше? |
|||
![]() |
|
||||
Цитата:
Цитата:
Меня смутило поэтому я и написал потому как не понимаю, как он, вообще, может быть внедрен! Цитата:
+ |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,648
|
Я имел в виду того, на чьей машине с 2015-м Автокадом я проверял работу программы. Это он утверждал. У меня только 2011-й под рукой, и я решил не конвертировать файл в версию 2010, а по удаленке проверить у него. В итоге повезло, что у него стоит-таки СПДС, так как без него TCF работает, и сконвертировав в 2010-ю версию, я бы, наверное, долго у себя еще искал бы причину. В общем, по возможности постараюсь доработать код, надо только понять, как решить вопросы из моего предыдущего поста.
|
|||
![]() |
|
||||
Если СПДСовские таблицы так же отбираются как ACAD_TABLE, то добавил фильтрацию по наличию/отсутствию метода 'HitTest
Но нужно проверить на машине с СПДС. Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA, есть ли у Вас возможность посодействовать решению этих вопросов, что б не ходить такими долгими путями через промежуточные элементы
Цитата:
|
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,648
|
d.mOnII, valrond, работаю над этим сейчас, но катастрофически не хватает рук.
VVA, проверил на машине с СПДС - это то, что надо, чтобы отсеять таблицы НЕ Автокада. Внедрю обязательно в следующем выпуске. Поскольку в то время, когда я собирал с помощью VVA куски кодов со всей Сети, я только начинал вникать в лисп, и объединить все эти коды в один у меня получилось достаточно дилетантским образом. Хотя программа и выполняет поставленные задачи, мне не очень нравится момент, который я придумал тогда. А именно, при запросе второй точки для вставки поля запрашивается именно точка, а не объект. Сейчас это решение мне кажется корявым. С одной стороны я тогда стремился к универсальности: кликнул в пустое место - создался текстовый объект с полем; кликнул на текстовый объект - поле добавилось в него; кликнул в ячейке - и поле там. Но с другой стороны, допустим, если работать в строительных чертежах, где все в мм (я чаще всего работаю на подосновах и там метры), то алгоритм по обработке второго запроса дает сбои. Но эти сбои я уже нашел, как обработать. Поскольку я и коллеги сами этим кодом уже давно не пользуемся ввиду использования более продвинутых технологий под наши нужды, прошу совета пользователей данного лиспа, а также всех у кого есть мысли на этот счет - высказаться на предмет того, стоит ли оставить эту универсальность второго клика или ввести две или три команды: одна будет вставлять на пустом месте, вторая - в таблицу (оба запроса - точки), третья - в текстовый объект, в т.ч атрибут (запрос на выбор объекта), четвертая, например, вставляла бы содержимое поля в буфер обмена, ведь не всегда надо менять все содержимое текстового объекта? Первую со второй, конечно, можно объединить, но тогда несколько нарушается логичность интерфейса. Есть еще третий вариант, тоже универсальный, в противопоставление первому: ультимативно при запросе второй точки или объекта вместо перекрестья - прямоугольник выбора - и при указании на пустое место или ячейку таблицы обработать это тоже достаточно просто. На днях попытался обработать атрибуты своим корявым, но универсальным методом вставки поля в текстовый объект, но код не заработал. Кто сможет объяснить, почему конструкция Код:
- не срабатывает с атрибутами (комментарии в коде)? Если вместо атрибута там текст или мтекст - все в порядке, а с атрибутом - ни в какую! Пытался также с "ATTDEF" - результата нет. Поскольку основные использованные функции тут от Kpblc'а и VVA, то с вас основной спрос ![]() |
|||
![]() |
|
||||
если интересно и возможно реализовать, то как и в каде можно сделать:
вводится одна команда на создание поля первое действие - выбираем объект из которого берем информацию (текст, ячейка таблицы и т.д.) второе действие - по умолчанию ставится новый текст с полем, но есть возможность выбора (стрелками вверх/вниз вызывается контекстное меню) где пользователь выбирает нужную позицию и нажатием Ентер либо Пробел активирует дейсвие ну а дальше ищет объект, который выбрал (атрибут либо ячейка таблицы и т.д.) |
||||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 432
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,648
|
Цитата:
и лично я бы рекомендовал пользоваться где возможно все же стандартными полями, как более общедоступными и надежными. В новой версии, которая сейчас у меня на карандаше и которая подверглась серьезным изменениям, но еще не готова к выпуску, я обработал уже вариант, когда пользователь жмет ячейку, а в ней число, а не текст, то вставляется стандартное поле. Оно и понятно стремление многих воспользоваться TCF даже при наличии стандартной возможности - ведь для того, чтобы вставить поле стандартными средствами, необходимо сделать куда больше кликов. Тому, кто согласен со мной в этих рассуждениях, рекомендую попробовать quickfield от Lee Mac. Там используются штатные поля. Все же не хочется заниматься повторением имеющегося функционала. Во-вторых, если даже мы все же решим, и я захочу добавить в обработку текстовые объекты, то как это сделать? Опять те же грабли: штатный автокадовский выбор ячейки таблицы - крестик и запрос точки, а выбор объекта - квадратик и запрос объекта. Впрочем, пока я склоняюсь к тому, чтобы обрабатывать только ячейки таблиц. Если есть желание и мысли как, то попробуйте меня переубедить. Цитата:
Итак, имеем варианты (пока принимаем, что первый запрос - точка, и она должна быть указана только внутри таблицы): 1. Второй запрос - тоже точка, курсор в форме крестика (то, как сейчас, но дошлифованное с учетом всех выявленных багов, в т.ч. обработка атрибутов). 2. Второй запрос - объект, курсор в форме квадрата. Если выбран текстовый объект (в т.ч. атрибут, конечно), он модифицируется, если клик внутри ячейки таблицы - вставка в ячейку, при этом вставится в ту ячейку, где был центр квадрата в момент клика. Если клик на пустом месте - вставка нового объекта, - в общем все как сейчас, отличие только в форме курсора при втором запросе. 3. Второй запрос - точка, курсор в форме крестика, правая кнопка вызывает меню 4. Второй запрос - точка, курсор в форме крестика, стрелка вниз вызывает меню 5. Второй запрос - объект, курсор в форме квадрата, правая кнопка вызывает меню 6. Второй запрос - объект, курсор в форме квадрата, стрелка вниз вызывает меню. В планах на развитие продумываю переход от использования пользовательских свойств чертежа к использованию словарей, попробую додумать возможность копирования таблицы-мамы с ее полями-детками в новый чертеж и исправить отображение таких полей во внешних ссылках. Правда скоро - не обещаю. Эти три пункта уже в следующих релизах, сейчас основная цель обработать атрибут и навести порядок в коде, используя новые знания по сравнению с моментом написания первой версии. Прошу высказать мнения, по итогам я приплюсую к ним свое, продвинем вариант, одобренный большинством голосов. |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 432
|
2й или 5й.
Один вопрос, при вставке в аттрибут/текст/ячейку - будет заменять её содержимое или добавлять в начало/конец содержимого? UPD. Исправлена опечатка (вместо 5го изначально написал 6й) Последний раз редактировалось RNB, 27.11.2015 в 05:42. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,648
|
По идее - меняется полностью - как сейчас, так я думал и оставить, таким же образом и атрибут хочу прикрутить. А для того, чтоб добавить в любое место имеющегося текста я придумал внедрить занесение поля в буфер обмена. Нетрудно сделать, чтоб добавлялось в конце. Но кому-то нужно будет в начале. А кому-то через пробел, кому-то через точку с запятой. Дабы угодить всем, придется делать дополнительные запросы, а при частой работе с командой они раздражают. А так - кликнул ячейку, отменил команду, ничего не вставляя, сделал двойной клик на тексте, вставил в нужное место курсор, Ctrl+V. Вот еще тут вопрос: делать ли независимо ни от чего занесение поля в буфер обмена или же сделать отдельную команду для этого? Которая сделает все то же, но еще и занесет поле в буфер? Или вообще отдельную команду, которая сначала спросит ячейку, а затем просто добавит поле в буфер, а может, и предложит выбрать текстовый объект, который откроет по одному щелчку, как _.DDEDIT. Правда как тут поступить с атрибутом - вопрос. Не знаю программного способа, как открыть его в редакторе, наподобие того, как он открывается при двойном клике с зажатым CTRL. В случае с принудительным добавлением поля в буфер есть вероятность, что пользователь будет ожидать другого содержимого буфера, который он наполнил этим содержимым до вызова TCF.
Последний раз редактировалось skkkk, 26.11.2015 в 14:46. |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 432
|
Цитата:
Цитата:
Цитата:
И небольшое лирическое отступление, о том, как я получил эту команду. Может пригодится кому. Когда мне нужно узнать команду, которой пользуется Автокад при двойном клике, или, как в этом случае, двойном клике с CTRL, я начинаю запись макроса и провожу указанные действия. Команды отражаются в макросе. Так я, например, выяснил команду редактирования текста мультивыноски. |
|||
![]() |
|
||||
Регистрация: 05.12.2014
Сообщений: 6
|
Скажите пожалуйста, что необходимо изменить в тексте программы TCF чтобы при выборе пустой ячейки таблицы выводить в текст не "----" а ""?
Или, если это невозможно, выводить те же "----", только с белым цветом шрифта? Последний раз редактировалось hardbringer, 30.12.2015 в 14:57. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,648
|
hardbringer, подобное поведение, когда при пустой ячейке поле принимает вид "----", зашито в ядре программы, и изменить его лиспом нельзя.
С белым цветом шрифта можно сделать, но это несколько неразумно на мой взгляд. Как менять цвет обратно на черный, когда ячейка перестанет быть пустой? Вручную? Или назначать реактор на изменение таблицы? Не нравятся мне эти варианты. Предлагаю иное решение. Если указанная ячейка-источник окажется пустой, то добавить в нее пробел (программно). Правда при этом поле "потеряется", точнее, текстовый объект, в котором оно находится, если в нем содержится только это поле и более ничего, пропадет из вида, и его нельзя будет выбрать мышкой. Аналогично тому, как если бы в мтексте оставить один пробел. При этом можно добавить скрытие заднего плана этого текстового объекта и цвет фона назначить 255,255,255 - то есть белый на печати. Тогда этот текстовый объект можно будет выбирать и редактировать. Попробуйте, если устроит такой вариант, сделаю. |
|||
![]() |
|
||||
Цитата:
![]() Цитата:
Цитата:
![]() |
||||
![]() |
|
||||
Регистрация: 05.12.2014
Сообщений: 6
|
Цитата:
upd. И как это сделать не подскажите? Последний раз редактировалось hardbringer, 13.01.2016 в 17:22. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,648
|
Цитата:
Цитата:
Боюсь, подсказать тут не получится, поскольку там вопрос не простой замены пары символов в коде, но внедрить эту возможность в ближайшее время также постараюсь. Вот только добавлять ли программно такому тексту белый фон? Убирать его в случае нужды после придется вручную. Или оставить без фона, и тогда одиночный мтекст, содержащий такое поле нельзя будет выбрать мышкой? |
|||
![]() |
|
||||
Цитата:
одинаково хорошо читается и у тех кто работает на белом фоне, и утех кто на темном.
__________________
tc71 |
||||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |