Архитектору и проектировщику|Тепло- и звукоизоляция URSA.RU
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Небыстрый "Быстрый выбор" !

Небыстрый "Быстрый выбор" !

Ответ
Поиск в этой теме
Непрочитано 06.06.2004, 10:27 #1
Небыстрый "Быстрый выбор" !
Psip!
 
Сообщений: n/a

Проблема:
на большом чертеже нужно найти некоторые объекты, к примеру текст "02в", "03в", "02d" ну и так далее. Пользуюсь для этого "Быстрым выбором", а именно Сервис\Быстрый выбот\затем из падающего меню нахожу "Текст", затем "Содержимое", "=равно", и только затем пишу нужный мне текст!
Потом повторяю все операции снова, потом снова, потом снова, и как-то хочется убыстрить выбор!!! Хотя бы до возможности сохранения в менюшке предыдущего запроса. А в идеале - до написания нескольких макросов для поиска нескольких разных объектов.
Гуру, отзовитесь! Need help!
Просмотров: 14786
 
Непрочитано 06.06.2004, 12:14
#2
VadimVG


 
Регистрация: 05.02.2004
Краснодар
Сообщений: 130
<phrase 1=


Меню edit=>find, в появившемся окне пишешь че надо найти, жмешь find, затем zoom to, перемещаешься куда надо.
VadimVG вне форума  
 
