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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выбор узловых выносок СПДС (SpdsNoteKnot) по образцу текущей выделенной.

Выбор узловых выносок СПДС (SpdsNoteKnot) по образцу текущей выделенной.

Ответ
Поиск в этой теме
Непрочитано 25.11.2008, 13:07 #1
Выбор узловых выносок СПДС (SpdsNoteKnot) по образцу текущей выделенной.
Baldares
 
Саратов
Регистрация: 17.10.2008
Сообщений: 426

Привет.

Вот эта задачка может стать для меня основой для освоения Лиспа.
Потомучто на VBA до dxf кодов добираться все равно через него. А еще и гемор по пути схватишь.

Прошу накидать пример. Пожалуйста. А я еге изучу )))

Цель. Выделить выноски по образцу выдбранной.

Я представляю себе такие действия:
1. Получить верхнюю стороку текущей выбранной выноски. Т.е. предпологается что перед стартом команды - выделена выноска (по которой и нужно будет выделить все выноски на чертеже в model_space, с таким же текстом).
2. Перебрать модель и занести в набор все выноски с таким же текстом.
3. Подсветить набор.

Вот что у меня есть пока. - Был бред, удалил.

Готовый лисп см. #51

Последний раз редактировалось Baldares, 27.11.2008 в 14:37.
Просмотров: 18750
 
Автор темы   Непрочитано 25.11.2008, 13:10
#2
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


В ObjectName = "mcsDbObjectNotePosition", тоже не уверен!
Baldares вне форума  
 
Автор темы   Непрочитано 25.11.2008, 13:17
#3
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Первые ощущения от редактора - неудобно.
Табом строчка улетает далеко, 8 символов
; для примечания ставить не удобно. Апостроф как то проще в VBA.
ИнтелеСенс (не помню точного названия) - нет. Тобишь контесктного подстановщика переменных, команд и т.д.

Ну может привыкнуть нуна.
Baldares вне форума  
 
Автор темы   Непрочитано 25.11.2008, 13:18
#4
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Вот данные по объекту выноски.
Код:
[Выделить все]
Команда: (ENTGET(CAR(ENTSEL)))
Выберите объект: ((-1 . <Имя объекта: 7ed61088>) (0 . "spdsNoteKnot") (330 . 
<Имя объекта: 7eff2cf8>) (5 . "1A9C7D9") (100 . "AcDbEntity") (67 . 0) (410 . 
"Model") (8 . "Монт.узлы-новые") (6 . "Continuous") (48 . 1.5) (100 . 
"mcsDbObject") (100 . "mcsDbObjectNoteKnot") (90 . 1) (301 . "Name") (300 . 
"13") (301 . "Info") (300 . "Узловая выноска\r\n13") (301 . "Scale") (40 . 
75.0) (301 . "CutAcElements") (290 . 1) (301 . "Text style") (300 . "SPDS") 
(301 . "Горизонтальный радиус") (40 . 247.499) (301 . "Вертикальный радиус") 
(40 . 492.79) (301 . "Номер узла") (300 . "13") (301 . "Номер листа") (300 . 
"") (301 . "Адрес узла") (300 . "") (301 . "Выравнивание текста") (300 . "По 
центру") (301 . "Направление полки") (40 . 0.0) (301 . "Высота текста") (40 . 
3.5) (301 . "Высота малого текста") (40 . 2.5) (301 . "Шаг угла") (40 . 15.0) 
(301 . "Окружность") (290 . 1))
Т.е. нас ) интересует (300 . "13"). Хотя их несколько ( 300-сотых пар. Как нужную выцепить?

Имя объекта = "mcsDbObjectNoteKnot".

Последний раз редактировалось Baldares, 25.11.2008 в 13:24.
Baldares вне форума  
 
Непрочитано 25.11.2008, 13:32
#5
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Baldares
Слушай ты там тоько поосторожнее с программной обработкой объектов СПДС, а то Я баловался как то с изменением объектов через dxf.
На начальном этапе все ОК, а потом стабильное Фатлаити для автокада.
Правда вот не помню толи для объектов СПДС то ли для объектов PS-конструкции
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 25.11.2008, 13:45
#6
Кулик Алексей aka kpblc
Moderator

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


Baldares, поищи тему что-то типа "СПДС выноски спецификация". Там был разбор выносок.
Автор темы, насколько я помню - Red Nova
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.11.2008, 13:46
#7
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


DEM, мне кажется эти праблы у тебя из-за того что одновременно загружены SPDS и PS. Токма версия.
Baldares вне форума  
 
Автор темы   Непрочитано 25.11.2008, 13:47
#8
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Кулик Алексей aka kpblc, это я первым делом сделал. И этот примерчик начальный отдуда и выцепил, твой кстати ).
Ну щас еще покумекаю там-сям.
Baldares вне форума  
 
