Dieselexpression в автокад что это такое
Я пробовал на 2005, нормально сработало.
Насчет разного результата. Можно попробовать (cond) использовать. А можно и значение засовывать в users* - переменную. Она ж все равно обнуляется при выходе из файла. И в modemacro напрямую засовывать ее значение. Скорее всего, тебе так и потребуется.
--- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
Проектирование обустройства нефтяных месторождений
У меня на 2005 заткнулась на ковычках.
Насчет разного результата. Можно попробовать (cond) использовать. А можно и значение засовывать в users* - переменную. Она ж все равно обнуляется при выходе из файла. И в modemacro напрямую засовывать ее значение. Скорее всего, тебе так и потребуется. |
Попробуй нечто типа $(substr,Строка,$(-,$(strlen,Строка),2))
Но я не уверен, что сработает (проверить нет возможности)
--- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
А как бы в вместо "Строка" подсунуть имя блока?
Это возможно?
Возникла аналогичная задачка. Только вместо имени блока надо было подсунуть имя слоя, точнее, поле, ссылающееся на имя слоя определенного объекта. Как я действовал. Сначала создал обычное поле со ссылкой на слой объекта полилинии (см. скрин в миниатюре). Затем в новом поле вставил DieselExpression (категория полей Прочее) выражение, предложенное Алексеем двумя постами выше, но вместо Строка вставил формулу поля %%).Layer>%, т.е. получилось
Поле создалось, но после смены слоя полилинии и регенерации, сохранении и т.п. - не обновляется. Переменная FIELDEVAL картины не меняет. Командой _.updatefield тоже эффект нулевой, хотя и пишет:
Команда: _.updatefield Выберите объекты: Противоположный угол: найдено: 2 Выберите объекты: Найдено полей: 4. Обновлено полей: 4. |
А ведь полей там, и вправду, 4 (см. чертеж в attach): первые два видны, а два другие - внутри Diesel-выражения. Как так-то? Обновляется оно только если в редакторе текста, на поле, вызвать контекстное меню и выбрать Обновить поле. А если таких полей в чертеже десяток, и не один? В общем, это не вариант, по ходу
P.S. AutoCAD 2011
Последний раз редактировалось skkkk, 09.04.2013 в 16:17 . Причина: Перезалил в 2007 формате, а также P.S.
Автор:
Строковые выражения DIESEL можно использовать в файлах адаптации (CUI/CUIx) в качестве дополнительного метода создания макросов и способа изменения метки раскрывающегося меню.
При использовании выражений DIESEL в элементах пользовательского интерфейса требуется соблюдать формат "$раздел=вложенное_меню" , где раздел — буква M , а вложенное меню — требуемое выражение DIESEL.
Это выражение DIESEL позволяет переключаться между пространствами модели и листа в зависимости от текущего значения системной переменной CVPORT. Если CVPORT присвоено значение 1, выполняется команда МОДЕЛЬ; в противном случае выполняется команда ЛИСТ. Выражение вычисляется прозрачно. Если пропустить специальный символ ^P, который переключает переменную MENUECHO, выражение DIESEL будет отображать в командной строке только вызванную команду.
Выражение DIESEL в следующем примере используется для умножение текущего значения DIMSCALE на 0,5 для вычисления масштабного коэффициента при вставке блока примечания с помощью команды -ВСТАВИТЬ.
Выражения DIESEL могут также использоваться для определения метки элементов раскрывающихся меню, что позволяет делать меню недоступными или каким-либо другим способом менять их внешний вид. Следует убедиться, что при использовании выражения DIESEL для метки раскрывающегося меню первым символом является $ .
В данном примере текущему слою присвоено значение BASE, а в качестве метки раскрываюшегося меню используется следующее выражение DIESEL.
В результате данный пункт раскрывающегося меню будет отображать имя текущего слоя (с немедленным обновлением при его смене).
Текущий слой: BASE
Прим.: Ширина раскрывающихся и контекстных меню определяется в момент загрузки файла адаптации. Имена пунктов, генерируемые или изменяемые с помощью DIESEL-выражений после загрузки меню, будут усекаться до длины строки меню.
Если есть опасность того, что сгенерированные с помощью DIESEL пункты меню будут иметь избыточную длину, проблему можно решить с помощью описанного ниже подхода. В этом примере показаны первые 10 символов текущего значения системной переменной CLAYER.
Для увеличения ширины меню нельзя добавлять пробелы в конец имен пунктов, т.к. завершающие пробелы игнорируются при загрузке меню. Пробелы, используемые для увеличения ширины меню, должны находиться исключительно внутри DIESEL-выражений.
В следующем примере одно и то же DIESEL-выражение применено и в имени элемента меню, и в его макросе. Таким образом можно, например, ввести в чертеж текущие значения даты и времени.
Макросы на языке DIESEL можно использовать также для установки пометки на пунктах меню и для перевода их в недоступное состояние. Следующее раскрывающееся меню недоступно, пока команда активна. После завершения их выполнения пункт возвращается в нормальное состояние.
Подобный подход можно использовать для установки пометки возле имени элемента меню и для интерактивной смены символа, который служит для пометки.
Автор:
Функции языка DIESEL позволяют получать сведения о состоянии программы, выполнять вычисления и выводить информацию на экран.
Каждая функция может иметь не более 10 параметров (в число параметров включается и ее имя).
Возвращает сумму чисел знач1 , знач2 , . знач9 .
Например, если значение текущей 3D высоты равно 5, следующее DIESEL-выражение вернет 15.
Возвращает результат вычитания чисел от знач2 до знач9 из знач1 .
Возвращает произведение чисел знач1 , знач2 , …, знач9 .
Возвращает частное от деления числа знач1 на знач2 , …, знач9 .
Если числа знач1 и знач2 равны, возвращает 1; иначе возвращает 0.
Если число знач1 меньше числа знач2 , возвращает 1; иначе возвращает 0.
Следующее выражение получает текущее значение HPANG; если значение меньше значения, сохраненного в системной переменной USERR1, возвращается 1. Если в USERR1 сохранено значение 10,0, а текущая установка HPANG -- 15,5, следующая строка возвращает 0.
Если число знач1 больше чем знач2 , возвращает 1; иначе возвращает 0.
Если числа знач1 и знач2 не равны, возвращает 1; иначе возвращает 0.
Если число знач1 меньше или равно числу знач2 , строка возвращает 1; в противном случае - 0.
Если число знач1 больше или равно числу знач2 , возвращает 1; иначе возвращает 0.
Возвращает результат побитовой логической операции AND (И) над целыми значениями от знач1 до знач9 .
Возвращает значение угла в заданном формате и с указанной точностью.
Заданное значение представляется как угол в формате, определяемом параметром режим , и с указанной точностью (как в аналогичной функции AutoLISP). Если режим и точность отсутствуют, используются значения, заданные в команде ЕДИНИЦЫ.
- 0 для градусов
- 1 для градусов/минут/секунд
- 2 для градов
- 3 для радианов
- 4 для топографических единиц
Возвращает дату и время, отформатированные в соответствии с указанным представлением.
Текущая дата по юлианскому календарю, взятая из параметра время (значение которого можно получить, например, из $(getvar,date) ), форматируется согласно параметру представление ). Параметр представление состоит из строк форматов, которые функция заменяет на значения элементов даты и времени. Символы, не интерпретируемые как строки форматов, копируются в результат $(edtime) буквально. Возможные значения строк форматов приводятся в следующей таблице.
- D — 5
- DD — 05
- DDD — суб
- DDDD — суббота
- М — 9
- MO — 09
- MON — сен
- MONTH — сентябрь
- YY — 98
- YYYY — 1998
- H — 4
- HH — 04
- MM — 53
- SS — 17
- MSEC — 506
- AM/PM — AM
- am/pm — am
- A/P — A
- a/p — a
Фразу AM/PM следует обязательно вводить полностью; если использовать только AM , буква A будет интерпретирована буквально, а буква M вернет номер месяца.
Если в шаблоне представления обнаружен элемент AM/PM , фразы H и HH форматируются согласно 12-часовой шкале (12:00-12:59 1:00-11:59), а не по 24-часовой (00:00-23:59).
В следующем примере текущие значения даты и времени равны значениям из предыдущего. Заметим, что запятая должна быть заключена в кавычки, иначе она будет расценена как разделитель аргументов.
Полученная в результате строка выглядит так:
Суб, 5 сен 1998 – 4:53am
Если аргумент время равен 0, вместо него берутся дата и время входа в самый внешний макрос. Это позволяет исключить затраты времени на множественные вызовы функции $(getvar,date) , и вместе с тем гарантирует, что строки, составленные из нескольких макросов $(edtime) , используют одинаковое время.
Если строки знач1 и знач2 совпадают, возвращает 1; иначе возвращает 0.
Следующее выражение получает имя текущего слоя; если имя совпадает со значением строки, сохраненным в системной переменной USERS1 (USERS1-5), возвращается 1. Допустим, в USERS1 сохранена строка "PART12" и текущий слой носит то же имя.
Полученная в результате строка выглядит так:
Передает строку стр в вычислитель DIESEL-выражений и возвращает результат ее вычисления.
Выполняет усечение вещественного значения знач до целого путем отбрасывания дробной части.
Возвращает значение переменной среды перем .
Если переменная с указанным именем не определена, функция возвращает пустую строку.
Возвращает значение системной переменной перем .
Вычисление выражений по условию.
Если условие не равно нулю, вычисляется и возвращается выражение истина . Иначе вычисляется и возвращается выражение ложь . Ветвь, не удовлетворяющая условию , не вычисляется вообще.
Возвращает заданный номером элемент строки-списка.
Подразумевается, что аргумент строка содержит одно или несколько значений, разделенных запятыми (т.е. принятыми для макросов стандартными разделителями). Аргумент номер выбирает одно из значений для возврата (считается, что первый элемент строки имеет номер 0). Функция часто применяется для извлечения координат X, Y или Z точки, полученной из функции $(getvar) .
В приложениях ее можно использовать также для извлечения аргументов, переданных в виде строк-списков в системных переменных USERS1-5.
Вычисляет и возвращает аргумент, выбранный по его номеру .
Если значение номер равно 0, nth возвращает арг0 и т. д. Следует обратить внимание на различия между функциями $(nth) и $(index) : $(nth) возвращает один из аргументов функции, тогда как $(index) извлекает одно из значений из строки с разделением запятыми, переданной как единый аргумент. Аргументы, не выбранные значением номер , не вычисляются.
Возвращает результат побитовой логической операции OR (ИЛИ) над целыми значениями от знач1 до знач9 .
Возвращает вещественное значение в заданном формате и с указанной точностью.
Заданное значение представляется как вещественное число в формате, определяемом параметром режим и с указанной точностью. Если режим и точность отсутствуют, используются значения, заданные в команде ЕДИНИЦЫ.
Возвращает длину строки в символах.
Возвращает подстроку строки , начиная с символа начало , имеющую заданную длину .
Символы в строке нумеруются, начиная с 1. Если длина отсутствует, функция возвращает всю оставшуюся часть строки.
Возвращает строку , преобразованную в верхний регистр по правилам текущей кодовой страницы.
Возвращает результат побитовой логической операции XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ) над целыми значениями от знач1 до знач9 .
Здесь вы можете скачать документацию и программы для САПР AutoCAD, PCAD, 3DS, Inventor, Pro/E, Solidworks и других CAD CAM CAE EDA GIS
Владимир Свет
DIESEL
1. Строка состояния.
DIESEL и AutoCAD LT
Язык программирования DIESEL был впервые введен AutoCAD R12. DIESEL это аббревиатура от Direct Interpretively Evaluated String Expression Language. В вольном переводе можно объяснить как прямая интерпретация содержания текстовой строки. Это язык текстовой строки. Результат обработки строки также выводится в виде строки и может быть воспринят AutoCAD дословно. Если DIESEL выдал слово "Line", AutoCAD поймет это слово дословно, то есть воспроизведет команду Line (Отрезок).
Выражения DIESEL всегда предваряются специальным знаком $. (Этим знаком обозначается американская денежная единица ? доллар). Откройте окно Customize (Адаптация) и посмотрите на запись макроса стандартных команд Copy (Копировать), Move (Перенести) и некоторых других. Здесь можно увидеть типичные выражения DIESEL. Как и в языке LISP, количество открытых и закрытых скобок должно быть равным. Элементы выражения здесь разделяются, в отличие от LISP, запятой, а не пробелом, что похоже на выражение функции калькулятора.
Введем при помощи DIESEL новые данные в строку состояния ? Status Line. Эта строка расположеня в самой нижней части экрана AutoCAD. Ее левая часть по умолчанию не заполнена, поэтому ничего необычного не видно. Этой частью строки управляет системная переменная Modemacro.
Наберите на клавиатуре:
В левой части строки состояния появилась эта надпись, рис.1. Теперь она будет напоминать о ваших обязанностях до тех пор, пока AutoCAD не будет закрыт, даже если вы погуляли со своей собакой. Или, пока вы не напишите в стрoке состояния что-нибудь другое.
Испытаем способности DIESEL в математике - попросим его сложить два числа, 3 и 8.
Вызываем Modemacro
В маленьком окошке в левой части строки появилось число 11. Также уверенно DIESEL может выполнять вычитание, умножение и деление, используя для этого символы, соответственно, " - ", " * ", " / ". Количество аргументов в математических выражениях не должно превышать 9. Этот талант DIESEL может быть использован. А пока продолжим упражнения со стрoкой состояния, потому что из нее можно извлечь определенную пользу.
Рассмотрим одну из функций DIESEL Getvar. Введите в командной строке: В ответ на приглашение наберите:
В левой части строки состояния вы увидите имя текущего текстового стиля. Измените его (падающее меню Format -> Text Style…(Формат->Текстовые стили. ), или введите Style (Стиль) в командной строке). В строке состояния текстовой стиль обновился. Значит, эта строка живая. Она может отражать текущие изменения системных переменных. Добавим сюда и высоту текста. Если используется несколько текстовых стилей и разные высоты текста, удобно иметь на экране текущие установки. Действительно, в панели инструментов Object Properties (Свойства объектов) есть четыре окошка, где показаны текущие значения Layer (Слой), Color (Цвет), Linetype (Тип линии), Lineweight (Вес линии). В панели инструментов Dimension (Размеры) и некоторых других также есть такие окошки, в которых можно контролировать текущие установки. А для текстового стиля такого окошка нет. Но мы его получили в строке состояния.
Вызовите Modemacro
Заполним командную строку:
Пробел между двумя выражениями можно не ставить, но тогда оба значения вызываемых системных переменных, имя текстового стиля и высота текста, сольются. Нажмите . В строке состояния теперь вышли текущие значения текстового стиля и высоты текста.
В AutoCAD 2004 есть новая (по сравнению с предыдущими версиями) панель инструментов Styles (Стили), в которой можно контролировать текстовые и размерные стили.
При помощи системной переменной Modemacro можно вложить в строку состояния любую информацию, находящуюся в системных переменных. Чуть позже мы воспользуемся этим неожиданным открытием, а пока вернемся к нашим Homerun.
(Далее читатель продолжает тему, начатую в предыдущих главах на базe сквозного примера под названием Homerun. Мы здесь опустим часть текста. Скажем только, что, используя несложные выражения DIESEL, можно учесть коэффициент масштабирования и, имея в библиотеке всего один внемасштабный элемент, вставлять его в чертежи любого масштаба. В примере есть также полилиния, ширина которой автоматически настраивается под нужный масштаб и текстовой стиль, универсальный для любого масштаба. Ниже будет создан также универсальный размерный стиль. Пользователи AutoCAD LT, где DIESEL работает, получают мощный инструмент для расширения возможностей системы)
2. Перевод объекта в текущий слой
В полной версии AutoCAD, в меню Express есть команда Laycur. Она переводит объекты в текущий слой. Для AutoCAD LT эта команда недоступна, но мы попытаемся найти ей замену. Изменить слой объекту означает изменить его свойство. Для этого служит команда Properties (Окносв), вызывающая соответствующее диалоговое окно. Можно ли воспользоваться командой Properties (Окносв) с командной строки и без вызова диалогового окна? В главе 12 будут показаны несколько способов открытия диалогового окна Properties (Свойства). Один из них это набор на клавиатуре аббревиатуры Ch. (Это сокращение показано на рис. 1.8 и 1.9). Но сокращение Ch произошло от команды Change (Изменить). Есть и такая не часто употребляемая в AutoCAD команда. Набор на клавиатуре Change или, что то же, -Ch вызывает в командной строке (и без выхода диалогового окна!) запрос: Нас интересуют именно свойства, поэтому вводим P. Далее появляются новые опции:
Вот и ключ к решению проблемы. Можно поменять некоторые свойства объекта, в том числе слой, с командной строки и без выхода диалогового окна, а значит провести это изменение автоматически.
Остается ввести имя текущего слоя, которое хранится в системной переменной Clayer. При помощи функции DIESEL Getvar можно извлечь это имя, если воспользоваться выражением:
Код команды, переводящий единичный объект в текущий слой, получается таким: Для перевода ряда объектов в текущий слой можно поступить двояко: Или: (В предыдущих главах достаточно подробно рассказывается, как собираются макрокоманды. Здесь, в отрывке, смысл вышеприведенных кодов могут показаться непонятным. Но введите любую из этих записей в окно "Macro associated with this button" диалогового окна Customize (Адаптация), и новая кнопка будет работать.)
Разница между [6] и [7] заключается в следующем. В первом случае при выделении объекта он тут же переводится в текущий слой, но команда Pan (Пан), если ее необходимо применить для выделения следующего объекта, превращается в менее удобную команду -Pan (-Пан). Подробнее об этом говорилось в разделе 3.2. Кроме того, для выхода из команды, надо нажимать клавишу .
Во втором случае команда Pan (Пан) работает традиционно, но выбор объектов следует заканчивать стандартным нажатием ПК мыши.
При извлечении при помощи функции DIESEL Getvar текстовых строк, как в этом случае, есть одно существенное ограничение: в строке не должно быть пробелов. Если в имени слоя, которое является текстовой строкой (String), есть пробел, команда не будет работать. Поэтому надо заменить все пробелы в именах слоев, например, знаком подчеркивания "_". Интересно, что при вводе строк, имеющих пробелы, в стоку состояния при помощи Modemacro, они входят туда без ограничений.
3. Длина дуги
Иногда возникает необходимость узнать длину дуги. В этом случае проще всего обратиться к команде List (Список) или Properties (Окносв). Но что делать, если надо проставить размер длины дуги? Ведь в стандартном наборе панели инструментов Dimension (Размеры) команды для измерения длины дуги нет. Можно поступить таким образом: измерить угол, образованный дугой, при помощи команды Dimangular (Рзмугловой), проставить угловой размер (в градусах) и затем полученный размерный текст отредактировать, заменив на результат измерения, выданный командой List (Список). В принципе, это несложно сделать вручную, для чего даже не надо выписывать на бумажку длину дуги с текстового окна AutoCAD Text Window (Текстовое окно AutoCAD), которое вызывается клавишей . Достаточно воспользоваться "горячими клавишами" + и перенести результат в окно редактирования текста, где нажать + . Здесь может появиться небольшая ручная работа по округлению результата, если не требуется точность, заложенная в диалоговом окне Drawing Units (Чертежные единицы).
- Каким-то образом получить сведения о длине дуги
- Ввести эти сведения в окно редактирования размерного текста вместо значения углового размера.
Вторая задача, в свою очередь, порождает сопутствующую: надо добиться того, чтобы окно радактора текста не появлялось на экране. Будем решать задачи по мере их появления.
Итак, где взять длину дуги? Раз она показана в справочном окне AutoCAD Text Window (Текстовое окно AutoCAD) при взятии команды List (Список), значит, хранится в какой-то системной переменной. Эта переменная называется Perimeter. Справочная система Help выдает по этой переменной следующие сведения:
Тип - Real, реальное число. Сохраняет последнее значение периметра, подсчитанное командами Area (Площадь), DBlist (База данных) и List (Список). Оказывается, к дуге, если последняя выполнена полилинией, можно применить команду Area (Площадь) При этом подсчитывается площадь, образованная собственно дугой и условной линией, соединяющей начальную и конечную точку этой дуги, а также длина дуги. Команда List (Список) выдает эти же сведения, также как и команда DBlist, но последняя выдает информацию обо всех объектах чертежа и вызывать ее для получения длины одного только объекта неразумно.
Таким образом, если взять команду List (Список), выделив искомую дугу, но превращенную предварительно в полилинию, в системную переменную Perimeter зайдет значение ее длины. Отсюда несложно создать логику кода:
- Превращение дуги в полилинию командой Pedit (Полред)
- Команда List (Cписок), или Area (Площадь)
- Команда Dimangular (Рзмугловой)
- Редактирование размерного текста
- Возврзщение полилинии в дугу
- А если дуга уже была выполнена полилинией? Тогда действие по п.5 несанкционировано превратит ее в простую дугу.
- Команда List (Список) вызовет текстовое окно AutoCAD Text Window (Текстовое окно AutoCAD), которое будет мелькать на экране, раздражая глаз.
- При редактировании размерного текста диалоговое окно редактора текста не должно выводиться на экран.
Последнее препятствие обойти несложно: команда Dimangular (Рзмугловой) имеет опцию Text (Текст) применение которой позволяет работать в командной строке, без вывода на экран редактора текста. Мелькание окна AutoCAD Text Window (Текстовое окно AutoCAD) также можно решить, если заглянуть вперед, в раздел 15.5. А как же быть с полинией? Не создавать же две отдельные кнопки, одну для измерения простых дуг, а другую для дуг, выполненных полилинией. Существует функция под названием If, перевод которой "если". Логика этой функции, применительно к нашей задаче, такова: если это простая дуга, надо перевести ее в полилинию, измерить и затем возвратить обратно в дугу. Если это полилиния, измерить ее и оставить таковой. Задача серьезно усложняется и, чтобы не залезать глубоко в дебри языков программирования, попробуем поискать другое решение. Не найдется ли другой команды, кроме List (Список) или Area (Площадь) выдающей длину дуги и независимой от того, является ли дуга полилинией или нет? Система помощи Help, увы, помочь не смогла. Из предложенных ею трех команд ни одна не подошла. Но чертежник-практик может припомнтиь, что при применении команды Lengthen (Увеличить), в командной строке появляется измеренное значение длины объекта. Ну конечно, если длину объекта надо изменить, то предварительно пользователь имеет право увидеть ее существующее значение! Проверьте команду на примере простой дуги и дуги полилинии. В обоих случаях в командой строке есть текущая длина дуги. Если команду прервать клавишей или , значение длины дуги все равно успеет войти в системную переменную Perimeter. И не надо усложнять задачу и вводить функцию If (Если). А вот система помощи Help подкачала. К перечню из трех команд, после которых меняется значение системной переменной Perimeter, следовало бы добавить и четвертую команду Lengthen (Удлинить). Не помешало бы и примечание, что для команд Area, DBlist или List надо, чтобы измеряемый объект был полилинией (или сплайном), а для команды Lengthen безразлично, полилиния это, или простая линия, или дуга.
Может быть, в Autodesk прочитают эту книгу и исправят оплошность к выходу следующей версии.
- Команда Lengthen (Удлинить). После выделения дуги, команда прерывается нажатием
- Команда Dimangular (Рзмугловий), в которой на запрос выбора объекта можно ввести символ @ (последняя, использованная командой Lengthen (Удлинить), точка). Здесь же вводится опция Text (Текст), позволяющая вписать значение нового текста в командной строке без вызова редактора текста
- Ввод нового текста, полученного из системной переменной Perimeter, при помощи известной функции DIESEL Getvar.
Опять препятствие. Но загрублять результат мы уже научились. В разделе 8.7 была рассмотрена….
> Александр Ривилис
Попробовал программу. Первое впечатление - может быть очень полезна в работе. Хорошо смотрится в комплекте с открытым окошком Properties.
> Александр Ривилис
Сам недавно хотел написать на лиспе подобную программу, но все равно придется писать для Брикса. Хочется иногда выбрать еще по длине, по радиусу, и иногда еще и с допуском длины (радиуса).
О наличии анологичной команды в Civil 3D я узнал от сотрудников и сделал аналог для чистого AutoCAD. В Civil 3D описания этой команды не нашел. Поэтому делал на свое усмотрение, а диалог задания свойств выбора был сделан "по просьбам трудящихся". Если еще усложнять эту программу, то она станет похожа на стандартный Быстрый выбор (_QSELECT) и тогда потеряется весь ее смысл.
LISP-вариантики
https://www.caduser.ru/forum/topic32134.html
Выбор объектов по образцу:
^C^C^P(defun C:tmp_Den ()(sssetfirst nil (ssget (list (assoc 0 (entget (car (entsel "Выберите образец:")))))))(princ))(princ);tmp_Den
Выбор объектов по слою образца:
^C^C^P(defun C:tmp_Den ()(sssetfirst nil (ssget (list (assoc 8 (entget (car (entsel "Выберите образец требуемого слоя:")))))))(princ))(princ);tmp_Den
Выбор текста по содержимому образца:
^C^C^P(defun C:tmp_Den ()(sssetfirst nil (ssget (list (assoc 1 (entget (car (entsel "Выберите текст - образец")))))))(princ))(princ);tmp_Den
По предложению Евгения Елпанова добавил обработку примитивов с цветом BYLAYER.
> Александр Ривилис
"О наличии анологичной команды в Civil 3D. "
В ADT аналогичная команда называется:
Команда: SelectSimilar
Только как настраивать не знаю.
> wo!
Она видимо одна и таже в Civil 3D и в ADT. Описания и возможности настроек ее я не нашел - хотел сделать полный аналог, но потом расширил возможности за счет настройки.
> Александр Ривилис
У Вас получилось хорошо!
Настройки позволяют почувствовать уверенность
предсказуемость выбора.
Спасибо! (+1 голос к разговору о костылях)
> Александр Ривилис
Программа отличная и как говорится подключил к использованию и сегодня работаю с ней и как говорили выше в паре со свойствами. Работает с кнопки. Но есть одна проблема. Динамический блок не выбирает по образцу. Это в самом деле так или я не нашел в настройках. Если можно подскажите это так должно быть и изменить нельзя или всё таки можно что то сделать.
А по вопросу костылей. меня всегда удивляет ответ взрослого человека аналогичным образом. Главное ни кому ни чего путного не предложил, а всё обхаял. А Вам ещё раз спасибо.
> Valery Brelovsky
По поводу динамических блоков пока не думал (я с ними не работаю). Пришлите мне какой-нибудь чертежик с динамическими блоками - сделаю их обработку. Я так понимаю, что речь идет о сравнении по имени?
Сделал обработку динамических блоков. Теперь думаю стоит ли выкладывать эту версию. Из-за проверки динамических блоков пришлось сделать три arx-файла:
Надеюсь ничего не испортил.
> Александр Ривилис
Спасибо отлично работает. Динамические блоки теперь тоже выбираются.
> Александр Ривилис
Работал с топографией. И наткнулся на проблему удаления блоков с одинаковым значением "Z". Подумал что было бы не плохо если бы блоки выбирались не только по имени и масштабу, но и по "Z". При уровне рельефа между 95 и 150 затесалась группа точек с уровнем -1,5. Пришлось удалять по одной. Если получится буду при много благодарен. Могу заметить что ни одна версия Автокада так не ускоряет работу как Ваши две программы. Имею ввиду Сумму в свойствах и выбор по образцу.
> Valery Brelovsky
Что такое одинаковое значение "Z"? Это координата Z точки вставки блока или значение какого-то атрибута в блоке? Если первое еще можно обработать, то за второе я браться не буду - это будет слишком узко специализированно. Кроме того с какой точностью проверять значение (это плавающие числа и нужно задавать точность сравнения)?
Как просьба.
Про отметку Z вставки блоков - вещь нужная.
И по дин блокам. Нельзя ли добавить критерий отбора по параметру visible - видимости. Можно также и по значению какого либо атрибута на выбор - но это уже как наглость - если будет возможность.
Поясню - есть дин блок - положим звать его name
-у него есть несколько значений visible
-у него есть атрибут с изменяемым значением.
Это как пример - например блок площадки - марка указана в параметре visible т.е. выбор по марке а в атрибуте, скажем, ее поз в спеификации.
> Diman111
Нет. Этого я делать не буду - слишком много вариантов и если пойти дальше в узкую специализацию, то командой очень неудобно будет пользоваться по ее основному назначению.
> Нюк
Эта программа не меняет значение ни одной системной переменной, так что следует искать что-то другое. Укажите четкую последовательность действий, которую я смогу воспроизвести, т.к. у меня значение DIMSCALE не сбрасывается.
> Valery Brelovsky
> Александр Ривилис
А чем Вас не устраивает стандартная функция Select Semilar она уж года 2-3 как существует?
И условий выбора вроде хватает!
Current selection
Device
True Color
Linetype
Linetype scale
Plot style
Lineweight
Hyperlink
Material
Location
Normal
GUID
PartDescription
SizeName
SystemName
SystemAbbreviation
SystemType
MaximumSize
Voltage
Load
Description
Layer
Style
Bound spaces
Type
Subtype
Name
Size Name
Routing Preference
Shadow display
Connection Type
Shape
Diameter
Width
Height
System Group
System Name
System
ID
Assigned Engineering ID
Lock Size
= Equals
<> Not Equal
> Greater than
< Less than
Select All
Читайте также: