Search the Community
Showing results for tags 'vba'.
-
К сожалению после прочтения справки по McCOM2 остались вопросы : 1. как видно в Locals отладчика VBA : универсальный маркер имеет : ClassName : "Универсальный маркер" : String на такой запрос: Set МаркерСпец = spdsApplication.Query("Универсальный маркер") в МаркерСпец возвращается некоторое количество объектов но вот если добавить еще условие выбора по полю маркера Set МаркерСпец = spdsApplication.Query("Универсальный маркер", "flag=""1""") то МаркерСпец Nothing в то же время если сделать выборку по всем объектам чертежа: Set МаркерСпец = spdsApplication.Query("Object", "flag=""1""") то запрос возвращает объекты с данным свойством, но согласитесь, это не совсем верно и удобно. Собственно вопрос к гуру, как правильно выбрать объект по имени класса если класс представлен таким образом? 2. Таблицы и поиск СПДС могут делать выборку по всему документу. Вопрос возможно ли через Query собрать объекты со всего документа за один проход (без перебора листов, модели)? 3. В справке очень лаконично описан объект BOM, однако заинтересовало, что если его получить и заполнить данными, то возможно производить в нем сортировку и пр. Вопрос: Как? Возможно у кого то из уважаемых All есть рабочий боевой пример и их не затруднит любезно поделиться.
-
Сделал автозаполнялку , по результатам боевых стрельб внезапно выяснилось, что нана не умеет работать с полями нативных объектов. Зато умеет вставлять поля из свойств документа (хотя возможно в следующей версии пофиксят и все будет наоборот))) Возник вопрос, как запихнуть данные в свойства документа.... Руками прям не вдохновляет Второй вопрос откуда эти данные брать, решился просто, коль у нас на чертеже есть таблица, (автозаполнялка) в которую мы занесли все сведения... отчего бы данные не подтянуть из нее. Принцип в кратце: Хватаем конкретную таблицу на чертеже Пробегаем по значениям именованных ячеек Имя ячейки пишем как ключ в пользовательские свойства документа Значением-свойством ключа будет содержимое ячейки ------------------------ Некритичные проверки исключений я не делал, кому надо вполне может дописать, как надо Если изменить "комментарии" ячеек, то соответственно в свойства документа запишутся другие ключи Все ключи пишутся в пользовательские свойства документа, но при желании можно писать и в Под спойлером код, старался комментировал)) Сразу скажу из скрипта VBS внутри наны этот код работать не будет, хотя конечно заманчиво... (значения ключей и свойства должны быть String и никак иначе, а в скриптах типы данных я не умею ) Поэтому этот код запускается из Excel большой красной кнопкой. В принципе, как дальнейшее развитие, этот код можно причесать, откомпилировать и запускать, хоть из командной строки нано, из меню или кнопкой на панели. В аттаче шаблон чертежа и большая красная кнопка. PS кода без багов не бывает, поэтому по мере... буду улучшать Автозаполнялка через поля документа V2.dwg docProp.xlsm
- 16 comments
-
- 4
-
-
-
- свойствадокумента
- vba
-
(and 3 more)
Tagged with:
-
Дмитрий Руденко, главный инженер проекта проектного бюро «Фордевинд» http://fordewind.org/. http://habrahabr.ru/post/238867/ В статье рассмотрен один из вариантов автоматизации работы проектировщиков в САПР nanoCAD, позволяющий в значительной степени использовать параметризацию построений и сокращать сроки выполнения различных задач. Многие проектировщики используют MS Excel для выполнения математических вычислений в табличной форме. Однако, функционал программы этим не ограничивается. С помощью встроенного в продукты Microsoft Office языка программирования Visual Basic for Applications (VBA) можно взаимодействовать с объектной моделью nanoCAD (и другими продуктами на её платформе). В данной статье мы на простом и универсальном примере продемонстрируем такую возможность — создадим и настроим слои, начертим прямоугольник, проставим к нему размеры и добавим текст, содержащий значение площади фигуры.
-
Учусь по замечательной статье Дмитрия Руденко habr.com/ru/post/238867 про Nanocad и VBA работать с Нанокадом. Столкнулся с такой проблемой. Отлично работает имитация ввода простых команд в командную строку, например ThisDrawing.SendCommand «CIRCLE» & vbCr & «100,100,0» & vbCr & «1000» & vbCr Но как работать с командами, после которых открываются модальные окна? Конкретно, мне нужно выполнить команду «pdfimport». Но после этой команды открывается окно открытия файла (а после него — окно выбора параметров импорта), то есть вариант типа ThisDrawing.SendCommand «pdfimport» & vbCr & file_name & vbCr &… не работает. Возможно, можно как-то выполнить эту процедуру и без командной строки, но такого я тоже не знаю. Общая задача - импортировать чертежи из множества pdf-файлов. Поэтому этот алгоритм должен выполнятся сам, автоматически, без открытия каких-либо окон.
- 1 reply
-
- vba
- командная строка
-
(and 1 more)
Tagged with:
-
Есть XML одно из вертикалок Нано. Нужно вытащить данные в Эксель. Дынный код point.ChildNodes(1).ChildNodes(1).ChildNodes(1).ChildNodes(1).ChildNodes(1).ChildNodes(3).Text вытаскивает следующую строку Pр (Pном), кВт 11,5 А мне нужны только цифры (11,5) , подскажите что нужно сделать? Часть исходного кода -<Child TypeName="DocRecordFieldItem"> -<Properties> <ColumnName>Pр (Pном), кВт</ColumnName> <Value>11,5</Value> </Properties> </Child> РП3.xml
-
Собственно код ниже. Не получается получить элемент коллекции Layouts (Листов) по имени элемента. попытка приводит к зависанию и вылету Нано 10.1 Что интересно аналогичный код но с Layers (Слоями) работает. Посмотрите, кто понимает.. я недогоняю или ушу ActiveX Нано недостаточно хорош Sub Test() Set objApp = GetObject(, "NanoCAD.Application") Set ThisDraw = objApp.ActiveDocument Set Layouts = ThisDraw.Layouts ReDim arOld(Layouts.Count - 2, 1) For Each Layout In Layouts strTmpName = Layout.Name If strTmpName = "Model" Then GoTo SKIP ' Skip modelspace arOld(n, 0) = strTmpName strTmpOrder = Layout.taborder arOld(n, 1) = strTmpOrder n = n + 1 SKIP: Next Stop sLname = arOld(1, 0) Set tempLayout = Layouts(sLname) 'тут зависание и вылет нано End Sub
-
Уважаемое сообщество! Собственно написал скрипт, который рисует циклоиды: Dim oLine Dim oCircle Dim A(2, 2000) Dim NumberPoints Dim phi Dim alpha Dim pi Dim Count Dim Rb Dim Rm Dim k Count = 0 pi = 3.1415926 alpha = 0 Rb = 10 Rm = 2 NumberPoints = 360 k = Rb/Rm for phi = 0 to 2*pi step pi/180 Count = Count + 1 A(1, Count) = Rm*(k - 1)*(cos(phi) + cos((k - 1)*phi)/(k - 1)) A(2, Count) = Rm*(k - 1)*(sin(phi) - sin((k - 1)*phi)/(k - 1)) next for phi = 0 to 2*pi step pi/180 Count = Count + 1 A(1, Count) = (Rb + Rm)*cos(phi) - Rm*cos(alpha + ((Rb+Rm)/Rm)*phi) A(2, Count) = (Rb + Rm)*sin(phi) - Rm*sin(alpha + ((Rb+Rm)/Rm)*phi) next Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(0)+","+CStr(0)+","+CStr(0), Rb) Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(Rb + Rm)+","+CStr(0)+","+CStr(0), Rm) Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(Rb - Rm)+","+CStr(0)+","+CStr(0), Rm) for i = 1 to Count - 1 Set oLine = ThisDrawing.ModelSpace.AddLine(CStr(A(1, i))+","+CStr(A(2, i))+","+CStr(0), CStr(A(1, i + 1))+","+CStr(A(2, i + 1))+","+CStr(0)) 'Set oLine = ThisDrawing.ModelSpace.AddLine(CStr(0)+","+CStr(0)+","+CStr(0), CStr(A(1, i))+","+CStr(A(2, i))+","+CStr(0)) 'Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(A(1, i))+","+CStr(A(2, i))+","+CStr(0), 0.01) next Пытаюсь отрисовать их с помощью полилинии. Для проверки работоспособности пытался нарисовать полилинию: Dim varVertList(8) Dim objPLine varVertList(0) = 0 varVertList(1) = 0 varVertList(2) = 0 varVertList(3) = 10 varVertList(4) = 10 varVertList(5) = 0 varVertList(6) = 10 varVertList(7) = 50 varVertList(8) = 0 Set objPLine = ThisDrawing.ModelSpace.AddPolyline(varVertList) В результате получаю: err: "TeighaX" raised an exception "Параметр задан неверно." at line 17 pos 0 Set objPLine = ThisDrawing.ModelSpace.AddPolyline(varVertList) ^ В каком виде должны быть координаты вершин в массиве varVertList для отрисовки полилинии? Пробовал строкой как для отрезка ("x,y,z") - тоже не вышло. Заранее благодарю за ответ! К стати, в первом листинге не корректно отображается подсветка синтаксиса строки: 'Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(A(1, i))+","+CStr(A(2, i))+","+CStr(0), 0.01) Строка начинается с " ' ", но не отображается зеленым.