Непрочитано 25.11.2008, 14:01
#9
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Цитата:
Сообщение от Baldares Посмотреть сообщение
DEM, мне кажется эти праблы у тебя из-за того что одновременно загружены SPDS и PS. Токма версия.
НЕЕЕЕ
Имменно при изменении объектов через DXF происходи вылет автокада.
А так СПДС-ка с PS у меня постоянно загружены.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 25.11.2008, 14:10
#10
Кулик Алексей aka kpblc
Moderator

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


Baldares, ну раз нашел, то ты понимаешь, что надо сначала формировать набор объектов, потом проходить по нему, исключая "не выноски" и "не соответствующие критериям отбора". Другого пути лично мне неизвестно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.11.2008, 14:49
#11
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Где посмотреть переменные, объекты?
Допустим нужен текущий набор, PickFirst-Selection. Должно быть наверно что-то типа vla-pickfirst-selection.

И еще. При отборе из модели всех выносок, есть ли смысл сначало сформировать набор по типу объектов (0 . "spdsNoteKnot") через ssget.
В VBA это бы быстрее, чем сразу перебирать все пространство модели.
Baldares вне форума  
 
Автор темы   Непрочитано 25.11.2008, 14:59
#12
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


А вот подгрузил (vl-load-com), вижу все переменные vla.

А аргументы для функций только в справке можно смотреть, в редакторе никак?
Baldares вне форума  
 
Автор темы   Непрочитано 25.11.2008, 15:16
#13
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Тяжеловато.
Примерчик бы.
В теме Red Nova, все коды без коментов (..
Baldares вне форума  
 
Непрочитано 25.11.2008, 15:50
#14
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Baldares, Попробуй команду _spqs и "сделается тебе хорошо".
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 25.11.2008, 16:10
#15
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Red Nova, Спасибо конешно.
Но опять облом с Лиспом )
Baldares вне форума  
 
Автор темы   Непрочитано 25.11.2008, 16:46
#16
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


А нет. Можно усложнить задачу.

Вообще мне нужно вставлять блок узла в каждую выноску.
Блок узла называется "Узел", и состоит из двух атрибутов - марки (имени узла), и обозначения (шифр альбома). Определение блока в файле есть.
Где шифр альбома берется из базы.

Еще есть доп. сложность. В тексте выноски, кроме имени узла могут быть доп символы - "по", и "(з.)". Например: "по 13", или "13 (з.)". Т.е. нужно эти штуки отфильтровывать.

Вот. Полностью эту задачу решить на лиспе у меня кишка тонка.
В VBA было бы просто.
Но загвоздка какраз в определении текста выноски. Т.е. через dxf коды.
В лиспе то для этого есть entget, на сколько я знаю.

Можно в VBA получить текст выноски?
Это наверно уже вопрос для новой темы, или поиска готового решения.
Пока можете здесь ответить.)
Baldares вне форума  
 
Непрочитано 25.11.2008, 18:28
#17
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
Можно в VBA получить текст выноски?
Чтобы получить текст выноски (а точнее для преобразования выносок СПДС в список) используй лисп от крыса, он тут
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 25.11.2008, 20:10
#18
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


А наборы в SelectionSets, в vba и Лиспе совпадают?
Допустим в vba создам набор "123", я туда пихну объект выноски. В лиспе можно получить этот набор по имени, и объект выноски, через ActiveX? Правда я пока не знаю как в лиспе получить набор по имени.
Чето я сомневаюсь в такой возможности.
Наверно нужно передавать ObjectID, через допустим переменную User.

Последний раз редактировалось Baldares, 25.11.2008 в 20:32.
Baldares вне форума  
 
Автор темы   Непрочитано 25.11.2008, 22:18
#19
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Вот набросал.
Код:
[Выделить все]
(defun set-SpdsNoteKnotName-to-Users1 ( / )
	(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
	(setq selSets (vla-get-SelectionSets acdoc))
	; получаем набор, созданный в VBA
	(setq selSpdsNode (vla-item selSets "Выноска"))
	; получаем объект выноски. (в наборе только один объект)
	(setq objSpdsNode (vla-item selSpdsNode 0))
	;переводим объект в примитив
	(setq objSpdsNode (vlax-vla-object->ename objSpdsNode))
	;получаем список точечных пар
	(setq lstDXF (entget objSpdsNode))
	; получаем значение 300 кода
	(setq SpdsNodeName (cdr (assoc 300 lstDXF)))
	; записываем значение в сис.переменную
	(command "_users1" SpdsNodeName "")
)
Ну как смок.
Смысл такой. В VBA создаю набор "Выноска", добавляю в него объект выноски.
Потом в VBA нужно запустить эту функцию для получения имени этой выноски. Вот.
Через что возвращать полученное именя выноски обратно в VBA? Через переменную User, нормально. Или как она точно называется Userr1-Userr5.

Последний раз редактировалось Baldares, 25.11.2008 в 23:20.
Baldares вне форума  
 
Автор темы   Непрочитано 25.11.2008, 22:21
#20
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


удалил. Дубль.
Baldares вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выбор узловых выносок СПДС (SpdsNoteKnot) по образцу текущей выделенной.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование данных для спецификаций из выносок СПДС в таблицу из мтекстов Red Nova Программирование 177 08.12.2008 11:35