Перейти к содержанию

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


Рекомендуемые сообщения

Вопрос к знатокам.

Есть lisp (автор Lee Mac, команда iburst), в нанокаде он не работает. Можно с ним что-то сделать, чтобы всё работало? ))

BurstUpgradedV1-2.lsp

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...
  • Ответов 267
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Популярные посты

не все. от версии к версии поддержка LISP растет. по этому куску вырванного из контекста, не понятно, что там проще или сложнее. по языкам ИМХО: LISP - кроме автокад/нанокад, почти нигде не понадо

Начиная с 7 версии можно получить nanocad.application через .NET, способом не зависящим от регистрации COM сервера   https://github.com/RobinKzn/CustomAutosaveNanoCad/blob/master/autosave7x3

неужели никаких предложений нету?

Изображения в теме

Добрый день!

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем swell{d}
Ссылка на сообщение
Поделиться на другие сайты
  • 7 месяцев спустя...

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Добрый день!

 

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

Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

 

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

Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

 

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Добрый день

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...

Скажите, а NanoCad можно использовать в своих программах в виде ActiveX контрола ?

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

 

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Добрый день!

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

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

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

Спасибо!

Ссылка на сообщение
Поделиться на другие сайты

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 использовать, для получения нужной информации.

Изменено пользователем Ivanco
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 6 месяцев спустя...

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

вот статья

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

Выдает ошибку скрипта

Изменено пользователем val100
Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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)

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

Ссылка на сообщение
Поделиться на другие сайты

Ну только это и не додумался попробовать!!!!

Работает!

Огромное СПАСИБО!

Изменено пользователем val100
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Расскажите друзьям

    Нравится Официальный форум компании Нанософт? Расскажите друзьям!

×
×
  • Создать...