Тема: При выборе рамкой включать в набор только текстовые объекты

Здравствуйте!
В коде моего макроса производится обработка текстовых строк чертежа. Я считаю, что макрос работал бы быстрее, если бы удалось сделать так, чтобы при выборе элементов чертежа в НАБОРе оставались бы только необходимые мне объекты [FONT=Verdana]AcDbText[/FONT] и [FONT=Verdana]AcDbMText[/FONT]. Надеюсь, что вы сможете мне чем-нибудь помочь.

 Set НАБОР = ThisDrawing.PickfirstSelectionSet
 НАБОР.SelectOnScreen

 For Each object In НАБОР                   
   If object.ObjectName = "AcDbText" Or object.ObjectName = "AcDbMText" Then [обработка]
 Next object

Re: При выборе рамкой включать в набор только текстовые объекты

Ну пока получается так:

               

                Dim gpCode(0) As Integer
                Dim dataValue(0) As Variant
                gpCode(0) = 0
                dataValue(0) = "Text"
                Dim groupCode As Variant, dataCode As Variant
                groupCode = gpCode
                dataCode = dataValue
                 
                    Set НАБОР = ThisDrawing.PickfirstSelectionSet
                    НАБОР.SelectOnScreen groupCode, dataCode  

Ищу как подобрать общее определение для MTEXT и TEXT ...

Re: При выборе рамкой включать в набор только текстовые объекты

вот пример на условие ИЛИ
<code>
intData(0) = -4: varData(0) = "<OR"
intData(1) = 0: varData(1) = "LWPolyline"
intData(2) = 0: varData(2) = "Circle"
intData(3) = -4: varData(3) = "OR>"
</code>

Re: При выборе рамкой включать в набор только текстовые объекты

Спасибо за совет!
Час мытарств и все заработало

в моем случае
               

                Dim gpCode(0 To 3) As Integer
                Dim dataValue(0 To 3) As Variant
                
                gpCode(0) = -4: dataValue(0) = "<OR"
                gpCode(1) = 0: dataValue(1) = "Text"
                gpCode(2) = 0: dataValue(2) = "MText"
                gpCode(3) = -4: dataValue(3) = "OR>"
                
                Dim groupCode As Variant, dataCode As Variant
                
                groupCode = gpCode
                dataCode = dataValue
                 
                Set SSS = ThisDrawing.PickfirstSelectionSet
                SSS.SelectOnScreen groupCode, dataCode

Re: При выборе рамкой включать в набор только текстовые объекты

KyCOK пишет:

                Dim gpCode(0 To 3) As Integer
                Dim dataValue(0 To 3) As Variant
                 
                gpCode(0) = -4: dataValue(0) = "<OR"
                gpCode(1) = 0: dataValue(1) = "Text"
                gpCode(2) = 0: dataValue(2) = "MText"
                gpCode(3) = -4: dataValue(3) = "OR>"

Следующие два блока кода будут делать то же самое:
1 .

                Dim gpCode(0 To 0) As Integer 
                Dim dataValue(0 To 0) As Variant
                gpCode(0) = 0: dataValue(0) = "*TEXT"


2 .

                Dim gpCode(0 To 0) As Integer 
                Dim dataValue(0 To 0) As Variant
                gpCode(0) = 0: dataValue(0) = "TEXT,MTEXT"


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

                Dim gpCode(0 To 1) As Integer 
                Dim dataValue(0 To 1) As Variant
                gpCode(0) = 0: dataValue(0) = "TEXT,MTEXT,DIMENSION"
                gpCode(1) = 8: dataValue(1) = "Layer1,Layer2,Layer3"

[FONT=Arial]~'J'~[/FONT]

Re: При выборе рамкой включать в набор только текстовые объекты

Спасибо!
интересно бы узнать по подробнее за кодовые обозначения цифр, присваеваемых в  gpCode(0) = 8. Я где-то встречал, что для слоев используется цифра 5.
У меня код программы для построения спецификации, в нем я задавал gpCode(от 1 до ПРЕДЕЛ-1) = 1 на весь массив искомых текстовых строк и использовал фильтр gpCode(0)=-4, gpCode(ПРЕДЕЛ)=-4 , - и при выделении рамкой, в набор попадали только строки с искомым содержимым.

                gpCode(0) = -4: dataValue(0) = "<OR"               
                For i = 1 To ПРЕДЕЛ-1
                gpCode(i) = 1: dataValue(i) = u(i)
                Next i
                gpCode(ПРЕДЕЛ) = -4: dataValue(ПРЕДЕЛ) = "OR>" 

Re: При выборе рамкой включать в набор только текстовые объекты

Не пойму какое значение присвоить для dataValue чтобы в набор попадали только блоки. Значения "Block" и "BlockReference" не работают.

Тут обнаружил описание некоторых DXF codes

DXF Codes for common filters:
Code Filter Type
0 Object type (string) - such as “Point”, “Line”, “Circle” and so on.
2 Object name (string) - the table given name such as “MyBlock”.
6 Line type (string) – such as “ByLayer”, “Center”, “Continuous” and so on.
8 Layer name (string) - such as “ABC”, or “XYZ”.
60 Object visibility (integer) - 0=visible, 1=invisible.
62 Color number (integer) - numeric index values from 0 to 256.
0 = ByBlock, 256 = ByLayer

Прошу помочь составить код фильтра для блоков.

Re: При выборе рамкой включать в набор только текстовые объекты

KyCOK пишет:

Не пойму какое значение присвоить для dataValue чтобы в набор попадали только блоки.

"INSERT"
P.S.: В справке AutoCAD есть раздел посвященный DXF-кодам.

Re: При выборе рамкой включать в набор только текстовые объекты

спасибо!