Непрочитано 06.06.2004, 12:18
#3
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Это тоже не самый шустрый способ.... Опять гулянка по меню - диалоговым окнам ))
Вот малююююсенький Лиспик
Код:
[Выделить все]
(defun c:tsel (/)
  (ssget "_X" (list '(0 . "TEXT") (cons 1 (getstring t "\nСтрока для поиска: "))))
  (princ)
) ;_  defun
При вводе строки для поиска можно использовать звездочку и вопрос. Выбранные TEXT'ы будут в наборе Previous, то есть будут доступны при вводе опции _p в ответ на приглашение выбора объектов...
Цитата:
Command: tsel
Строка для поиска: 1?3
Command:
Command: _move
Select objects: _p
1 found
Select objects:
vk вне форума  
 
Непрочитано 06.06.2004, 12:34
#4
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Вариант с информацией о результате поиска:
Код:
[Выделить все]
(defun c:ts (/ ss)
  (if (setq ss (ssget "_X" (list '(0 . "TEXT") (cons 1 (getstring t "\nСтрока для поиска: ")))))
    (princ (strcat "\nНайдено TEXT'ов: " (rtos (sslength ss))))
    (princ "\nНе найдено...")
  ) ;_  if
  (princ)
) ;_  defun
Цитата:
Command: ts
Строка для поиска: 12*
Найдено TEXT'ов: 4
Command:
Command: _.move
Select objects: _p
4 found
.....
vk вне форума  
 
Непрочитано 06.06.2004, 22:53
#5
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


... и тут Остапа понесло....

А что если оформить это не как обычную команду, а как функцию....
Нижеследующий код добавляет фильтр и возвращает выбранные объекты в команду, а также (может и зря) доводит пользовательский ввод текущей команды до завершения
Код:
[Выделить все]
(defun tsw (/ ss)
  (if (setq ss (ssget (list '(0 . "TEXT") (cons 1 (getstring t "\nСтрока для поиска: ")))))
    (progn
      (princ (strcat "\nНайдено TEXT'ов: " (rtos (sslength ss))))
      (if (= (logand (getvar "cmdactive") 1) 1)
        (progn
          (command "_p" "")
          (while (/= (logand (getvar "cmdactive") 1) 0) (command pause))
        ) ;_  progn
      ) ;_  if
    ) ;_  progn
    (princ "\nНе найдено...")
  ) ;_  if
  (princ)
) ;_  defun
Тогда ее можно будет вызывать как дополнительный фильтр к стандартному выбору. Или самостоятельно для определения набора Previous.
Вот пример выбора группы примитивов для окна свойств
Цитата:
Command: _.PSELECT
Select objects: (tsw)
Строка для поиска: ?2?
Select objects: Specify opposite corner: 4 found
1 was filtered out.
Select objects:
Найдено TEXT'ов: 3_p 3 found
Select objects:
Command:
Конечно, поиск текста по заданной строке - это всего лишь пример... Фильтр можно ставить и на слой и на цвет... Для этого нужны конечно минимальные знания по DXF, однако, при желании если не за час-другой, то за день то это можно освоить....

Еще вариант - прозрачная команда. Та которая выполняется во время выполнения основной команды.
Код:
[Выделить все]
(defun ts (/ ss)
  (if (setq ss (ssget "_X" (list '(0 . "TEXT") (cons 1 (getstring t "\nСтрока для поиска: ")))))
    (princ (strcat "\nНайдено TEXT'ов: " (rtos (sslength ss))))
    (princ "\nНе найдено...")
  ) ;_  if
  (princ)
) ;_  defun
(vlax-add-cmd "ts" 'ts "ts" 3)
Вызов аналогичный, "но есть ньюансы". В нее не получается вставить command, поэтому вызов наверно удобнее замешать в кнопочный макрос вроде такого:
Код:
[Выделить все]
^P'ts;\_p;(while (/= (logand (getvar "cmdactive") 1) 0) (command pause))(princ);;
Даем команду, в ответ на приглашение выбрать объекты давим кнопку...
Цитата:
Command: _move
Select objects:
>>Строка для поиска: 1*
Найдено TEXT'ов: 4
Resuming MOVE command.
Select objects:
4 found
Select objects:
Specify base point or displacement:..............
vk вне форума  
 
Непрочитано 07.06.2004, 05:46
#6
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 9,825


Углядел здесь незнакомую команду PSELECT. Не нашел ее в Help. Выделяет об-екты грипсами. Для чего применяется?
Vova вне форума  
 
Непрочитано 07.06.2004, 10:29
#7
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,134


А эти лиспы только для текста или можно изменить переменную TEXT на BLOCK потом название блока куда то написать и будут блоки выделяться?
Если не трудно поясните как расширить этот лисп до поиска блоков))
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 07.06.2004, 13:03
#8
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,134


ИЗВИНЯЮСЬ.
Похоже я совсем плох стал((( сам это уже спрашивал, но по запарке совсем забыл((
Команда ssx есть как мне подсказали. Довльно удобна для написания макроса.
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 07.06.2004, 17:10
#9
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от Vova
Углядел здесь незнакомую команду PSELECT. Не нашел ее в Help. Выделяет об-екты грипсами. Для чего применяется?
Не знаю для чего применяется, а выскочила она когда делал выбор объектов из окна свойств. Наверно, что то сокращенное от "Propertie"... какое то специфичное...

>Mikhail
ssx - это из Тулпака или Экспрессов?

Для выбора имен блоков (точнее - для вставок блоков) фильтр будет примерно такой:
.... (list '(0 . "INSERT") (cons 2 (getstring t "\nИмя блока: "))) ....
vk вне форума  
 
Непрочитано 07.06.2004, 21:17 Небыстрый "Быстрый выбор" !
#10
Psip!


 
Сообщений: n/a


Спасибо всем откликнувшимся!
Лиспы опробовал, но результат как-то не очень.
Да тексты находятся и с ними можно делать различные операции. НО.....
По QSELECT (БВЫБОР) обекты именно выбираются. Их видно! Ручки-то включены! А здесь нет.
 
 
Непрочитано 07.06.2004, 21:33
#11
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Попробуйте тот вариант, где "....пример выбора группы примитивов для окна свойств ....." Там точно с подсвеченными ручками остаецца.
vk вне форума  
 
Непрочитано 07.06.2004, 21:42
#12
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Привет всем! Да, я проверял Лисп VK Ручек не видно! :? Когда чертёж маленький, как то можно обратить внимание какой объект выделен! А когда боооооольшой чертёж тут начинаешь призадумываться! :roll:
Джек вне форума  
 
Непрочитано 07.06.2004, 22:01
#13
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


А про ручки никто и не спрашивал с самого начала...
Если надо, можно сделать выделение (подсветку) выбранных примитивов с одновременным панорамированием/зуммированием дисплея на эти примитивы....

Итак, вопрос прост: ЧТО должно быть результатом работы команды/функции/макроса?
vk вне форума  
 
Непрочитано 08.06.2004, 03:42
#14
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 9,825


VK> ssx это из Express. Pselect это команда, которая выводится из маленькой кнопочки с красным крестиком в правом верхнем углу окна Properties. (отсюда и "Р") Или с клавиатуры, если окно открыто. Грипсует объекты.
Vova вне форума  
 
Непрочитано 08.06.2004, 10:10
#15
AY


 
Сообщений: n/a


> vk

А я в фильтрах возвращаемым значением передаю набор и не забочусь о (command "_p" "") :

Код:
[Выделить все]
.....
МуSelect ;;;содержит набор
);end defun
Кроме того подсветку с ручками тоже всегда ставлю удобно и наглядно

Код:
[Выделить все]
.....
(sssetfirst nil МуSelect )
МуSelect ;;;содержит набор
);end defun
 
 
Непрочитано 08.06.2004, 15:31
#16
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Так значит, чтоб с ручками....
Возможно, сторонники Лиспа меня и не поймут....
Рисуем кнопки... Фильтры в ssget, конечно, только для примера.
Попробуем использовать команду _.PSELECT, на которую обратил внимание мой заокеанский тезка. К сожалению, это специфическая команда окна свойств. Если в текущем сеансе окно свойств _.properties не вызывалось - то команда не доступна. Впрочем, это не мешает ее (команду) использовать. Достаточно загрузить нужный файл acopm.arx, что лежит в корневом каталоге АКАДа (тестировались на английской версии AutoCAD2002 и 2004). Способов загрузки несколько :
  • --вызвать окно свойств;
    --ввести Лисп-выражение (arxload "acopm.arx"), хоть с командной строки, хоть в макросе, хоть из любого автозагружаемого файла, например acaddoc.lsp;
    --ручками через _.appload загрузить файл acopm.arx;
    --раз и навсегда прописать этот файл в автозагрузку в CONTENT в окне APPLOAD....
Здесь полная свобода выбора. Лично мне больше нравится четвертый способ.


Теперь собственно о том "что вешать на кнопки":


Код:
[Выделить все]
^P_.pselect;(ssget '((0 . "ARC") (8 . "abcd")));\\;;
Выбирает дуги на слое "abcd" в указаннм пользователем окне.

Код:
[Выделить все]
^P_.pselect;(ssget "_X" '((0 . "ARC") (8 . "abcd")));;
Почти то же самое, только не в окне, а во всем чертеже. Однако, гибкости практически нет. Можно, конечно, править макрос через настройку меню.... ИМХО, это не самый лучший вариант.... В макросы кнопок можно вставлять Лисп-выражения, но.... имеются некоторые ограничения . Например, ввод данных.
Попытаемся все же сделать пользовательский ввод. Функция (getstring) в данном случае не подходит.

Код:
[Выделить все]
^P_.setvar;users1;\_.pselect;(ssget (list '(0 . "ARC") (cons 8 (getvar "users1"))));\\;;
В этом макросе информация в Лисп передается через системную переменную USERS1. Макрос сначала запрашивает имя слоя, сохраняет его в USERS1 а затем выбирает дуги в этом слое в указаннм пользователем окне. Хотя немножко и коряво (имею в виду отсутствие подсказок к запросам в диалоге командной строки), однако, работает.


Код:
[Выделить все]
^P_.setvar;users1;\_.pselect;(ssget "_X" (list '(0 . "ARC") (cons 8 (getvar "users1"))));;
То же самое, только не в окне, а во всем чертеже. Нетрудно заметить, что "_X" определяет поиск во всем чертеже. Есть еще одна на мой взгляд интересная опция "_P" - в предыдущем (Previous) выборе.

Можно передать в фильтр и несколько параметров.
Код:
[Выделить все]
^P_.setvar;users1;\_.setvar;users2;\_.pselect;(ssget "_X" (list (cons 0 (getvar "users1")) (cons 8 (getvar "users2"))));;
Первый запрос - тип примитива arc, line, text, insert и т.д. Второй запрос - слой.
При отсутствии примитивов, удовлетворяющих критериям поиска в командной строке будет напечатано nil, а сам набор Previous не изменится.
Системных переменных, которые могут воспринимать строковую информацию, немного. Всего пять. При следующем вызове макроса (нажатии кнопки) будет подсказка с последним введенным значением. Конечно, если какая то другая программа или макрос его не изменит!!! Есть смысл ввести свое закрепление каждой переменной за определенными данными, например, USERS1 - тип примитива, USERS2 - слой, USERS3 - текст.... Впрочем, это дело хозяйское, тоесть пользовательское. Потому переменные так и называются.


Если лень искать в хелпе - вот очень кратко о назначени DXF групп:

общие
0 - тип примитива
6 - тип линии (при ByLayer может отсутствовать)
8 - имя слоя
62 - цвет (при ByLayer может отсутствовать или = 256, при ByBlock = 0) - ЧИСЛО

для TEXT
40 - высота текста - ЧИСЛО
1 - собственно строка текста
7 - стиль текста (при Standard может отсутствовать)
72 и 73 - соответственно горизонтальное и вертикальное выравнивание - ЧИСЛО

для INSERT
2 - имя вставленного блока

Разумеется, ЧИСЛА нужно передавать через переменные USERI1...USERI5
vk вне форума  
 
Непрочитано 08.06.2004, 21:57
#17
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Суперрр! заработалоооо! Спасибо VK.

Vova привет! :wink:
Джек вне форума  
 
Непрочитано 08.06.2004, 22:11
#18
Psip!


 
Сообщений: n/a


Работает!!!!! Класс!
VK, СПАСИБО огромное!!!
Вот Ваш слегка поправленный макрос:

Код:
[Выделить все]
^P_.setvar;users1;\_.pselect;(ssget "_X" (list (cons 1 (getvar "users1"))));;
Именно то, что мне и нужно было!
 
 
Непрочитано 08.06.2004, 22:44
#19
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Psip! а у меня вот так получилось:

^P_.setvar;users2;\_.pselect;(ssget "_X"(list '(0 . "text") (cons 1 (getvar "users2"))));;

Удачи! Psip! :wink:
Джек вне форума  
 
Непрочитано 08.06.2004, 22:48
#20
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Psip! когда будешь проверять макрос будь осторожен! а то [sm2103]
Джек вне форума  
 
Непрочитано 09.06.2004, 00:41
#21
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Справедливое замечание сделал Джек!

Макрос Psip! выберет
И тексты И атрибуты И в некоторых случаях Mtext'ы
vk вне форума  
 
Непрочитано 01.10.2006, 09:19
#22
Демиан


 
Регистрация: 28.08.2005
Сообщений: 32


Думал, нашел, что искал, но нет.

Можно ли немного доработать qselect:
Мне нужно, чтобы значение "Value:" копировалось из объекта. Т. е. чтобы выбрать заливку с колером RAL 000 15 0, мне сначала нужно посмотреть свойства объекта, запомнить и секунд 30 выделять этот колер.

Можно сказать, что помимо (вместо) Select Color мне не хватает Select Object.
Демиан вне форума  
 
Непрочитано 01.10.2006, 10:24
#23
Макс Тал.

строитель
 
Регистрация: 13.03.2005
СПб.
Сообщений: 216
<phrase 1=


Незнаю чем вас обидел Q SELKT Я ей пользусь довольночасто.
Всеравно набирать искомый текст, что в новом способе поиска, что встаром. При выборе QSELEKT если объектов слишком много он тоже не подсвечивает грипсы, но я решаю эту проблему простой командой копировать и тогда все загорается. Очень помогает при подсчете количества деталей ( в командной строке пишет кол-во.)
А поиск текста просто правой кнопкой \найти или заменить\ (переносит экран к найденному тексту к левому верхнему углу меню поиск.
Макс Тал. вне форума  
 
Непрочитано 01.10.2006, 12:06
#24
Демиан


 
Регистрация: 28.08.2005
Сообщений: 32


Хм. Вопрос не про грипсы, и про достоинства qselect. Вопрос: как быстро выделить всю заливку с определенным колером? Ведь qselect предлагат только основные цвета, плюс Select Color...
Демиан вне форума  
 
Непрочитано 02.10.2006, 09:16
#25
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,589


Погоди. Если у тебя пример штриховки с таким цветом на экране, выбери примерно так:
[ATTACH]1159766179.jpg[/ATTACH]
То бишь попробуй нажать на выделенную кнопенцию и указать примитив прямо на экране.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.10.2006, 10:09 Re: Небыстрый "Быстрый выбор" !
#26
Sergiy

Проектировщик, гидротехник
 
Регистрация: 23.03.2006
Киев
Сообщений: 59


Цитата:
Сообщение от Psip!
Проблема:
на большом чертеже нужно найти некоторые объекты, к примеру текст "02в", "03в", "02d" ну и так далее. Пользуюсь для этого "Быстрым выбором", а именно Сервис\Быстрый выбот\затем из падающего меню нахожу "Текст", затем "Содержимое", "=равно", и только затем пишу нужный мне текст!
Потом повторяю все операции снова, потом снова, потом снова, и как-то хочется убыстрить выбор!!! Хотя бы до возможности сохранения в менюшке предыдущего запроса. А в идеале - до написания нескольких макросов для поиска нескольких разных объектов.
Гуру, отзовитесь! Need help!
Используешь команду find, жмешь кнопку select objects, затем указываешь или область выбора или all, затем в окошке Find text string пишешь что тебе нужно найти с использованием масок:
# (Pound) Matches any numeric digit
@ (At) Matches any alphabetic character
. (Period) Matches any nonalphanumeric character
* (Asterisk) Matches any string and can be used anywhere in the search string
? (Question mark) Matches any single character;
for example, ?BC matches ABC, 3BC, and so on
~ (Tilde) Matches anything but the pattern;
for example; ~*AB*matches all strings that don't contain AB
[ ] Matches any one of the characters enclosed; for example, [AB]C matches AC and BC
[~] Matches any character not enclosed; for example, [~AB]C matches XC but not AC
[-] Specifies a range for a single character;
for example, [A-G]C matches AC, BC, and so on to GC, but not HC
` (Reverse quote) Reads the next character literally; for example, `~AB matches ~AB
в твоем случае это 0#@, затем жмешь на кнопку select all и все. Выбирается довольно быстро даже в огромном чертеже - проверил
Sergiy вне форума  
 
Непрочитано 02.10.2006, 17:59
#27
Демиан


 
Регистрация: 28.08.2005
Сообщений: 32


kpblc, эта кнопка позволяет сузить поиск: не по всему чертежу, а только то, что выделено рамкой. Но в строке value, как были стандартные цвета, так и остались. И чтобы выбрать нужный мне нужно жать select color..., а это долго.
Что то меня никто понять не может. :-(
Демиан вне форума  
 
Непрочитано 03.10.2006, 01:37
#28
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


Цитата:
Сообщение от Демиан
kpblc, эта кнопка позволяет сузить поиск: не по всему чертежу, а только то, что выделено рамкой. Но в строке value, как были стандартные цвета, так и остались. И чтобы выбрать нужный мне нужно жать select color..., а это долго.
Что то меня никто понять не может. :-(
можно попробовать штуку из Land Desktop - там при правом клике на примитиве есть опция - Select Similar - выбирает все похожие примитивы..
допустим у вас в одном слое окружности, полилинии, красные штриховки и зеленые штриховки - при Select Similar на красных штриховках - выберет все красные штриковки этого слоя...

только вот как из Land перетащить не знаю, а Land только для этого ставить - думаю лишнее, вот еслиб кто-нить написать такое смог))

попробуйте еще эту команду
Код:
там есть кнопка чтоб наследовать свойства объекта, я ак понял хочется такую же но для QSelect?)
Димас вне форума  
 
Непрочитано 03.10.2006, 08:36
#29
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


to vk

а не подскажите какой DXF код соответствует ассоциативности штриховки?
Димас вне форума  
 
Непрочитано 03.10.2006, 08:45
#30
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,589


> Демиан: Сорри. Тогда могу предложить лисп (кроме filter)
Код:
[Выделить все]
(defun c:modqsel (/ ent selset filter)
  (if (setq ent (car (entsel)))
    (progn
      (setq filter (list (assoc 0 (entget ent)) (assoc 410 (entget ent))))
      (if (cdr (assoc 62 (entget ent)))
	(setq filter (append filter (list (assoc 62 (entget ent)))))
	) ;_ end of if
      (sssetfirst (setq selset (ssget "_X" filter)) selset)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
> Димас: Ассоциативность штриховки по идее определяется 71 кодом, но! изменить ассоциативность штриховки в положение "on" весьма проблематично - что через entmod, что через activex. Зачастую приходится попросту перестраивать штриховку.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.10.2006, 08:56
#31
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


Цитата:
Сообщение от kpblc
...> Димас: Ассоциативность штриховки по идее определяется 71 кодом, но! изменить ассоциативность штриховки в положение "on" весьма проблематично - что через entmod, что через activex. Зачастую приходится попросту перестраивать штриховку.
спасбо, мне этого хватит) буду теперь одним нажатием мыши убивать)
Димас вне форума  
 
Непрочитано 03.10.2006, 09:09
#32
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


to kpblc
а в каком виде значение кода 71 там хранится?
как 1/0 или как On/Off?
Димас вне форума  
 
Непрочитано 03.10.2006, 09:19
#33
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,663


Для Демиан.
Если изначально делать заливку на своем слое, цвет которому можно задать любой, то выбрать потом эту заливку очень легко с помощью выбора слоя, для которого можно задать объектно-ориентированное имя.
Profan вне форума  
 
Непрочитано 03.10.2006, 09:52
#34
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,589


> Димас: DXF Reference:
71 Associativity flag (associative = 1; non-associative = 0); for MPolygon, solid-fill flag (has solid fill = 1; lacks solid fill = 0)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.10.2006, 09:53
#35
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


to kpblc
спасибо
Димас вне форума  
 
Непрочитано 03.10.2006, 20:01
#36
Демиан


 
Регистрация: 28.08.2005
Сообщений: 32


kpblc, на счет лиспа - другое дело, все работает, мне нравится. Спасибо!

Profan, пробовал, конечно и слои красить, но нет... неряшливо как-то. Кроме того пользуюсь лиспом Громова с автокад.ру, который все объекты определенного слоя может "отправить назад".
Демиан вне форума  
 
Непрочитано 03.10.2006, 21:31
#37
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,663


Для Демиан.
А, приятно, потому что Громов - это я и есть.
Profan вне форума  
 
Непрочитано 16.03.2009, 22:59
#38
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,453


Понадобилось сделать - вот выкладываю свою вариацию на эту тему:
Код:
[Выделить все]
(defun C:sl_sel_lay_filter_ (/ ss)
;Команда позволяющая в наборе оставить только объекты слоя того объекта по которому щелкнешь
  (if
    (ssget "_I")
   (setq ss (ssget "_I" (list (assoc 8 (entget (car (entsel "Выберите объект по слою которого нужно отфильтровать выбор: \n"))))))) 
(setq ss (ssget "_X" (list (assoc 8 (entget (car (entsel "Выберите объект по слою которого нужно отфильтровать выбор: \n")))))))
)
  (vl-cmdf "_.pselect" ss "")
  (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acallviewports)
) ;_  defun
Sleekka вне форума  
 
Непрочитано 19.06.2009, 14:26 Выбор объектов в нескольких layout
#39
луки


 
Регистрация: 19.06.2009
Сообщений: 10


Добрый день. Я частенько пользуюсь командой qselect для выбора большого числа однотипных элементов. К сожалению в нашем офисе сложилась традиция чертить электрич. схемы на листах, а не в модели. Таким образом если мне нужно поменять какое-нибудбь свойство объекта (например draworder) мне приходится пользоватся командой select по много раз, для каждого листа отдельно. Скажите пожалуйта, можно ли как-нибудь упростить этот процесс? Может быть есть какой-нибудь вариант этой команды, который поможет искать объекты на всех чертежах одновременно.
луки вне форума  
 
Непрочитано 19.06.2009, 14:36
#40
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,335
<phrase 1=


в модели _draworder затем в каждом листе _regenall
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.06.2009, 14:40
#41
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от zenon Посмотреть сообщение
в модели _draworder затем в каждом листе _regenall
луки, а чтобы все объекты перенести с листов в модель воспользуйтесь командой CHSPACE из Express Tools.
 
 
Непрочитано 19.06.2009, 14:45
#42
vasilyis

Инженер
 
Регистрация: 05.05.2008
Москва
Сообщений: 1,074


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
луки, а чтобы все объекты перенести с листов в модель воспользуйтесь командой CHSPACE из Express Tools.
Это можно также сделать, если имеется АКАД 2010-й. В ПЛ нажать ПКМ на вкладке листа и выбрать соответствующую команду.
__________________
Рапик отдай папе кость, Ты ведь не собака. /анекдот АРМЯНСКОГО РАДИО/

Последний раз редактировалось vasilyis, 19.06.2009 в 14:52.
vasilyis вне форума  
 
Непрочитано 19.06.2009, 14:51
#43
AlphaGeo


 
Сообщений: n/a


vasilyis, у меня 2008 и команда СМЕНАПРОСТР (_CHSPACE) уже даже не в Expess'ax, а в самом AutoCAD'e. В Expess Tools, я думаю, она еще раньше появилась.
 
 
Непрочитано 19.06.2009, 15:07
#44
луки


 
Регистрация: 19.06.2009
Сообщений: 10


Цитата:
Сообщение от zenon Посмотреть сообщение
в модели _draworder затем в каждом листе _regenall
Спасибо за ответ, но проблема в том, что мы чертим электрические схемы сразу на листах (layout), не используя пространство модели. Это конечно, на мой взгляд, очень не удобно, но так сложилось задолго до моего появления в этой фирме. Может быть кто-нибудь знает как одной командой выделить все элементы одного типа на всех листах (элементы начерчены на листах, а не в модели)
PS autocad 2006
луки вне форума  
 
Непрочитано 19.06.2009, 15:16
#45
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,335
<phrase 1=


Цитата:
Сообщение от луки Посмотреть сообщение
Спасибо за ответ, но проблема в том, что мы чертим электрические схемы сразу на листах (layout), не используя пространство модели.

Цитата:
Сообщение от луки Посмотреть сообщение
Это конечно, на мой взгляд, очень не удобно, но так сложилось задолго до моего появления в этой фирме.
это не просто неудобно это называется полным извращением.
Какой смысл чертить в layout если при этом не используются его преимущества, лучше уж сразу чертить в модели.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.06.2009, 20:13
#46
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,453


Ну можно выделить элементы во всех листах, но только программно и соответственно нужную команду тоже надо применять программно, но это все не про вас раз уж вы чертите все в листах.
Sleekka вне форума  
 
Непрочитано 20.06.2009, 17:13
#47
луки


 
Регистрация: 19.06.2009
Сообщений: 10


Спасибо всем, кто давал советы. Немного поломав голову, нашел решение своей задачи , случайно обнаружив в HELP команду -layout и позаимствовав идею у одного из читателей форума, с временной заморозкой слоев. Мне нужно было решить проблему с порядком прорисовки элементов, элементы одного из слоев должны быть "поверх" всех остальных, и это, как мне кажется, вышло. Макрос листает листы (layout), которые в нашей компании называют просто числами, в порядке следования листов. Привел лишь часть макроса, чтобы не загромождать топик, ведь элементы макрокоманды однотипны:
Код:
[Выделить все]
^C^C_layout;_set;1;_-layer;_set;0;_freeze;*;_thaw;BL;;_select;all;;_draworder;_previous;;_front;_-layer;thaw;*;;^C^C_layout;_set;2;_-layer;_set;0;_freeze;*;_thaw;BL;;_select;all;;_draworder;_previous;;_front;_-layer;thaw;*;
Конечно очень топорно, но ничего лучшего придумать не вышло, поскольку не удалось найти в языке макрокоманд какой-нибудь замены оператору for.
PS прошу помидорками не кидаться, я только пару недель как начал изучать макрокоманды, а лисп не знаю совсем
PPS здесь приведен макрос для изменения порядка прорисовки, но используя этот подход можно вносить разнообразные однотипные изменения для элементов принадлежащих определенному слою.

Последний раз редактировалось луки, 20.06.2009 в 17:20.
луки вне форума  
 
Непрочитано 20.06.2009, 18:59
#48
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,453


молодец - так держать
Sleekka вне форума  
 
Непрочитано 14.08.2009, 16:05
#49
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


привет всем! )))
уфф ... прочитал вроде всё...
но моего вопроса тут вроде не возникло... про имя блока
есть (assoc 2 entget) - это имя блока
а есть vla-get-EffectiveName
вот у меня две эти хрени не совпадают ... ну второй еще адекватный, а вот assoc 2 пишет *Unnn
вот собственно вопрос :
какой фильтр для ssget написать чтоб выбрать все блоки, у которых совпадает vla-get-EffectiveName
... и вообще можно ли так сделать набор?
kakt00z вне форума  
 
Непрочитано 14.08.2009, 16:29
#50
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,589


Выбрать все блоки и потом последовательно исключать ненужные.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2009, 10:21
#51
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


Алексей, спасиб!!!
как всегда, всё проще чем мне кажется ))
ЗЫ: может какие замечания по коду будут?
вот чё получилось:
Код:
[Выделить все]
(defun c:bl_pick (/ ss ss1 ent bl-name i)
  (setq	bl-name	(vla-get-EffectiveName
		  (vlax-ename->vla-object
		    (car (entsel "Какие блоки выделить?"))
		  )
		)
  ); setq
  (setq ss (ssget "_X" '((0 . "INSERT"))))
  (setq	i   0
	ss1 (ssadd)
  )
  (repeat (sslength ss)
    (if	(= bl-name
	   (vla-get-EffectiveName
	     (vlax-ename->vla-object (setq ent (ssname ss i)))
	   )
	)
      (setq ss1 (ssadd ent ss1))
    );if
    (setq i (1+ i))
  );repeat
  (sssetfirst nil ss1)
);defun
kakt00z вне форума  
 
Непрочитано 18.08.2009, 15:21
#52
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,589


Я бы еще попутно удалил бы (принудительно) ss - так, для гарантии. Либо использовал бы ssdel для удаления примитивов из набора.
Да, и вот еще: зачем выполнять выборку по всему файлу? Может, человеку понадобится как-то по-другому? Я бы снял "_X" в ssget
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.08.2009, 01:37
#53
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
...Либо использовал бы ssdel для удаления примитивов из набора.
а не поплывет, если удалять примитивы из ss в цикле?, т.е.
если писать (setq ss (ssdel (ssname ent i) ss)) - это ж будет новый набор без примитива ent, а щетчик то идет тот же.. ? или я не прав?
kakt00z вне форума  
 
Непрочитано 19.08.2009, 02:14
#54
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,589


Я говорил про нечто типа
Код:
[Выделить все]
(defun c:block-pick (/ fun_conv-ent-to-vla fun_get-ent-name base selset count ent)

  (defun fun_conv-ent-to-vla (ent)
    (cond
      ((= (type ent) 'ename) (vlax-ename->vla-object ent))
      ((= (type ent) 'vla-object) ent)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun fun_get-ent-name (ent)
    (setq ent (fun_conv-ent-to-vla ent))
    (cond
      ((vlax-property-available-p ent 'effectivename)
       (vla-get-effectivename ent)
       )
      ((vlax-property-available-p ent 'name)
       (vla-get-name ent)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)
  (if (= (type (setq base (vl-catch-all-apply
                            (function
                              (lambda ()
                                (ssname (ssget "_+.:S:E" '((0 . "INSERT"))) 0)
                                ) ;_ end of lambda
                              ) ;_ end of function
                            ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'ename
         ) ;_ end of =
    (progn
      (setq selset (ssget '((0 . "INSERT")))
            base   (fun_get-ent-name base)
            count  0
            ) ;_ end of setq
      (repeat (sslength selset)
        (if (/= (fun_get-ent-name (setq ent (ssname selset count))) base)
          (progn
            (ssdel ent selset)
            (setq count (1- count))
            ) ;_ end of progn
          ) ;_ end of if
        (setq count (1+ count))
        ) ;_ end of repeat
      (sssetfirst selset selset)
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.10.2009, 11:32
#55
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


Выбор примитивов по образцу - команда _SelSim
Команда выбора по образцу появлется в контекстном меню.
http://www.caduser.ru/forum/index.ph...8009&PAGEN_1=4
kheylan вне форума  
 
Непрочитано 26.08.2011, 08:26
#56
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 794


Граждане приветствую.
Можно ли сделать так чтобы QSelect сохранял предыдущий выбор? Т.е. мне нужно выбрать мультивыноски (я использую их для простановки позиций) в диапазоне от 14 до 31.
Для этого я нужно проделать относительно долгую операцию. КюСелект – мультивыноска - содержимое-поиск по глобальным символам- вбить значение диапазона.
Это нужно проделывать все заново при новом выборе. Допустим мне нужно изменить диапазон. Можно ли как то сделать, чтобы настройки предыдущего выбора сохранялись?
Аккад 2011
Astartes вне форума  
 
Непрочитано 26.08.2011, 10:42
#57
CaMoCAD


 
Регистрация: 25.03.2008
Зелик
Сообщений: 1,351
<phrase 1= Отправить сообщение для CaMoCAD с помощью MSN


Цитата:
Сообщение от Astartes Посмотреть сообщение
Можно ли как то сделать, чтобы настройки предыдущего выбора сохранялись?
Если нет желания/возможности использовать LISP, то могут пригодиться группы (group)
__________________
* Буква "ё" не используется в тексте исключительно в связи с требованиями ЕСКД.
CaMoCAD вне форума  
 
Непрочитано 26.08.2011, 11:46
#58
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 794


CaMoCAD, Желание есть! Возможности тоже есть (всмысле Акад полный не ЛТ). А вот знаний лиспа нету. Или есть уже готовый такой лисп?
Astartes вне форума  
 
Непрочитано 07.06.2019, 13:57
#59
allar8


 
Регистрация: 12.03.2013
Сообщений: 531


Нашел зачетную макрос команду для быстрого выбора мультивыносок
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "MULTILEADER")))) (sssetfirst selset selset)));(mfunc);
Попробовал слелать для текста
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "Text")))) (sssetfirst selset selset)));(mfunc);
Работает
Думаю можно с ней экспериментировать

Для Мтекста тож работает
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "MText")))) (sssetfirst selset selset)));(mfunc);

А вот ишо бы для блоков ее реализовать
Не подскажите случаем кто нить как на английском наименование примитива "Вхождение блока". Точнее что высвечивается при выборе блока в свойствах
у пользователей английсих версий автокада вот тут (см. вложение)

Ну и не плохо бы и для остальных наиболее частых примитивов (Отрезок, полилиния, Круг, и т.п.)
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 6
Размер:	18.9 Кб
ID:	215031  

Последний раз редактировалось allar8, 07.06.2019 в 14:32.
allar8 вне форума  
 
Непрочитано 07.06.2019, 14:37
#60
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,618


DXF код 0 - вставка блока "INSERT"
Сергей812 на форуме  
 
Непрочитано 07.06.2019, 14:40
#61
allar8


 
Регистрация: 12.03.2013
Сообщений: 531


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
DXF код 0 - вставка блока "INSERT"
Если по моему вопросу, то я не об этом спрашивал, но все равно спасибо за отзывчивость
Или я Вас не понял

Последний раз редактировалось allar8, 07.06.2019 в 14:50.
allar8 вне форума  
 
Непрочитано 07.06.2019, 14:58
1 | #62
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,618


Аутодеск вроде не страдает попытками придумать 10 названий для одно и того же - поэтому либо "Block Reference", либо "Insert". Скорее всего первое, как более грамотное. Так же и со всем остальным - "Line", "Circle".
Сергей812 на форуме  
 
Непрочитано 07.06.2019, 15:03
#63
allar8


 
Регистрация: 12.03.2013
Сообщений: 531


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
либо "Insert".
Заработало для блоков, Спасибо!
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "Insert")))) (sssetfirst selset selset)));(mfunc);
allar8 вне форума  
 
Непрочитано 07.06.2019, 15:15
1 | #64
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,618


Цитата:
Сообщение от allar8 Посмотреть сообщение
Не подскажите случаем кто нить как на английском наименование примитива "Вхождение блока". Точнее что высвечивается при выборе блока в свойствах
А вот там как раз "Block Reference" будет в панели свойств) Но для фильтрации в коде надо смотреть DXF-коды, группа 0 задает тип примитива.
Сергей812 на форуме  
 
Непрочитано 07.06.2019, 15:19
#65
allar8


 
Регистрация: 12.03.2013
Сообщений: 531


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
коде надо смотреть DXF-коды, группа 0
Спасибо!. Просто ради интереса как это посмотреть? Открыть в блокноте файл DXF?
allar8 вне форума  
 
Непрочитано 07.06.2019, 15:26
1 | #66
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,589


DXF Reference почитать, к примеру.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.06.2019, 15:30
#67
allar8


 
Регистрация: 12.03.2013
Сообщений: 531


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
DXF Reference почитать, к примеру.
Спасибо!
allar8 вне форума  
 
Непрочитано 07.06.2019, 15:31
1 | #68
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,618


А на русском - забиваете в поисковик "dxf коды AutoCAD" и там выйдите на официальную русскоязычную справку.
Сергей812 на форуме  
 
Непрочитано 07.06.2019, 15:32
#69
allar8


 
Регистрация: 12.03.2013
Сообщений: 531


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
А на русском - забиваете в поисковик "dxf коды AutoCAD" и там выйдите на официальную русскоязычную справку.
Спасибо!
allar8 вне форума  
 
Непрочитано 07.06.2019, 15:36
#70
Oleg T


 
Регистрация: 27.12.2011
Сообщений: 886


Цитата:
Сообщение от allar8 Посмотреть сообщение
Спасибо!. Просто ради интереса как это посмотреть? Открыть в блокноте файл DXF?
Проще всего набить в командной строке выражение
(entget (car (entsel)))
и указать на интересующий объект, затем в текстовом окне посмотреть, что там в списке под кодом "0".
Для блока:
Укажите объект: ((-1 . <Entity name: 1ee863c0>) (0 . "INSERT") (5 . "4B96") (330 . <Entity name: 3da2cfd0>) (100 . "AcDbEntity") (67 . 1) (410 . "A3") (8 . "__Форматки") (48 . 100.0) (370 . -1) (100 . "AcDbBlockReference") (2 . "Штамп угловой форма 3") (10 415.3 4.69999999999999 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Oleg T вне форума  
 
Непрочитано 07.06.2019, 15:42
#71
allar8


 
Регистрация: 12.03.2013
Сообщений: 531


Цитата:
Сообщение от Oleg T Посмотреть сообщение
(entget (car (entsel)))
Спасибо!
Супер
allar8 вне форума  
 
Непрочитано 07.06.2019, 15:54
1 | #72
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,618


И для расшифровки что выдает - Русскоязычный DXF.
Сергей812 на форуме  
 
Непрочитано 07.06.2019, 16:10
#73
Boxa

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


Цитата:
Сообщение от Oleg T Посмотреть сообщение
Проще всего набить в командной строке выражение
(entget (car (entsel)))
Ну так себе проще... ArxDbg вот это действительно проще, так сказать маст хев для разработке под автокад =о))
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 07.06.2019, 16:17
#74
Oleg T


 
Регистрация: 27.12.2011
Сообщений: 886


Цитата:
Сообщение от allar8 Посмотреть сообщение
Нашел зачетную макрос команду для быстрого выбора мультивыносок
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "MULTILEADER")))) (sssetfirst selset selset)));(mfunc);
Попробовал слелать для текста
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "Text")))) (sssetfirst selset selset)));(mfunc);
Работает
Думаю можно с ней экспериментировать
Давно написано, в Автокаде не проверял:

Код:
[Выделить все]
 ;Выбор объектов по типу указанного...
;------------------------
(defun c:my_sel_tip()
	(setq pr_0_ (cdr (assoc '0 (entget (car (entsel "\nУкажите исходный объект"))))))
	(setq nab (ssget)); указание области выбора
	(setq kol (sslength nab))
	(setq nab1(ssadd))
	(setq n -1)
		(repeat kol
		(setq n (+ n 1))
		(setq pr_n (ssname nab n))
		(setq pr_n_ (cdr (assoc '0 (entget pr_n))))
			(if
				(= pr_n_ pr_0_)
				(ssadd pr_n nab1)
			)
		)
	(command "._selgrips" nab1 "")
	(setq n (sslength nab1))
	(prompt "Выбрано всего ")
	(PRIN1 n)
	(prompt "   объектов типа ")
	(prin1 pr_0)
	(princ)
)
Можно написать для выбора по слою, цвету, комбинациям свойств и т.д. и т.п.....
Offtop: А разве в автокаде нет выбора по подобию с комбинированием параметров выбора?
Миниатюры
Нажмите на изображение для увеличения
Название: Сохраненное изображение 2019-6-7_16-11-36.713.jpg
Просмотров: 17
Размер:	22.7 Кб
ID:	215040  

Последний раз редактировалось Oleg T, 07.06.2019 в 16:28.
Oleg T вне форума  
 
Непрочитано 08.06.2019, 13:52
#75
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Днепройт
Сообщений: 3,941


Цитата:
Сообщение от Oleg T Посмотреть сообщение
Offtop: А разве в автокаде нет выбора по подобию с комбинированием параметров выбора?
Есть опция 'filter для стандартных команд выбора, которая худо-бедно реализует этот вариант и о которой упоминали в одном из первых постов темы. В ее окне можно нажать кнопку "добавить объект" и взять с него нужные свойства для создания фильтра. Можно создавать довольно хитромудрые фильтры с операциями "И/ИЛИ/НЕ" и сохранить именованную комбинацию фильтров для дальнейшего использования. Такое впечатление, что функционал этой опции полностью соответствуют функции ssget в части фильтрации выбранного. Работает многократно быстрее "быстрого выбора".
Но:
- несмотря на высокую скорость работы, пользоваться крайне неудобно и имеет смысл только на больших чертежах, где "быстрый выбор" вешается;
- работает далеко не со всеми свойствами объектов. Для сложных объектов типа мультивыноски "видит" только цвет, слой и тип линий Возможно, все из-за того, что самые интересные их свойства не вынесены в "главные" dxf-коды, а спрятаны под многими "обертками" из словарей объекта.

Цитата:
Сообщение от Oleg T Посмотреть сообщение
Давно написано, в Автокаде не проверял:
Команды ._selgrips в Акаде точно нет.
__________________
Да здравствует фикус! (С)

Последний раз редактировалось kp+, 08.06.2019 в 14:08.
kp+ вне форума  
 
Непрочитано 08.06.2019, 15:33
#76
Oleg T


 
Регистрация: 27.12.2011
Сообщений: 886


Цитата:
Сообщение от kp+ Посмотреть сообщение
Команды ._selgrips в Акаде точно нет.
До недавнего времени я пользовался вариантом окончания макроса:

Код:
[Выделить все]
 (command "._select" nab1 "")
(prompt "Выбрано ")
(prin1 n)
(prompt " объектов ")
(prompt ". Выберите необходимую команду и используйте Предыдущий набор.")
Это в автокаде наверняка сработает.
У меня таким образом были сделаны несколько команд выбора для progeCAD (в котором опция быстрого выбора тоже так себе):
- по слою
- по типу
- с нескольких слоев
- по слою и типу
- по цвету

Offtop: Вообще наиболее развитая команда быстрого выбора по комплексу свойств, конечно, в Брикскад (плюс выбор по подобию указанного, о чем было выше):
Миниатюры
Нажмите на изображение для увеличения
Название: Сохраненное изображение 2019-6-8_15-42-56.622.jpg
Просмотров: 9
Размер:	91.8 Кб
ID:	215064  

Последний раз редактировалось Oleg T, 08.06.2019 в 15:46.
Oleg T вне форума  
 
Непрочитано 09.08.2019, 10:24
#77
allar8


 
Регистрация: 12.03.2013
Сообщений: 531


Цитата:
Сообщение от allar8 Посмотреть сообщение
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "Insert")))) (sssetfirst selset selset)));(mfunc);
Подскажите плиз, можно ли данную макрос команду модернизировать, чтоб без выбора рамкой, т.е. нажал на кнопку и все блоки на чертеже в пространстве модели выбрались без диалогового вопроса "выберете объекты"?

----- добавлено через ~1 ч. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Подскажите плиз, можно ли данную макрос команду модернизировать, чтоб без выбора рамкой, т.е. нажал на кнопку и все блоки на чертеже в пространстве модели выбрались без диалогового вопроса "выберете объекты"?
Вот так ^C^C_ai_selall (defun mfunc(/ selset) (if (setq selset (ssget '((0 . "Insert")))) (sssetfirst selset selset)));(mfunc); вроде работает
но не отображает на чертеже что выбраны - это можно понять только через свойства)

----- добавлено через ~7 мин. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Вот так ^C^C_ai_selall (defun mfunc(/ selset) (if (setq selset (ssget '((0 . "Insert")))) (sssetfirst selset selset)));(mfunc); вроде работает
но не отображает на чертеже что выбраны - это можно понять только через свойства)
Решено
^C^C_ai_selall (defun mfunc(/ selset) (if (setq selset (ssget '((0 . "Insert")))) (sssetfirst selset selset)));(mfunc);^C^C_select

Последний раз редактировалось allar8, 09.08.2019 в 12:43.
allar8 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Небыстрый "Быстрый выбор" !

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск