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

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

Код на VBA. помогите сделать правильно блок выбора объектов

Ответ
Поиск в этой теме
Непрочитано 26.11.2013, 10:25 #1
Код на VBA. помогите сделать правильно блок выбора объектов
ssn
 
Инженер проектировщик (раздел ТМ - фриланс)
 
Геленджик
Регистрация: 06.12.2003
Сообщений: 1,794

добрый день.
помогите исправить код. решаю задачу в лоб и знаний не хватает.
ищу полилинии на активном листе
Код:
[Выделить все]
 Dim gpCode(0 To 3) As Integer
Dim dataValue(0 To 3) As Variant
gpCode(0) = 8
gpCode(1) = 8
gpCode(2) = 8
gpCode(3) = 8
dataValue(0) = "0"
dataValue(1) = "0"
dataValue(2) = "0"
dataValue(3) = "0"
    groupCode = gpCode
    dataCode = dataValue
    точка1(0) = -100000: точка1(1) = -100000
    точка2(0) = 100000: точка2(1) = 100000
    mode = acSelectionSetWindow
    ZoomAll
    ssetObj.Select mode, точка1, точка2, groupCode, dataCode
ничего кроме acSelectionSetWindow у меня применить не получилось. по этому приходится делать ZoomAll потом откатывать назад, да ещё и граница поиска ограничена точками.
Подскажите, как правильно сделать что бы сразу искались нужные объёкты во всем активном пространстве? желательно что бы так же искались такие объекты в блоках.
Думал можно выбрать все примитивы а потом их отсеивать, но думаю на больших файлах будет очень долго выполняться. вообщем, если не сложно подскажите как правильно сделать.

и второй вопрос.
есть в файле именованный пейдж сетап. имя 1. (PlotConfiguration.Name = "1")
Есть стандартное окно редактирования принтера этого пейдж сетапа.
У меня получилось только через ком строку:
Acdoc.SendCommand "_pagesetup"
и потом в списке я уже выбираю этот пейдж сетап и дальше правлю, и потом по закрытию продолжается код.
Как сделать так, что бы сразу попадать в окно редактирования принтера этого пейдж сетапа, желательно мимо командной строки?
Просмотров: 5113
 
Непрочитано 26.11.2013, 10:58
#2
Кулик Алексей aka kpblc
Moderator

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


acSelectionSetAll - не катит в качестве режима?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.11.2013, 11:08
#3
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


возможно решит наполовину. сейчас попробую.
а поиск таких объектов в блоках сложно сделать?

----- добавлено через ~6 мин. -----
а. acSelectionSetAll выбирает объекты не в активном листе, а во всех сразу.
ssn вне форума  
 
Непрочитано 26.11.2013, 11:30
#4
Pum-purum

PHP-разработчик
 
Регистрация: 12.05.2008
Ижевск
Сообщений: 1,166


ssn, рад что ты такой целеустремленный Отвечу вопросами на вопросы:
1. Нафига выбирать все полилинии на листе? Может, воспользоваться выбором секущей рамкой?
2. Нафига тебе этот PageSetup? Может, сразу выводить на печать, минуя стадию настроек листа?

Что значат эти фильтры в строках с 3ей по 10ую?
Pum-purum вне форума  
 
Автор темы   Непрочитано 26.11.2013, 11:43
#5
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


всё надо. в рамках идеи работы кода все хорошо. фильтр происходит уже в коде программы, когда все выбралось.
нужна реализация

про целеустремлённый... код в работе с 2004 года. нет ничего более постоянного, чем все временное. когда то написал, работает, есть недочёты но для себя не критично.
но некрасивые моменты пофиксить было бы просто супер.

----- добавлено через ~23 мин. -----
Может правда действовать через acSelectionSetAll а потом отбрасывать лишнее

а как тогда правильно реализовать определение принадлежности объекта к лейауту?
ssn вне форума  
 
Непрочитано 26.11.2013, 12:22
#6
Кулик Алексей aka kpblc
Moderator

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


Получение примитивов в пространстве модели
Код:
[Выделить все]
Option Explicit

