Artem_R Posted August 4, 2015 Report Share Posted August 4, 2015 Вопрос к знатокам. Есть lisp (автор Lee Mac, команда iburst), в нанокаде он не работает. Можно с ним что-то сделать, чтобы всё работало? )) BurstUpgradedV1-2.lsp Quote Link to comment Share on other sites More sharing options...
SergeySS Posted September 21, 2015 Report Share Posted September 21, 2015 Добрый день! У меня 2 вопроса: 1) Возможно его надо не сюда задавать: Стоял нанокад 6 64 бита, делал скрипт из под Экселя под него на VBA , потом черт дернул 32 битный тоже поставить (надеялся там справку по API найти(((), после этого снес 32 битный нанокад и скрипт перестал запускаться, потому что библиотека NCauto.dll ссылается на 32 битный нанокад и никак не смог это победить (реестр почистил, 64 битный нанокад "исправил") . Что то можно с этим сделать? 2) В течении нескольких дней (только начинаю постигать VBA) пытался нарисовать выноску через AcadLeader и AcadMLeader ничего толком не получалось,приведенные примеры почему то не шли, пока не натолкнулся на такой код: Sub Example_AddLeader() ' Этот пример создает слой в пространстве модели. ' Слой не привязан ни к какому объекту аннотации в этом примере. Dim leaderObj As AcadLeader Dim points(0 To 8) As Double Dim leaderType As Integer Dim annotationObject As AcadObject points(0) = 0: points(1) = 0: points(2) = 0 points(3) = 4: points(4) = 4: points(5) = 0 points(6) = 4: points(7) = 5: points(8) = 0 leaderType = acLineWithArrow Set annotationObject = Nothing ' Создайте объект слоя в пространстве модели Set leaderObj = ThisDrawing.ModelSpace.AddLeader(points, annotationObject, leaderType) ZoomAll End Sub в результате получаем отдельно текст и отдельно линию выноски. Подскажите - можно ли получить как то единую позиционную выноску, как в нанокаде? Quote Link to comment Share on other sites More sharing options...
swell{d} Posted September 23, 2015 Report Share Posted September 23, 2015 (edited) SergeySS, есть только для спдса: Sub rdv_notepos(text1 As String, text2 As String, x_pos As Double, y_pos As Double, x1 As Double, y1 As Double, Optional x2 As Double, Optional y2 As Double, Optional dots As Boolean = False, Optional rotation As Double = 0) On Error Resume Next Dim obj As McCOM2.SymSpdsNotePosition Set obj = server.CreateObject("SymSpdsNotePosition") Dim pt1(2) As Double, pt2(2) As Double, pt3(2) As Double pt1(0) = x_pos pt1(1) = y_pos obj.TextPosition = pt1 obj.text = text1 '' если будет вылезать проблема с точкой, из которой строится выноска, '' то можно попробовать сделать вторую строку оч. длинную пустую, наприсовать выноски, '' а затем уже задать строке нужное значение obj.Footer = " " pt2(0) = x1 pt2(1) = y1 obj.Leaders.Add pt2 If x2 <> 0 Then pt3(0) = x2 pt3(1) = y2 obj.Leaders.Add pt3 End If If dots Then obj.Leaders.item(1).Arrow = mcArrowDotFilled Else obj.Leaders.item(1).Arrow = mcArrowEmpty End If obj.Footer = text2 If rotation <> 0 Then obj.Direction = rotation / 57.2957795130823 End If obj.Place False, False End Sub Edited September 23, 2015 by swell{d} Quote Link to comment Share on other sites More sharing options...
SergeySS Posted September 23, 2015 Report Share Posted September 23, 2015 Спасибо, swell{d}. Для Нанокада ее насколько понимаю, никак не переписать? Quote Link to comment Share on other sites More sharing options...
Александр_ Posted May 14, 2016 Report Share Posted May 14, 2016 Подскажите пожалуйста, кто знает. Как изменить свойства примитивов оптом? Я перебираю все элементы из ModelSpace в цикле и меняю свойства примитивов ("AcDbBlockReference", "AcDbLine", "AcDbArc" и т.д. ). Но если в чертеже много объектов (> 1000), то время обработки чертежа существенно возрастает. Думал сделать через набор nanoCAD.SelectionSet nc_sel_set_lines = nc_doc.SelectionSets.Add("set_lines"); nc_sel_set_lines.Select(nanoCAD.AcSelect.acSelectionSetAll, 0, 0, 0, "LINE"); Можно ли таким образом во всех линиях набора изменить толщину? Или для операций оптом нужно делать по другому? Quote Link to comment Share on other sites More sharing options...
doctorraz Posted May 14, 2016 Report Share Posted May 14, 2016 Можно ли таким образом во всех линиях набора изменить толщину? Или для операций оптом нужно делать по другому? не уверен, что возможны операции "оптом" (в любом языке программирования) гоняете набор полученный SelectionSet в цикле и меняете свойства..каждого Item Думаю больше вариантов нет. Quote Link to comment Share on other sites More sharing options...
karakoha Posted July 14, 2016 Report Share Posted July 14, 2016 Добрый день! Вот текст программы на C#, на нанокаде 5.0 работает, на нанокаде 3.7 не работает, почему? Нанокад запускается, но на методе добавление текста C# пишет ошибку "Интерфейс не зарегистрирован (Исключение из HRESULT: 0x80040155)" nanoCAD.Application ncad = new nanoCAD.Application(); nanoCAD.Utility nu; nanoCAD.Document nd; nd = ncad.Application.Documents.Add(""); double[] nn = new double[3] { 100, 100, 0 }; dynamic SafeV1; SafeV1 = nd.Utility.CreateSafeArrayFromVector(nn); nd.ModelSpace.AddText("AAAA", SafeV1, 100); ncad.ZoomAll(); Quote Link to comment Share on other sites More sharing options...
Robink Posted July 14, 2016 Report Share Posted July 14, 2016 Добрый день! Вот текст программы на C#, на нанокаде 5.0 работает, на нанокаде 3.7 не работает, почему? Нанокад запускается, но на методе добавление текста C# пишет ошибку "Интерфейс не зарегистрирован (Исключение из HRESULT: 0x80040155)" nanoCAD.Application ncad = new nanoCAD.Application(); nanoCAD.Utility nu; nanoCAD.Document nd; nd = ncad.Application.Documents.Add(""); double[] nn = new double[3] { 100, 100, 0 }; dynamic SafeV1; SafeV1 = nd.Utility.CreateSafeArrayFromVector(nn); nd.ModelSpace.AddText("AAAA", SafeV1, 100); ncad.ZoomAll(); А Вы под 3.7 пересобираете? меняете ссылки на библиотеки? Quote Link to comment Share on other sites More sharing options...
karakoha Posted July 14, 2016 Report Share Posted July 14, 2016 Добрый день! Вот текст программы на C#, на нанокаде 5.0 работает, на нанокаде 3.7 не работает, почему? Нанокад запускается, но на методе добавление текста C# пишет ошибку "Интерфейс не зарегистрирован (Исключение из HRESULT: 0x80040155)" nanoCAD.Application ncad = new nanoCAD.Application(); nanoCAD.Utility nu; nanoCAD.Document nd; nd = ncad.Application.Documents.Add(""); double[] nn = new double[3] { 100, 100, 0 }; dynamic SafeV1; SafeV1 = nd.Utility.CreateSafeArrayFromVector(nn); nd.ModelSpace.AddText("AAAA", SafeV1, 100); ncad.ZoomAll(); А Вы под 3.7 пересобираете? меняете ссылки на библиотеки? Конечно, загружаю COM библиотеку от нанокада 3.7. Нанокад запускается, создаётся новый документ, а вот с текстом беда( Quote Link to comment Share on other sites More sharing options...
dows Posted July 14, 2016 Report Share Posted July 14, 2016 а зачем под 3.7, извините? Quote Link to comment Share on other sites More sharing options...
doctorraz Posted July 14, 2016 Report Share Posted July 14, 2016 Даже не знаю где спросить... Но тема про программирование... под нану энаблер для СПДС существует? если да где взять? если нет, то будет ли, а то дискриминация происходит.. под АК энаблер СПДС есть Quote Link to comment Share on other sites More sharing options...
oper_80 Posted September 27, 2016 Report Share Posted September 27, 2016 Добрый день При подключении к nanoCAD использую Set app = GetObject("", "nanoCAD.Application") При этом открывается последний установленный продукт nanoCAD (их установлено несколько СПДС, Геоника, СКС). Как сделать, чтобы открывался, например, nanoCAD СПДС? Quote Link to comment Share on other sites More sharing options...
Alex1979 Posted February 1, 2017 Report Share Posted February 1, 2017 Скажите, а NanoCad можно использовать в своих программах в виде ActiveX контрола ? Quote Link to comment Share on other sites More sharing options...
grgv Posted March 2, 2017 Report Share Posted March 2, 2017 Вопрос. Для Компас существует библиотека Компас-макро, позволяющая записывать действия в программе и составлять макросы на питоне. Существует ли что то подобное для нанокад (автокад) или планируется? Посоветуйте книги, учебные материалы, методички конкретно о программировании к сапр платформам и к нанокад в частности. Quote Link to comment Share on other sites More sharing options...
Ivanco Posted March 2, 2017 Report Share Posted March 2, 2017 Существует ли что то подобное для нанокад (автокад) или планируется? в autocad да есть это - .scr скрипты. в нано нет. планируется или нет - вопрос к разработчикам. сомнительно что это прям помогает в программировании приложений ибо (насколько я понимаю) , это просто сценарий записи консольных команд (т.е. последовательности нажатия определенных кнопок). А если Вы планируете делать какой то свой функционал (на который нет кнопки/комманды) то это Вам как бы и не поможет особо. Посоветуйте книги, учебные материалы, методички конкретно о программировании к сапр платформам и к нанокад в частности. Первично язык программирования. А потом хоть к САПР хоть к офисному ПО. Т.е. если нужно прогать под нано , учим сперва нужный язык (под нано их много : C++ ,С# ,Lisp,VBS,Jscript) а потом читаем разбираемся с документацией по API. Quote Link to comment Share on other sites More sharing options...
dows Posted March 2, 2017 Report Share Posted March 2, 2017 в autocad да есть это - .scr скрипты. в нано нет. планируется или нет - вопрос к разработчикам. почему нет? есть VBS и JS - как раз последовательность вызовов команд (нажатия кнопочек). Это как раз макросы... Нет записывателя макросов (аля как в Microsoft Office), но сами скриптовые языки поддерживаются. Quote Link to comment Share on other sites More sharing options...
0leg Posted April 7, 2017 Report Share Posted April 7, 2017 Добрый день! В VB делаю выбор объекта: ThisDWG.Utility.GetEntity(returnObj, pt1, "Выберите объект") Каким образом можно получить координаты выбранного объекта? В pt1 возвращаются координаты x,y без z. Спасибо! Quote Link to comment Share on other sites More sharing options...
Ivanco Posted April 7, 2017 Report Share Posted April 7, 2017 (edited) ThisDWG.Utility.GetEntity(returnObj, pt1, "Выберите объект") Каким образом можно получить координаты выбранного объекта? В pt1 возвращаются координаты x,y без z. в SDK справке есть пример.. Public Sub GetEntity( _ ByRef Object As Variant, _ ByRef PickedPoint As Variant, _ Optional ByVal Prompt As Variant _ ) Object - выбранный объект PickedPoint - указанная точка Prompt - текст, выводимый в командной строке, как подсказка. Метод запрашивает у пользователя объект из чертежа. Если объект был выбран, то первый параметр Object, возвращает ссылку на выбранный объект. Второй параметр содержит координаты точки указанной пользователем при выборе, в мировых координатах. Если пользователь отменит выбор, то метод генерирует исключение. т.е. в Вашем примере pt1 это указанная точка, а не объект. т.е. нужно returnObj использовать, для получения нужной информации. Edited April 7, 2017 by Ivanco 1 Quote Link to comment Share on other sites More sharing options...
0leg Posted April 7, 2017 Report Share Posted April 7, 2017 ThisDWG.Utility.GetEntity(returnObj, pt1, "Выберите объект") Каким образом можно получить координаты выбранного объекта? В pt1 возвращаются координаты x,y без z. в SDK справке есть пример.. Public Sub GetEntity( _ ByRef Object As Variant, _ ByRef PickedPoint As Variant, _ Optional ByVal Prompt As Variant _ ) Object - выбранный объект PickedPoint - указанная точка Prompt - текст, выводимый в командной строке, как подсказка. Метод запрашивает у пользователя объект из чертежа. Если объект был выбран, то первый параметр Object, возвращает ссылку на выбранный объект. Второй параметр содержит координаты точки указанной пользователем при выборе, в мировых координатах. Если пользователь отменит выбор, то метод генерирует исключение. т.е. в Вашем примере pt1 это указанная точка, а не объект. т.е. нужно returnObj использовать, для получения нужной информации. Спасибо! Я это понял. А как из returnObj получить координаты? Примеров не нашёл. Quote Link to comment Share on other sites More sharing options...
Ivanco Posted April 7, 2017 Report Share Posted April 7, 2017 Спасибо! Я это понял. А как из returnObj получить координаты? Примеров не нашёл. а что это? какого типа объект(точка,блок)? Quote Link to comment Share on other sites More sharing options...
0leg Posted April 7, 2017 Report Share Posted April 7, 2017 Любой объект. В свойствах точек/блоков есть Геометрия: ПоложениеX,Y,Z- вот их и надо взять Quote Link to comment Share on other sites More sharing options...
0leg Posted April 7, 2017 Report Share Posted April 7, 2017 Получается: -для блока InsertionPoint() -для окружности/дуги Center() -для отрезка EndPoint(), StartPoint() Спасибо за помощь! 1 Quote Link to comment Share on other sites More sharing options...
val100 Posted October 10, 2017 Report Share Posted October 10, 2017 (edited) Помогите разобраться с простейшим случаем вот статья https://www.nanocad....rticles=4644588 код с работающим примером на VBS Dim ms Dim ut Dim ptInsert Set ms = ThisDrawing.ModelSpace REM доступ к пространству Модели текущего документа Set ut = ThisDrawing.Utility REM доступ к командной строке текущего документа ptInsert = ut.GetPoint("0, 0, 0", "Укажите точку вставки") REM запрос к пользователю координат точки вставки блока ms.InsertBlock ptInsert," C:\MyBlocks\GreenCar.dwg", 1,1,1,0 REM вставляем блок в пространство модели В результате в чертеж вставляется блок И все Замечательно работает! Но Теперь появилась потребность, получить доступ к этому вставленному блоку и изменить свойство блока например название слоя или вес ... Как нужно записать обращение к этому объекту-блоку Если присвоение типа Dim objRef Set objRef = ms.InsertBlock ptInsert," C:\MyBlocks\GreenCar.dwg", 1,1,1,0 Выдает ошибку скрипта Edited October 10, 2017 by val100 Quote Link to comment Share on other sites More sharing options...
Kreator Posted October 10, 2017 Report Share Posted October 10, 2017 Как нужно записать обращение к этому объекту-блоку Если присвоение типа Dim objRef Set objRef = ms.InsertBlock ptInsert," C:\MyBlocks\GreenCar.dwg", 1,1,1,0 Выдает ошибку скрипта Давно с VBA и VBS не работаю, но помнится, удивил меня синтаксис, позволяющий писать вызовы с параметрами не в скобках, а через запятую. Предлагаю попробовать заменить Set objRef = ms.InsertBlock ptInsert," C:\MyBlocks\GreenCar.dwg", 1,1,1,0 на Set objRef = ms.InsertBlock(ptInsert," C:\MyBlocks\GreenCar.dwg", 1,1,1,0) Уж не помню, надо ли точку с запятой в конце строки Quote Link to comment Share on other sites More sharing options...
val100 Posted October 10, 2017 Report Share Posted October 10, 2017 (edited) Ну только это и не додумался попробовать!!!! Работает! Огромное СПАСИБО! Edited October 10, 2017 by val100 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.