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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выделение примитивов по свойствам

Выделение примитивов по свойствам

Ответ
Поиск в этой теме
Непрочитано 19.04.2012, 13:32 #1
Выделение примитивов по свойствам
hwarang
 
Регистрация: 24.03.2011
Сообщений: 56

Добрый день!
Подскажите, пожалуйста в следующем вопросе.
Импортирую в Autocad чертеж из другой программы (Компас). Типы, цвет, толщина линий у примитивов меня не устраивают. Кроме того, некоторые объекты вставляются блоками. Напр., у основной линии выставлены свойства:цвет - 0,0,255, тип линии - K5LT_BASIC, вес линии - 0,6 мм. Хотел написать макрос для кнопки, выполняющий следующую последовательность действий: Выделить все->взорвать->Выделить все->Быстрый выбор->По типу линии (напр., "K5LT_BASIС"). Выделенный набор переместить в слой "Основная", свойства поменять цвет - по слою, тип линии - по слою, вес линии - по слою. Дошел до пункта "Быстрый выбор" (диалоговое окно) и застопорился. Можно ли как-то передать параметры выбора или может быть есть какой-нибудь др. способ перебрать объекты на чертеже по конкретному свойству (возможно, использовать LISP?).
Просмотров: 7392
 
Непрочитано 19.04.2012, 13:42
#2
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


(ssget "_X" (list ...)), где (list ...) - список точечных пар (dxf-код . значение), то есть нужных тебе свойств.
ciril вне форума  
 