Sub test()
Dim ss As AcadSelectionSet
Dim ssName As String
Dim grpCode() As Integer
Dim grpData() As Variant
    ssName = "kpblcSelSet"
    On Error Resume Next
    ThisDrawing.SelectionSets.Item(ssName).Delete
    On Error GoTo 0
    Set ss = ThisDrawing.SelectionSets.Add(ssName)
    ReDim grpCode(0)
    grpCode(0) = 67
    ReDim grpData(0)
    grpData(0) = 0
    ss.Select acSelectionSetAll, , , grpCode, grpData
    MsgBox ss.Count
End Sub
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.11.2013, 12:30
#7
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


смотрю и не могу понять, какая именно строка отвечает за выбор именно из модели.
мне дело в том что кроме модели надо различать ещё и лейауты.
и поиск в блоках было бы очень не дурно как то реализовать.
может даже повторно выбирать все блоки и в них искать эти полилинии.

можно наверно через
ObjectID32
узнавать имя текущего лейаута (или модель)
потом по его названию..
интересно, у каждого лейаута свой ObjectID32 или он один на всех?

Код:
[Выделить все]
 Dim oID As Long
Set oLayout = Acdoc.Layouts("Model")
oID = oLayout.Block.ObjectID32

If ssetObj1.Item(0).OwnerID32 <> oID Then


ааа. понял какая строка. grpCode(0) = 67. если 0 то модель, если 1 то лейаут. а как определить какой конкретно лейаут?

можно так же через grpCode(0) = 410?

Последний раз редактировалось ssn, 26.11.2013 в 12:37.
ssn вне форума  
 
Непрочитано 26.11.2013, 12:44
#8
Кулик Алексей aka kpblc
Moderator

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


Можно. Советую открыть и прочитать DXF Reference.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.11.2013, 13:25
#9
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


а со второй частью вопроса, про _pagesetup не подскажите?
ssn вне форума  
 
Непрочитано 26.11.2013, 13:27
#10
Pum-purum

PHP-разработчик
 
Регистрация: 12.05.2008
Ижевск
Сообщений: 1,166


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Советую открыть и прочитать DXF Reference.
Можно по буквам расписать, куда заходить и что нажимать? не нашел ничего подобного ((((
Pum-purum вне форума  
 
Непрочитано 26.11.2013, 13:53
#11
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Pum-purum Посмотреть сообщение
Можно по буквам расписать, куда заходить и что нажимать? не нашел ничего подобного ((((
http://adn-cis.org/forum/index.php?topic=280.0
http://usa.autodesk.com/adsk/servlet...&siteID=123112
http://exchange.autodesk.com/autocad...4e551-7fdd.htm
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.11.2013, 14:48
#12
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


дак все же, есть возможность программно открыть вот это окно из VBA?
Изображения
Тип файла: jpg 1.jpg (94.6 Кб, 202 просмотров)
ssn вне форума  
 
Автор темы   Непрочитано 28.11.2013, 15:08
#13
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


а все же нет инструмента, который бы выбирал определённые объекты сразу и просто на листах и их вхождения в блоках (есл блоки вставлены на этот лист)?
ну т.е. формально объект же находится на листе, только он находится внутри блока. Можно конечно выбрать все блоки а потом перебором искать в них нужные объекты, но как то это скорее всего долго будет в более ли менее плотном чертеже.
вот бы инструмент, который находил примитив на листе, независимо от того, входит он в блок или не входит
ssn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Код на VBA. помогите сделать правильно блок выбора объектов

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Мои динамические блоки [2] Кулик Алексей aka kpblc Динамические блоки 4334 22.04.2019 09:16
Как правильно сделать ссылку на аналогичный разрез HEVOD Прочее. Архитектура и строительство 8 28.10.2013 13:27
Подскажите как правильно сделать ситуационный план??? Аша Поиск литературы, чертежей, моделей и прочих материалов 0 08.10.2012 22:23
Помогите сделать макрос для автокада Sky_cool Программирование 8 17.01.2009 03:04