Jump to content

Первые шаги в мир программирования под nanoCAD


Recommended Posts

  • 1 month later...

Добрый день!

У меня 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

в результате получаем отдельно текст и отдельно линию выноски. Подскажите - можно ли получить как то единую позиционную выноску, как в нанокаде?

Link to comment
Share on other sites

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 by swell{d}
Link to comment
Share on other sites

  • 7 months later...

Подскажите пожалуйста, кто знает. Как изменить свойства примитивов оптом?

Я перебираю все элементы из 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");

Можно ли таким образом во всех линиях набора изменить толщину? Или для операций оптом нужно делать по другому?

Link to comment
Share on other sites

Можно ли таким образом во всех линиях набора изменить толщину? Или для операций оптом нужно делать по другому?

не уверен, что возможны операции "оптом" (в любом языке программирования)

гоняете набор полученный SelectionSet в цикле и меняете свойства..каждого Item

Думаю больше вариантов нет.

Link to comment
Share on other sites

  • 1 month later...

Добрый день!

 

Вот текст программы на 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();

Link to comment
Share on other sites

Добрый день!

 

Вот текст программы на 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 пересобираете? меняете ссылки на библиотеки?

Link to comment
Share on other sites

Добрый день!

 

Вот текст программы на 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.

Нанокад запускается, создаётся новый документ, а вот с текстом беда(

Link to comment
Share on other sites

Даже не знаю где спросить...

Но тема про программирование...

под нану энаблер для СПДС существует? если да где взять?

если нет, то будет ли, а то дискриминация происходит.. под АК энаблер СПДС есть

Link to comment
Share on other sites

  • 2 months later...

Добрый день

При подключении к nanoCAD использую

Set app = GetObject("", "nanoCAD.Application")

При этом открывается последний установленный продукт nanoCAD (их установлено несколько СПДС, Геоника, СКС).

Как сделать, чтобы открывался, например, nanoCAD СПДС?

Link to comment
Share on other sites

  • 4 months later...
  • 1 month later...

Вопрос. Для Компас существует библиотека Компас-макро, позволяющая записывать действия в программе и составлять макросы на питоне. Существует ли что то подобное для нанокад (автокад) или планируется?

Посоветуйте книги, учебные материалы, методички конкретно о программировании к сапр платформам и к нанокад в частности.

Link to comment
Share on other sites

Существует ли что то подобное для нанокад (автокад) или планируется?

в autocad да есть это - .scr скрипты. в нано нет. планируется или нет - вопрос к разработчикам.

сомнительно что это прям помогает в программировании приложений ибо (насколько я понимаю) , это просто сценарий записи консольных команд (т.е. последовательности нажатия определенных кнопок). А если Вы планируете делать какой то свой функционал (на который нет кнопки/комманды) то это Вам как бы и не поможет особо.

 

Посоветуйте книги, учебные материалы, методички конкретно о программировании к сапр платформам и к нанокад в частности.

 

Первично язык программирования. А потом хоть к САПР хоть к офисному ПО. Т.е. если нужно прогать под нано , учим сперва нужный язык (под нано их много : C++ ,С# ,Lisp,VBS,Jscript) а потом читаем разбираемся с документацией по API.

Link to comment
Share on other sites

в autocad да есть это - .scr скрипты. в нано нет. планируется или нет - вопрос к разработчикам.

почему нет? есть VBS и JS - как раз последовательность вызовов команд (нажатия кнопочек). Это как раз макросы... Нет записывателя макросов (аля как в Microsoft Office), но сами скриптовые языки поддерживаются.

Link to comment
Share on other sites

  • 1 month later...

Добрый день!

В VB делаю выбор объекта:

ThisDWG.Utility.GetEntity(returnObj, pt1, "Выберите объект")

Каким образом можно получить координаты выбранного объекта? В pt1 возвращаются координаты x,y без z.

Спасибо!

Link to comment
Share on other sites

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 by Ivanco
  • Like 1
Link to comment
Share on other sites

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 получить координаты? Примеров не нашёл.

Link to comment
Share on other sites

Спасибо! Я это понял. А как из returnObj получить координаты? Примеров не нашёл.

а что это? какого типа объект(точка,блок)?

Link to comment
Share on other sites

  • 6 months later...

Помогите разобраться с простейшим случаем

вот статья

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 by val100
Link to comment
Share on other sites

Как нужно записать обращение к этому объекту-блоку

Если присвоение типа

 

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)

Уж не помню, надо ли точку с запятой в конце строки :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...