Jump to content

Перенос модуля из AutoCAD


Recommended Posts

>тогда вопрос - нельзя средствами VB

можно

только для демонстрации возможости

Set SPDS = CreateObject("McCOM2.Server") 'Получаем COM-сервер СПДС
Set mcNote = SPDS.CreateObject("McCOM2.SymNote")
mcNote.Text = "Текст выноски"
mcNote.Place False, True 'интерактивная вставка
mcNote.Place False, False 'координаты надо задать программно

если вдруг кто пропустил.. приобщайтесь McCOM2.chm и Состав и работа MechWizard.doc

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

>Я не смог по id получить выносную для исправления, преобразовать McObject в McNoteLeader

хехе, тут у наны затык по сравнению с папой (((

писал уже на этом форуме и форуме разработчиков наны, что невозможно передать объект наны в McCOM, по ID, но разработчикам не до этого

Set ObjMC = spds.Object(objAK) 'имеем полный доступ к свойствам объектов СПДС в АК но в нане "method not implemented under this platform"

а вот в папе это реализовано, и получается очень удобно, чтобы собрать объекты со всего документа (модели и листов) селсетом с фильтрами получаем коллекцию и потом в цикле предаем в McCOM..

по сравнению, с переключением листов.. работает шустрее..

даже блоки можно так передавать и дергать с них значения атрибутов напрямую...

Link to comment
Share on other sites

>Я не смог по id получить выносную для исправления, преобразовать McObject в McNoteLeader

хехе, тут у наны затык по сравнению с папой (((

писал уже на этом форуме и форуме разработчиков наны, что невозможно передать объект наны в McCOM, по ID, но разработчикам не до этого

Set ObjMC = spds.Object(objAK) 'имеем полный доступ к свойствам объектов СПДС в АК но в нане "method not implemented under this platform"

а вот в папе это реализовано, и получается очень удобно, чтобы собрать объекты со всего документа (модели и листов) селсетом с фильтрами получаем коллекцию и потом в цикле предаем в McCOM..

по сравнению, с переключением листов.. работает шустрее..

даже блоки можно так передавать и дергать с них значения атрибутов напрямую...

Я с MC в COM не работал. Только NET. На С# приведение типов сработало, может на VB что то не то делал, но помню, что бился долго, но так и не смог.

Посмотрел свою тему на developers.nanocad.ru там что то было с приведением типов (is as) наверное исправили...

Edited by Robink
Link to comment
Share on other sites

>наверное исправили...

в 10.1 нано пишет метод не реализован в этой платформе.

если б исправили, давно уже б носом ткнули... а так типа не слышат..

 

Link to comment
Share on other sites

> он в платформе есть?

таблицы, выноски и еще кое, что это он и есть.. с слегка кастрированным функционалом.

я ж выше дал пример, он в платформе сработает как есть)))

в платформе нет своих таблиц и выносок.. частично mcad,и куски из автокад.

Link to comment
Share on other sites

Начал я ваять своего Франкенштейна.

 

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

Подскажите, где моя ошибка?

 

Imports Multicad.Runtime
Imports Multicad.DatabaseServices
Imports Multicad.DatabaseServices.StandardObjects
Imports System.Windows.Forms
Namespace insNewBlock
   Public Class insNewBlock
    <CommandMethod("cus_newBlock", CommandFlags.NoCheck Or CommandFlags.Redraw)>
    Public Sub SurroundingSub()
	    Dim blName As String = "EVOLUTION EKF 411 AL UD"
	    Dim blpatch As String = "h:\документы отделов\САПР\Tecnoeka\" & blName & ".dwg"
	    Dim doc As McDocument = McDocumentsManager.GetActiveDoc()
	    Dim refDoc As McDocument = McDocumentsManager.OpenDocument(blpatch, False, True)
	    Dim sheetsId As List(Of Multicad.McObjectId) = refDoc.GetSheets()
	    Dim modelSpace As McDocument = Nothing
	    For Each idSheet As Multicad.McObjectId In sheetsId
		    Dim sheet As McDocument = idSheet.GetObject()
		    If sheet.IsModel Then
			    MessageBox.Show(sheet.ToString())
			    modelSpace = sheet
			    Exit For
		    End If
	    Next
	    modelSpace.CopyObjects(doc, blName)
	    Dim refBlk As McBlockRef = New McBlockRef()
	    refBlk.BlockName = blName
	    'MessageBox.Show(refBlk.BlockName)
	    refBlk.DbEntity.AddToCurrentDocument()
    End Sub
   End Class
End Namespace

Link to comment
Share on other sites

Господа, подскажите, почему в нанокаде не появляется команда на открытие формы "cus_selBlock".

Вызов делаю таким же образом, как и для других команд.

 

Imports Multicad.Runtime
Imports Multicad.DatabaseServices
Public Class FrmBlockSelect
   <CommandMethod("cus_selBlock", CommandFlags.NoCheck Or CommandFlags.Redraw)>
   Public Sub FrmBlockSelect_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

и т.д.

Link to comment
Share on other sites

Господа, подскажите, почему в нанокаде не появляется команда на открытие формы "cus_selBlock".

Вызов делаю таким же образом, как и для других команд.

 

Imports Multicad.Runtime
Imports Multicad.DatabaseServices
Public Class FrmBlockSelect
<CommandMethod("cus_selBlock", CommandFlags.NoCheck Or CommandFlags.Redraw)>
Public Sub FrmBlockSelect_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

и т.д.

слепил костыль

Imports Multicad.Runtime
Public Class SelBlock
   <CommandMethod("cus_SelBlock", CommandFlags.NoCheck Or CommandFlags.NoPrefix)>
   Public Sub selblock()
    Dim frmSel As New frmSelBlock()
    frmSel.Show()
   End Sub
End Class

Link to comment
Share on other sites

Всем добрых суток!

 

Первая версия модуля готова, так сказать preAlfa.

 

Умеет строить дерево для списка блоков и вставлять выбранный блок в текущий чертеж. Инфу берет из БД

 

Сырцы прилагаю.

klen.zip

  • Like 1
Link to comment
Share on other sites

Подскажите, как на ваш взгляд оптимальнее поступить со "спецификацией", т.е. со списком оборудования, передаваемым в excel?

 

1. Пытаться запихнуть всю инфу по блоку в его свойства, а потом считывать оттуда

2. Писать в свойства только UID объекта, а потом выдергивать всю инфу из БД

 

Пока склоняюсь ко второму варианту он мне видится проще и быстрее реализуемым.

 

И второе - как нумеровать блоки? Чего-то тут у меня вообще ступор - где взять счетчик.

Link to comment
Share on other sites

Смотря какая система нумерации и в какой момент присваивается номер.

1. У каждого блока уникальное обозначение или же группа блоков с одинаковым наименованием имеет одинаковое обозначение?

2. Зависит ли обозначение от положения блока?

А так все собирать в коллекцию, а дальше сортировать, считать и т д

Link to comment
Share on other sites

Смотря какая система нумерации и в какой момент присваивается номер.

1. У каждого блока уникальное обозначение или же группа блоков с одинаковым наименованием имеет одинаковое обозначение?

2. Зависит ли обозначение от положения блока?

А так все собирать в коллекцию, а дальше сортировать, считать и т д

 

У группы одинаковых блоков один номер. В старом модуле он присваивается в момент вставки блока.

 

Насколько я понял, в чертеже есть база со всеми блоками. Планирую нумеровать блоки не при вставке, а по отдельной команде.

Вопрос решился сам собой )

Link to comment
Share on other sites

На самом деле все сложнее.

1. Для обновления Вашего приложения нужно иметь загрузчик его с сервера.

2. Установщик загрузчика.

3. В блоке надо хранить его обозначение, а в выносной идентификатор (handle) блока, для проверки пары блок-обозначение.

4. В спецификации хранить идентификаторы (handle) блоков, для проверки пары чертеж-спецификация.

Link to comment
Share on other sites

На самом деле все сложнее.

1. Для обновления Вашего приложения нужно иметь загрузчик его с сервера.

2. Установщик загрузчика.

3. В блоке надо хранить его обозначение, а в выносной идентификатор (handle) блока, для проверки пары блок-обозначение.

4. В спецификации хранить идентификаторы (handle) блоков, для проверки пары чертеж-спецификация.

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

 

Я планировал формировать спецификацию по команде, непосредственно в excel и не хранить ее нигде в чертеже. Именно так сейчас у нас дело и обстоит.

Вообще, проектировщиками наших проектировщиков тяжело назвать - они скорее дизайнеры - накидывают оборудование в помещение. А инженерку и архитектуру куда-то на аутсорс сплавляют.

Link to comment
Share on other sites

nanoCAD.Application

Лучше получить через Teigha .NET, не будет проблем с регистрацией COM интерфейса. _https://github.com/RobinKzn/CustomAutosaveNanoCad/blob/master/autosave81x64/GetAcadApplication.cs

Не мешайте COM с Multicad .NET, выберите одно из двух

Link to comment
Share on other sites

nanoCAD.Application

Лучше получить через Teigha .NET, не будет проблем с регистрацией COM интерфейса. _https://github.com/RobinKzn/CustomAutosaveNanoCad/blob/master/autosave81x64/GetAcadApplication.cs

Не мешайте COM с Multicad .NET, выберите одно из двух

Спасибо за советы и подсказки!

Link to comment
Share on other sites

  • 3 weeks later...

Выкладываю очередную версию, видимо, последнюю, т.к. собираюсь менять место работы. Кто-то другой пусть допиливает/переписывает.

Сырцы в свободном доступе.

 

Написано, конечно, ужасно, но работает, зараза.

 

Может вставить блок в чертеж из готового dwg файла, вытянуть описание блока, пронумеровать все добавленные блоки и построить по ним спецификацию.

 

klen.zip

  • Like 5
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...