Тема: Вставка атрибута в нужную координату

Подскажите пожайлуста, как вставить атрибут в нужную координату.
Это вставка полочки-выноски.

Set lineObj = ThisDrawing.ModelSpace.AddLine(insertionPnt, B)

В точку "В" надо чтобы вставлялся атрибут.
Это вставка атрибута:

Dim origPt As Variant
    Dim insPt(2) As Double
    Dim attName As String
    Dim pmtStr As String
    Dim valStr As String
        Dim txtHeight As Double
    txtHeight = 2.5     '<--change to your suit
    origPt = blkDef.Origin
    'Attribute insertion point relatively to block origin
    insPt(0) = origPt(0) + 2.5      '<--change to your suit
    insPt(1) = origPt(2) + 0#     '<--change to your suit
    insPt(2) = origPt(2)
    attName = "НОМЕР"
    pmtStr = "НОМЕР"
    valStr = "1"
    ' set attribute verified
    Set attObjDef = blkDef.AddAttribute(txtHeight, acAttributeModeVerify, pmtStr, insPt, attName, valStr)

Re: Вставка атрибута в нужную координату

Можно ли чтобы атрибут вставлялся в точку "В", а не в insPt???

Re: Вставка атрибута в нужную координату

дак вот же определение этой точки...
'Attribute insertion point relatively to block origin
insPt(0) = origPt(0) + 2.5 '<--change to your suit
insPt(1) = origPt(2) + 0# '<--change to your suit
insPt(2) = origPt(2)
или я что то не понимаю....

Re: Вставка атрибута в нужную координату

> ssn
Ну да, точно. Это и есть определение этой точки.
Только как приравнять точку "В" и insPt???
Точку "В" я указываю, а атрибут вставляется рядом с блоком.
Я так понимаю что insPt должна равняться "В".
Дело в том что атрибут - это номер блока, а точка "В" - это одна из точек полочки-выноски. И номер блока должен быть на этой полочке.

Re: Вставка атрибута в нужную координату

> Дашуля

blkDef

- это что, описание блока? lineObj у вас добавляется в пространство модели:

hisDrawing.ModelSpace.AddLine

, а атрибут- в blkDef:

blkDef.AddAttribute

Re: Вставка атрибута в нужную координату

> AlexV
Я в этом плохо разбираюсь. Подскажите пожайлуста как сделать, чтобы номер блока (атрибут) появлялся на полочке. Может быть через "лидер???"

Re: Вставка атрибута в нужную координату

Только как приравнять точку "В" и insPt???
insPt(0) = В(0)
insPt(1) = В(2)
insPt(2) = В(2)
вроде так...

Re: Вставка атрибута в нужную координату

или в этой строке
Set attObjDef = blkDef.AddAttribute(txtHeight, acAttributeModeVerify, pmtStr, insPt, attName, valStr)
поставить вместо insPt точку В
Set attObjDef = blkDef.AddAttribute(txtHeight, acAttributeModeVerify, pmtStr, В, attName, valStr)

Re: Вставка атрибута в нужную координату

> ssn
Пыталась и тем и другим способом. Вылазит ошибка:
Variable not defined (Не объявлена переменная)
Пыталась объявить ее:
Dim B As Variant
Вылазит ошибка:
Invalid procedure call or argument
Почему вылазит ошибка что переменная не объявлена??? Как передать эту координату "В"???
Вообще "В" получена через GetPoint:
B = .GetPoint(insertionPnt, vbCrLf & "Укажите точку")
ang = .AngleFromXAxis(insertionPnt, B)
Set lineObj = ThisDrawing.ModelSpace.AddLine(insertionPnt, B)
Куда можно сохранить эту переменную, чтобы тут же передать ее в следующий код???

Re: Вставка атрибута в нужную координату

А что вы, собственно, пытаетесь добиться? Если создать описание блока, состоящего из линии-"полочки" и атрибута над ней, то надо:

Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
...
Set lineObj = ThisDrawing.Blocks.Item(Blcname).AddLine(startPoint, endPoint)
...
Set attributeObj = ThisDrawing.Blocks.Item(Blcname).AddAttribute(height, mode, prompt, endPoint, tag, value)

, где Blcname -переменная с именем блока.

Re: Вставка атрибута в нужную координату

Естественно, блок с именем Blcname должен быть в коллекции блоков чертежа. Если он еще не создан, то:

Dim blockObj As AcadBlock
Dim insertionPnt(0 To 2) As Double
Dim Blcname as string
insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0#
Blcname="Newblck"
Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, Blcname)

Re: Вставка атрибута в нужную координату

а это потому, что
Dim insPt(2) As Double
а у вас
Dim B As Variant
по этому и получается
Invalid procedure call or argument
наверно проще вырезать весь код (от начала до конца) и выставить его сюда. тут быстренько скажут, что и куда.