При таком копировании ты копируешь описание блока, а не вставку блока. Т.е в самом чертеже ты так ничего и не увидишь.Вы имеете ввиду эти методы:
Duplicates multiple objects (deep cloning).
RetVal = object.CopyObjects(Objects [, Owner] [, IDPairs])
Во втором случае ты вставляешь Пространство Модели из внешнего чертежа в Пространство модели своего чертежа, а совсем не блок "sss"Данный способ посмотрел в примере:
По поводу копирования пространств модели спорить не буду, но во втором чертеже есть объект - сплайн. Его при копировании не наблюдаю.А ты не обратил внимание, что у тебя в коде нулевые масштабные коэффициенты по X,Y,Z??? Я так понимаю, что они должны быть единичными.
Только блок является AcadBlock, а не AcadBlockReference.AcadBlock - это описание блока, а AcadBlockReference - это вставка блока. В общем случае может быть несколько вставок блока для одного описания блока. Например, блоки-штампы на разных листах могут быть вставками одного и того-же блока. Между вставкой блока и его описанием есть взаимосвязь - имена совпадают. Если блок динамический, то все несколько сложнее.
Примитива "ГИП" не существует в принципе. Скорее всего, это атрибут (точнее, AttrbuteReference).А мне кажется, что это скорее или Text или MText - так как это постоянный текст, то его делать атрибутом нелогично.
2. Я понимаю что блок-штамп определяется один раз для всего чертежа (AcadBlock), а вставляться может несколько раз на разные листы - это AcadBlockReference.Правильно.
В моем случае, проектировщик руками вставляет блок стандартным способом Вставка/Блок на листы, которые пожелает, при этом при обращении к блоку следующим образом:
Код - Visual Basic: [Выделить]
Set objBlock = colBlocks.Item("Штамп")
у него не наблюдаю метода InsertionPoint.
Как обратиться к блоку-штампу на каждом листе? т.е. обратиться к блоку-штампу как к AcadBlockReference, к вставке блока, а не к его определению (говоря вашими словами).Ты должен:
1) пройтись по всем листам (Layout), получить блоки для этих LoyoutКак у конкретного листа Layout получить блоки? Через:
2) пройтись по этим блокам и найти все AcadBlockReference, имена которых соотвествуют имени твоего блока-штампа и получить их InsertionPoint
Как у конкретного листа Layout получить блоки? Через:
Код - Visual Basic: [Выделить]
Layout.block
? Или как то еще?
Т.е. в этом то и вопрос как найти все блоки (вставки) листа и найти их AcadBlockReferenceВнутри Layout.Block делаешь:
3) А вот тут начинается самое интересное. Тебе нужно пересчитать координаты текста "ГИП" внутри твоего AcadBlock в координаты WCS с точкой вставки InsertionPoint для AcadBlockReference. В простейшем случае ничего пересчитывать не придется, если AcadBlock.Origin = (0,0,0) и AcadBlockReference не повернут и неотмасшабирован.
I do not believe the LT version can be accessed with VB in it's present state.
That's right. You have no COM interface in LT, so you have nothing like
Set acadLTApp = CreateObject("AutoCADLT.Application")
autocad LT do not support vb in its present version..this is the response i got from the autodesk customer support...
This is correct, you cannot control Autocad LT with the createobject/getobject methods. You can however write a script that will open Autocad LT and insert the drawing(s) that you want and close it.
Все это наводит на мысль, что я никак не смогу обратиться к COM-объекту AutoCAD 2013 LT версии.Мысль абсолютно правильная. Всё что можно делать с LT я указал здесь: http://adn-cis.org/forum/index.php?topic=917.0
Может есть какие идеи на этот счет?