Lion2032 Posted January 17, 2015 Report Share Posted January 17, 2015 Хорошо, а как правильно задать массив? Что бы возвратить тоже массив Потому что такая конструкция выдает ошибку: "Expected )" Public Function CenterArc3point(pt1(2) As Double, pt2(2) As Double, pt3(2) As Double) As Double Уберите двойки Двойки я уберу, но тогда опять возвращаемся к данному посту: http://forum.nanocad.ru/index.php?showtopic=3182&view=findpost&p=29760 А мне нужно задать массив и вернуть массив. Quote Link to comment Share on other sites More sharing options...
Robink Posted January 17, 2015 Report Share Posted January 17, 2015 (edited) Хорошо, а как правильно задать массив? Что бы возвратить тоже массив Потому что такая конструкция выдает ошибку: "Expected )" Public Function CenterArc3point(pt1(2) As Double, pt2(2) As Double, pt3(2) As Double) As Double Уберите двойки Двойки я уберу, но тогда опять возвращаемся к данному посту: http://forum.nanocad...indpost&p=29760 А мне нужно задать массив и вернуть массив. As Double() Sub mcr0() Dim m1() As Double ReDim m1(2) m1(0) = 0# m1(1) = 0.1 m1(2) = 0.2 Dim m2() As Double m2() = mcr1(m1) End Sub Function mcr1(m1() As Double) As Double() m1(0) = m1(0) + 0.1 m1(1) = m1(1) + 0.1 m1(2) = m1(2) + 0.1 mcr1 = m1() End Function Edited January 17, 2015 by Robink 1 Quote Link to comment Share on other sites More sharing options...
Kreator Posted January 17, 2015 Report Share Posted January 17, 2015 А ещё справку полистайте по VBA. На MSDN и на бесчисленных форумах есть куча статей, в том числе на русском, где разобраны многие нюансы, характерные именно для VBA. В данном случае исправив первую ошибку, получили вторую - нельзя передавать в VBA массивы с явно указанным размером. Отсюда и ошибка - компилятор ждёт вторую скобку сразу за первой, а там у нас число. В скобках именно размерность массива. Убрать двойки - это не убрать скобки. Т.е. скобки оставляем, но в них пусто. Этим мы передаём массив без указанной размерности. Т.е. функция не будет знать, сколько элементов в массиве. Но мы знаем, что их 3. Это базовые понятия, без них тяжело сделать что-то более или менее сложное. Всегда будут появляться если не явные, то скрытые ошибки, которые и найти не получится без понимания основ. Quote Link to comment Share on other sites More sharing options...
Lion2032 Posted January 17, 2015 Report Share Posted January 17, 2015 А ещё справку полистайте по VBA. На MSDN и на бесчисленных форумах есть куча статей, в том числе на русском, где разобраны многие нюансы, характерные именно для VBA. В данном случае исправив первую ошибку, получили вторую - нельзя передавать в VBA массивы с явно указанным размером. Отсюда и ошибка - компилятор ждёт вторую скобку сразу за первой, а там у нас число. В скобках именно размерность массива. Убрать двойки - это не убрать скобки. Т.е. скобки оставляем, но в них пусто. Этим мы передаём массив без указанной размерности. Т.е. функция не будет знать, сколько элементов в массиве. Но мы знаем, что их 3. Это базовые понятия, без них тяжело сделать что-то более или менее сложное. Всегда будут появляться если не явные, то скрытые ошибки, которые и найти не получится без понимания основ. Спасибо. Quote Link to comment Share on other sites More sharing options...
Александр_ Posted January 22, 2015 Report Share Posted January 22, 2015 (edited) Всем привет. Подскажите пожалуйста, как поочередно активировать открытые документы? Таким способом получаю количество открытых документов int i = 0; var objNanoCADApp = new nanoCAD.Application(); i = objNanoCADApp.Documents.Count; но доступа к другим объектам я не нашел ни в Documents ни в Document. Уточню. В VBA это выгляди так: Dim app As nanoCAD.Application Set app = GetObject("", "nanoCAD.Application") Dim ThisDrawing As nanoCAD.Document For i = 1 To app.Documents.Count app.Documents.Item(i).Activate Set ThisDrawing = app.ActiveDocument 'тут делаем все что надо с документом Next i Как сделать то же самое в C# ? var objNanoCADApp = new nanoCAD.Application(); for (int ki = 0; ki < objNanoCADApp.Documents.Count; ki++ ) { // что сюда вставить что бы переключится на документ ki ? var ThisDrawing = objNanoCADApp.ActiveDocument; // что бы здесь сделать с документом некоторые действия. } Edited January 23, 2015 by Александр_ Quote Link to comment Share on other sites More sharing options...
Kreator Posted January 23, 2015 Report Share Posted January 23, 2015 Попробуйте так: objNanoCADApp.Documents[ki].Activate(); Quote Link to comment Share on other sites More sharing options...
Александр_ Posted January 23, 2015 Report Share Posted January 23, 2015 Попробуйте так: objNanoCADApp.Documents[ki].Activate(); Спасибо. Помогло. Сразу правда вылезло предупреждение "Неоднозначность между методом "nanoCAD.InanoCADDocument.Activate()" и "nanoCAD._DnanoCADDocumentEvents_Event.Activate", который методом не является. Используйте группу методов." Поэтому сделал так: (может кому пригодится) var objNanoCADApp = new nanoCAD.Application(); for (int ki = 1; ki < objNanoCADApp.Documents.Count+1; ki++ ) { nanoCAD.InanoCADDocument ddd; ddd = objNanoCADApp.Documents[ki]; ddd.Activate(); var ThisDrawing = objNanoCADApp.ActiveDocument; // здесь некоторые действия } Quote Link to comment Share on other sites More sharing options...
Сергей Ко Posted February 6, 2015 Report Share Posted February 6, 2015 Добрый день! Вернулся к разработке утилитки для NanCAD-а под Deplhi (версия 2009), Win7 x64 и столкнулся с такой проблемой: после получения объекта приложения ovnanoCAD := GetActiveOleObject('nanoCad.Application'); попытка привести переменную к типу Result := IDispatch(ovnanoCAD) as InanoCADApplication; вызывает ошибку "Interface not supprorted". Подскажите, в какую сторону копать? Quote Link to comment Share on other sites More sharing options...
yewgen Posted February 6, 2015 Report Share Posted February 6, 2015 Привет...Спасибо за тему...Зашел чисто случайно...Зацепило буду побывать мутить что то под nanoCAD Quote Link to comment Share on other sites More sharing options...
Александр_ Posted March 27, 2015 Report Share Posted March 27, 2015 Всем привет. Пытаюсь получить координату точки. Нашел здесь http://forum.nanocad.ru/index.php?showtopic=3182&view=findpost&p=14430 как это сделать. Пробую на C# ничего не получается. Пишет "Разрушительный сбой (Исключение из HRESULT: 0x8000FFFF (E_UNEXPECTED))". public nanoCAD.Application nc_app = new nanoCAD.Application(); public nanoCAD.Document nc_doc; private void button3_Click(object sender, EventArgs e) { nc_doc = nc_app.ActiveDocument; var point_a = nc_app.Utility.CreateSafeArrayFromVector(nc_app.Utility.GetPoint("0,0,0", "Укажите точку")); } Подскажите, что я делаю не так? Quote Link to comment Share on other sites More sharing options...
shoorup Posted April 1, 2015 Report Share Posted April 1, 2015 (edited) Поясните пожалуйста, что такое "вес команды" (weight) в конфигурационном файле nCAD.cfg ? Edited April 1, 2015 by shoorup Quote Link to comment Share on other sites More sharing options...
Lion007 Posted April 1, 2015 Report Share Posted April 1, 2015 вес команды это такая штука... в общем, работает это примерно так : бежит какая-то команда, с весом W1. в этот момент мы откуда-нибудь (например из меню, из тулбара, еще бог весть откуда) запускаем другую команду. с весом W2. если W2 >= W1, то вторая команда вышибает первую и запускается сама. а если W2 Quote Link to comment Share on other sites More sharing options...
shoorup Posted April 1, 2015 Report Share Posted April 1, 2015 Под "вышибает" это отменит, закроет? или приостановит на время выполнения W2? Ну впринципе понятно. Практикой только закрепить. Вобщем "weight" можно одним словом описать - "приоритет". Так? Quote Link to comment Share on other sites More sharing options...
Lion007 Posted April 1, 2015 Report Share Posted April 1, 2015 вышибает - это прекращает выполнение. а так - действительно, приоритет Quote Link to comment Share on other sites More sharing options...
Александр_ Posted April 14, 2015 Report Share Posted April 14, 2015 (edited) Вынужден повторить вопрос, ответа пока не нашел. На vba все работает. Sub NANO() Dim app As nanoCAD.Application Set app = GetObject("", "nanoCAD.Application") app.Visible = True Dim ut As nanoCAD.Utility Set ut = ThisDrawing.Utility Dim pp As Variant pp = ut.GetPoint("0", "Point !") Dim st As String st = pp(0) & " : " & pp(1) & " : " & pp(2) MsgBox (st) End Sub На C# ошибка "разрушительный сбой" в GetPoint var nc_ = new nanoCAD.Application(); nc_.Visible = true; Utility nc_util = nc_.Utility; double[] point = { 0, 0, 0 }; string promt = "Point !"; point = nc_util.GetPoint("0", promt); Что не так? Edited April 14, 2015 by Александр_ Quote Link to comment Share on other sites More sharing options...
asikunov Posted April 23, 2015 Report Share Posted April 23, 2015 Доброго времени суток! Начинаю программировать для Nanocad, делаю первое приложение на MultiCAD в VisualStudio. Сделал все согласно статье SDK "Создание нового проекта (MultiCAD.NET API)": в VisualStudio создал Class Library, добавил в references mapimgd.dll, текст cs-файла сделал таким: using Multicad.Runtime; using Multicad.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace ClassLibrary2 { public class Class1 { [CommandMethod("Example1")] public void Template1() { MessageBox.Show ("hello"); //Point3d pt1 = new Point3d(0, 0); } } } Подгрузил в Nanocad файл ClassLibrary2.dll, ошибок не было. Но команды под именем Example1 Nanocad почему-то не знает Помогите новичку! Quote Link to comment Share on other sites More sharing options...
Laziz Posted May 6, 2015 Report Share Posted May 6, 2015 Доброго времени суток! Начинаю программировать для Nanocad, делаю первое приложение на MultiCAD в VisualStudio. Сделал все согласно статье SDK "Создание нового проекта (MultiCAD.NET API)": в VisualStudio создал Class Library, добавил в references mapimgd.dll, текст cs-файла сделал таким: using Multicad.Runtime; using Multicad.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace ClassLibrary2 { public class Class1 { [CommandMethod("Example1")] public void Template1() { MessageBox.Show ("hello"); //Point3d pt1 = new Point3d(0, 0); } } } Подгрузил в Nanocad файл ClassLibrary2.dll, ошибок не было. Но команды под именем Example1 Nanocad почему-то не знает Помогите новичку! Скорее всего версия .Net Framework нито стоит у вас. Надо .Net Framework 3.5 1 Quote Link to comment Share on other sites More sharing options...
Ivanco Posted June 14, 2015 Report Share Posted June 14, 2015 в с# и MultiCAD новичок. Написал/взял из статей на хабре такое: public class SocketTableSample { [CommandMethod("summ_all_table", CommandFlags.NoCheck | CommandFlags.NoPrefix)] public void summ_all_table() { // Выбор всех объектов типа "таблица" McObjectId[] idSelecteds = ObjectFilter.Create(true).AddType(McTable.TypeID).GetObjects().ToArray(); if (idSelecteds == null || idSelecteds.Length == 0) { MessageBox.Show("Объекты не выбраны"); return; } for (int i = 0; i < idSelecteds.Length; i++) { McTable outObj = McObjectManager.GetObject(idSelecteds[i]); outObj.ExportToExcel(); } } } } компилируется и работает норм.но метод ExportToExcel() для каждой таблицы создает новую книгу Exel.Мне нужно чтобы каждая таблица чертежа экспортировалась в новый лист одной книги, т.е. 10 таблиц в чертеже = 1 книга с 10 листами Exel. подскажите пожалуйста как это реализовать? средствами MultiCAD это возможно? Quote Link to comment Share on other sites More sharing options...
Ivanco Posted July 2, 2015 Report Share Posted July 2, 2015 может кто подскажет как на другом языке сделать? (см.пост выше). Суть вопроса - нужно все таблицы из .dwg файла(пространство модели) перекинуть в одну Excel книгу, но на разные листы. Quote Link to comment Share on other sites More sharing options...
Kreator Posted July 2, 2015 Report Share Posted July 2, 2015 компилируется и работает норм.но метод ExportToExcel() для каждой таблицы создает новую книгу Exel.Мне нужно чтобы каждая таблица чертежа экспортировалась в новый лист одной книги, т.е. 10 таблиц в чертеже = 1 книга с 10 листами Exel. подскажите пожалуйста как это реализовать? средствами MultiCAD это возможно? public bool ExportToExcel(ref String strPath); Пробовали указать путь один и тот же? Проверить не могу, у меня Excel'я нет. Quote Link to comment Share on other sites More sharing options...
Ivanco Posted July 11, 2015 Report Share Posted July 11, 2015 (edited) Пробовали указать путь один и тот же? Проверить не могу, у меня Excel'я нет. outObj.ExportToExcel( @"C:\1.xlsx"); так? не работает..компилируется,но при выполнении в нано Exel "падает". Edited July 11, 2015 by Ivanco Quote Link to comment Share on other sites More sharing options...
Kreator Posted July 11, 2015 Report Share Posted July 11, 2015 outObj.ExportToExcel( @"C:\1.xlsx"); так? не работает..компилируется,но при выполнении в нано Exel "падает". Там ref указан, надо передать не значение, а переменную по ссылке: string s1; s1="c:\1.xls"; ...(ref s1); Quote Link to comment Share on other sites More sharing options...
Ivanco Posted July 24, 2015 Report Share Posted July 24, 2015 (edited) Там ref указан, надо передать не значение, а переменную по ссылке public string a = @"C:\1.csv"; outObj.SaveToFile(a); вот так работает, но т.к. я массив(см.выше) в цикле обхожу ,получается что у меня каждая таблица файл переписывает, а мне нужно как то добавлять/дописывать в файл. как это сделать? public bool SaveToFile(ref String fileName, IntPtr hParent); вот такое еще в описании API нашел - незнаю что это- теоретических знаний мало(. ___________ решено:http://forum.nanocad.ru/index.php?showtopic=6881&view=findpost&p=33417 Edited August 7, 2015 by Ivanco Quote Link to comment Share on other sites More sharing options...
Kreator Posted July 24, 2015 Report Share Posted July 24, 2015 public string a = @"C:\1.csv"; outObj.SaveToFile(a); вот так работает, но т.к. я массив(см.выше) в цикле обхожу ,получается что у меня каждая таблица файл переписывает, а мне нужно как то добавлять/дописывать в файл. как это сделать? public bool SaveToFile(ref String fileName, IntPtr hParent); вот такое еще в описании API нашел - незнаю что это- теоретических знаний мало(. Как вариант, можно файлы сохранять отдельно с индексами, а потом подключиться к Excel и уже его средствами (через его API) все листы перенести в один файл. Может разработчики чего умнее подскажут. Кстати, попробуйте в клубе разработчиков спросить, там все вопросы касаемо API и правильности применения функций разъяснят. Quote Link to comment Share on other sites More sharing options...
doctorraz Posted July 24, 2015 Report Share Posted July 24, 2015 (edited) может кто подскажет как на другом языке сделать? (см.пост выше). Суть вопроса - нужно все таблицы из .dwg файла(пространство модели) перекинуть в одну Excel книгу, но на разные листы. на другом языке VBA это кусок кода, но смысл думаю понятен 'цепляемся к эксель ФлагExcel = 0 On Error Resume Next 'проверочка запущени ли Excel Set objExcel = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set objExcel = CreateObject("Excel.Application") objExcel.Workbooks.Add ФлагExcel = 1 End If On Error GoTo 0 'имя нового листа sListName = "Отчет за " & Date$ On Error Resume Next ' добавляем лист objExcel.Worksheets.Add.Name = sListName If Err.Number <> 0 Then 'лист уже есть On Error GoTo 0 objExcel.ActiveWorkbook.ActiveSheet.Delete 'мочим созданный objExcel.ActiveWorkbook.Sheets(sListName).Select 'переходим на наш End If objExcel.Visible = 1 objExcel.DisplayAlerts = False 'отрубаем алерт '*************************************** 'в цикле формируем массива для Excel iТемп = 1 For Each Маркер In МаркерСпец ' !!!! добавить все данные для спецификации, !!!!!! может есть смысл добавить еще подраздел? arrТемп(iТемп, 1) = Маркер!razdel & ";" & Маркер!naim & ";" & Маркер!POZ & ";" & Маркер!kolrez iТемп = iТемп + 1 Next '******************* подготовка данных ********* Set Region = objExcel.ActiveWorkbook.Sheets(sListName).Range("A1:B" & МаркерСпец.Count & "") ' определяем куда писать Region.Value = arrТемп 'записываем массив на лист End Function потом аналогично создаем новый лист переходим на него и опять заполняем данными Edited July 24, 2015 by raz 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.