Непрочитано 19.04.2012, 14:25
#3
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от hwarang Посмотреть сообщение
Можно ли как-то передать параметры выбора или может быть есть какой-нибудь др. способ перебрать объекты на чертеже по конкретному свойству (возможно, использовать LISP?).
Есть такой вариант Быстрый выбор примитивов по образцу, там же есть ссылка на программу SelSim от Александра Ривилиса
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 19.04.2012, 14:32
#4
hwarang


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


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Есть такой вариант Быстрый выбор примитивов по образцу, там же есть ссылка на программу SelSim от Александра Ривилиса
Спасибо, видел. Только я не силен в лиспе, поэтому переделать под себя более сложную программу мне пока трудновато. Мне нежно просто выделить примитивы с определенным свойством (тип линии) и изменить их заданные свойства на свойство "по слою", а также поменять их свойство "слой".
Как это должно выглядеть?
Код:
[Выделить все]
(defun C:line_type (mode /)
(ssget "X" `((6 . "K5LT_BASIC")))
)
(princ)
)
Конечно, очень коряво, с лиспом начал знакомиться пару часов назад...
hwarang вне форума  
 
Непрочитано 19.04.2012, 14:41
#5
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


скорее вот так:
Код:
[Выделить все]
 (ssget "_X" '((6 . "K5LT_BASIC")))
-вместо ` - ' и нижнее подчеркивание перед X
лучше свой код выложи.
ciril вне форума  
 
Автор темы   Непрочитано 19.04.2012, 14:47
#6
hwarang


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


Цитата:
Сообщение от ciril Посмотреть сообщение
лучше свой код выложи.
В #4 и есть пока что весь имеющийся код, при вводе line_type в командную строку пишет "Неизвестная команда "LINE_TYPE". Для вызова справки нажмите F1."
Думал ограничиться макросом с кнопкой, но видно не получится.
hwarang вне форума  
 
Непрочитано 19.04.2012, 14:52
#7
Profan


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


В #4 фигня написана, да простит меня Господь. Что еще за mode?
Profan вне форума  
 
Автор темы   Непрочитано 19.04.2012, 15:01
#8
hwarang


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


Цитата:
Сообщение от Profan Посмотреть сообщение
да простит меня Господь
Господь здесь как раз не при чем.
Цитата:
Сообщение от hwarang Посмотреть сообщение
лиспом начал знакомиться пару часов назад
поэтому о том, что
Цитата:
Сообщение от Profan Посмотреть сообщение
фигня написана
я догадываюсь, а mode взял из одного примера в интернете можно сказать бездумно.
Если есть советы по написаному в #1 и #4, буду благодарен.
hwarang вне форума  
 
Непрочитано 19.04.2012, 15:51
#9
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Код:
[Выделить все]
 (defun qsandmod     (e00 / x00 x01 x02 x03 x04)
  (setq x00 -1)
  (and (setq x01 (ssget "_X" (list e00)))
       (repeat (sslength x01)
     (setq x03 (cdr
             (assoc -1
                (setq x02 (subst '(8 . "Основная") (assoc 8 (setq x02 (entget (ssname x01 (setq x00 (1+ x00)))))) x02)))))
     (and (entmake
        (foreach auxi  '(-1 330 5 6 62 370)
          (setq x02 (append (reverse (cdr (member (setq x04 (assoc auxi x02)) (reverse x02)))) (cdr (member x04 x02))))))
          (entdel x03))))
  (setq x01 nil))
(qsandmod '(6 . "K5LT_BASIC")) - эту строка вызывает перенос набора на слой Основная и т.д.
Ты уверен, что нужно все взрывать перед изменениями свойств?

Последний раз редактировалось ciril, 19.04.2012 в 16:04.
ciril вне форума  
 
Автор темы   Непрочитано 19.04.2012, 16:31
#10
hwarang


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


Цитата:
Сообщение от ciril Посмотреть сообщение
(qsandmod '(6 . "K5LT_BASIC")) - эту строка вызывает перенос набора на слой Основная и т.д.
Спасибо за помощь! Получил ошибку:
Цитата:
Команда: (qsandmod '(6 . "K5LT_BASIC"))
; ошибка: слишком много аргументов
Взрывать точно нужно, т.к., напр., прямоугольник вставляется как блок.
Еще такой вопрос: на чертеж вставляется несколько типов линий (в зависимости от содержимого) основная, тонкая, осевая... Можно ли добавить обработку разных типов линий в твой код, а изменение свойств и перенос на другие слои (каждый тип линии на свой) выполнять автоматически. Т.е., открыл чертеж, вызвал функцию, напр., qsandmod, далее все произошло на автомате? Названия всех типов исходных линий (K5LT_BASIC - основная, K5LT_AXLED - осевая...) я знаю наперед.
hwarang вне форума  
 
Непрочитано 19.04.2012, 16:46
#11
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


быть того не может что ты сделал перед этим?
на автомате и нужно
Код:
[Выделить все]
 (defun c:modcomp () (foreach auxi '(...) (qsandmod auxi)) (princ))
в командной строке: modcomp
вместо ... точечные пары (6 . тип_линии), которые тебе заранее известны, если выбор производится только по типам линий, то код можно немного переписать
или все на автомате - это вместе с разбиением?

Последний раз редактировалось ciril, 19.04.2012 в 16:55.
ciril вне форума  
 
Автор темы   Непрочитано 19.04.2012, 16:53
#12
hwarang


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


Цитата:
Сообщение от ciril Посмотреть сообщение
быть того не может что ты сделал перед этим?
Может по неопытности...
Скопировал текст, вставил в блокнот, сохранил под именем 5.lsp, загрузил его в autocad ("5.lsp успешно загружен"), набрал в командной строке (qsandmod '(6 . "K5LT_BASIC")). Получил ошибку.
hwarang вне форума  
 
Непрочитано 19.04.2012, 17:03
#13
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Попробуй открыть редактор лиспа в акаде: сервис->AutoLISP->редактор VisualLISP и вставить в нем в новый файл, потом Ctrl+Alt+E, в любом случае, не в блокноте программы пишутся
ciril вне форума  
 
Непрочитано 19.04.2012, 23:52
#14
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от ciril Посмотреть сообщение
в любом случае, не в блокноте программы пишутся
Кто сказал? В некоторых случаях именно VLIDE не очень удобен.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.04.2012, 10:24
#15
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Цитата:
Сообщение от hwarang Посмотреть сообщение
Получил ошибку.
Ты скопировал вместе с номерами строк
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Кто сказал? В некоторых случаях именно VLIDE не очень удобен.
Как-то отлаживать программу все-таки удобней в IDE Я себе не могу представить случаев, когда VLIDE неудобен
ciril вне форума  
 
Непрочитано 20.04.2012, 11:22
#16
Кулик Алексей aka kpblc
Moderator

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


Уточню: разбирать чужой код на несколько тысяч строк мне проще в Notepad++, чем в VLIDE
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.04.2012, 11:38
#17
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Заявляю категорично - мне VLIDE не удобен, я много раз пытался заставить себя им пользоваться - в результате, использую сторонний лисп редактор (причем совсем не под автолисп). "По мелочи" notepad++.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.04.2012, 12:17
#18
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Уточню: разбирать чужой код на несколько тысяч строк мне проще в Notepad++, чем в VLIDE
Offtop: Тоже к этой мысли прихожу. Даже в своем коде, когда он разрастается, очень тяжело становится во VLIDE ориентироваться. Пока не могу с него "слезть", привык к автоматическому форматированию и возможности проверить работу кода прямо из редактора, но уже не раз ловил себя на мысли, что пора искать альтернативу.
Do$ вне форума  
 
Непрочитано 20.04.2012, 12:17
#19
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Кулик Алексей aka kpblc - дело вкуса, я смотрю Lister, но ведь отлаживать приходится все равно в VLIDE
Дима_ - а что за сторонний лисп-редактор?
ciril вне форума  
 
Автор темы   Непрочитано 23.04.2012, 09:37
#20
hwarang


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


Точно, скопировал с номерами строк.
Убрал номера строк, добавил в конце
Код:
[Выделить все]
 (defun c:modcomp () (foreach auxi '((6 . "K5LT_BASIC")) (qsandmod auxi)) (princ))
запустил и все линии с типом K5LT_BASIC перенеслись на слой "Основная". При этом тип линии и вес линии стали "По слою", а цвет остался прежний. Можно ли его тоже сделать "По слою"?

Последний раз редактировалось hwarang, 23.04.2012 в 10:30.
hwarang вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выделение примитивов по свойствам

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение примИтивов на слое одним кликом Alex79 AutoCAD 33 13.07.2011 13:53
LISP / AutoCAD2008 / Как программно снять выделение у примитивов, не используя sssetfirst TararykovDG LISP 7 14.01.2011 10:48
Выделение примитивов и вне области экрана монитора sergey12 AutoCAD 9 24.10.2010 18:11
Выделение общих примитивов и другие полезные программы BARS_1985 Программирование 21 22.11.2007 14:24
Выделение примитивов Spake AutoCAD 1 29.08.2003 08:59