Jump to content

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


Recommended Posts

в процессе работы с teigha возникло подозрение, что можно сделать приложение, которое будет открывать DWG даже без nanoCADa вовсе. ну типа REALDWG. это реально сделать?

Link to comment
Share on other sites

Предполагаю, что да. На нам надо не открывать, а работать с ним :D

Предпологаю, что нет :). Попробовал просто в проект консольного приложения добавить ссылки на Teigha. При попытке загрузить документ (базу данных) получаю исключение: "Can not intercept exception. Debugged program can not be continued and properties can not be evaluated.

System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "hostdbmgd, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Не удается найти указанный файл.

 

".

  • Like 1
Link to comment
Share on other sites

вы не верно поняли. я это сделал, так как незнал, какие именно DLL тайге нужны для работы. если бы все сработало, я бы начал по одной их удалять, и осталось бы две-три нужных.

Link to comment
Share on other sites

  • 3 months later...
В 07.04.2017 в 10:55, 0leg сказал:

Получается:

-для блока InsertionPoint()

-для окружности/дуги Center()

-для отрезка EndPoint(), StartPoint()

Спасибо за помощь!

Меня тоже заинтересовал этот вопрос. Эти свойства возвращают объект класса Point3d, но при обращении к координате X:

ut.prompt(ss.item(i).startpoint.x)

у меня выдаёт ошибку.

Помогите, пожалуйста.

Link to comment
Share on other sites

Это у Вас VB .NET? ut.prompt, это же вроде COM интерфейс. Гуглите Автокад VBA объектная модель, если COM у Вас.

Link to comment
Share on other sites

16 часов назад, Robink сказал:

Это у Вас VB .NET? ut.prompt, это же вроде COM интерфейс. Гуглите Автокад VBA объектная модель, если COM у Вас.

Да, COM. Пишу на JS.

Возможно ли то, что объектные модели автокада и нанокада отличаются? Потому как описание свойств текстового объекта в https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-ActiveX/files/GUID-ED298AC7-19E0-4E54-8983-48439EF70116-htm.html не соответсвует получаемым значениям.

Приведу примеры:

- Свойства TextAlignmentPoint и Insertionpoint возвращают ошибку object Error вместо массива значений,

- Свойство Lineweight вместо acLnWt009 возвращает 9, а вместо acLnWtByLwDefault возвращает -1,

- Зато свойство Position, которого нет в Автокаде возвращает пустую строку.

На примере текстового объекта объясните, пожалуйста, как можно получить координаты объекта?

Edited by Snegopad
Добавил про Position
Link to comment
Share on other sites

1 час назад, Snegopad сказал:

Возможно ли то, что объектные модели автокада и нанокада отличаются?

нанокад более "придирчив" к типу данных, код который АК жрет , нано давится. т.е. типы надо приводить явно. (не всегда, но..)

 

1 час назад, Snegopad сказал:

Свойства TextAlignmentPoint и Insertionpoint возвращают ошибку object Error вместо массива значений,

Dim pnt1(2) As Double

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

Edited by doctorraz
  • Like 1
  • Thanks 1
Link to comment
Share on other sites

9 минут назад, doctorraz сказал:

нанокад более "придирчив" к типу данных, код который АК жрет , нано давится. т.е. типы надо приводить явно. (не всегда, но..)

 


Dim pnt1(2) As Double

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

Dim pnt1(3) as Double

Link to comment
Share on other sites

10 минут назад, Robink сказал:

Dim pnt1(3) as Double

у точки три координаты

хотя если хочется поизвращаться то

Option Base 1

только вот

Split

опять начнет массив с нуля :P

  • Thanks 1
Link to comment
Share on other sites

Там вообще js. А так ничего кроме Option Explicit не надо. Я забыл, что там в VBA указывается, номер последнего элемента или количество элементов, может я не прав.

Link to comment
Share on other sites

3 минуты назад, Robink сказал:

Я забыл, что там в VBA указывается, номер последнего элемента или количество элементов, может я не прав.

номер последнего элемента указывается

только первый элемент имеет номер ноль (по умолчанию), что ява что вебе

поэтому  Dim pnt1(2) As Double это xyz (если Base не 1)

Link to comment
Share on other sites

Со скриптами проблема, что вроде как отлаживать негде, нет редактора, если только из по VBA редактора в офисе.

Link to comment
Share on other sites

4 минуты назад, Robink сказал:

Со скриптами проблема, что вроде как отлаживать негде, нет редактора, если только из по VBA редактора в офисе.

не только

Спойлер

1288805894__4.jpg.55910ea50d1dbf33234c77f8567e4265.jpg

с явой не заморачивался, но наверняка, что-то есть

Link to comment
Share on other sites

очевидножэж что, посмотреть значение в Watches или Locals и присвоить это значение переменной это не одно и тоже

Snegopad присвоить не может

  • Thanks 1
Link to comment
Share on other sites

http://vbamodel.narod.ru/AutoCAD/idh_textalignmentpoint.htm

 

Замечания

Text: Это свойство будет сброшено к 0, 0, 0 и станет только для чтения когда свойство Alignment установлено в acAlignmentLeft. Текст выравнивают используя свойство InsertionPoint.

Link to comment
Share on other sites

Robink, doctorraz, A.Kudrjashov, спасибо за помощь!!

Открыл Watches в VBA. Насколько я понял, проблема была в несоответствии типа данных при выводе через ut.prompt.

На выражения типа:

ut.prompt(ss(0).Item(0).Insertionpoint)

и даже на

ut.prompt(ss(0).Item(0).Insertionpoint(0))

выдаёт ошибку Type mismatch.

В итоге я сделал:

Dim pnt as Variant

pnt = ss(0).Item(0).Insertionpoint

ut.prompt(pnt(0))

И заработало!

Edited by Snegopad
Link to comment
Share on other sites

14 минут назад, Snegopad сказал:

Robink, doctorraz, A.Kudrjashov, спасибо за помощь!!

Открыл Watches в VBA. Насколько я понял, проблема была в несоответствии типа данных при выводе через ut.prompt.

На выражения типа:

ut.prompt(ss(0).Item(0).Insertionpoint)

и даже на

ut.prompt(ss(0).Item(0).Insertionpoint(0))

выдаёт ошибку Type mismatch.

В итоге я сделал:

Dim pnt as Variant

pnt = ss(0).Item(0).Insertionpoint

ut.prompt(pnt(0))

И заработало!


Там в рекомендованных nanoSoft VBScript и JScript полная вешалка !
Массивы объектов AutoCAD ни VBScript, ни JScript не понимают.
Сами объекты тоже - не достучишься.

Пример JScript

Спойлер

image.png.c668f046ff9f55c16d25d3295e6c1d9d.png

.

Спойлер

image.png.10a43fe52fe80d03479a439fb92ec324.png

 

При этом в VBScript

Спойлер

image.png.59da3580b26fdd4e313237bbf5925d2d.png

:(


 

Edited by A.Kudrjashov
  • Like 1
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...