Тема: Динамические блоки

Я так понимаю, что динамические блоки нельзя сделать программно!
Может кто-нибудь опровергнет это????
Чертеж со всеми моими дин.блоками весит очень-очень много.
Он буквально неповоротливый (10 мб). Как выйти из этого положения???

Re: Динамические блоки

Может быть можно запихнуть в отдельный файл их как-нибудь???

Re: Динамические блоки

Как же мне быть???

Re: Динамические блоки

Вопросов многовато на один пост. Вы не находите?

Re: Динамические блоки

> LeonidSN
:)
Да многовато, я согласна. Что же все-таки можно сделать???

Re: Динамические блоки

Подниму тему. Мне тоже интересен этот вопрос. А в частности как получить доступ к некоторым свойствам дин. блоков(уже присутствующих в чертеже), к примеру - свойство Distanse.

Re: Динамические блоки

> Skydog
Отвечал на другом форуме, поэтому измени
все данные по своей ситуации:

Option Explicit
Sub SelectDynBlocksInModel()
' tested on A2008 only
     Dim ss As AcadSelectionSet
     Dim ent As AcadEntity
     Dim bname As String
     bname = "2__DR__1__ DF_ SINK_ FRONT" '<--change block name here
     Dim pvalue As Variant
     Dim blkRef As AcadBlockReference
     With ThisDrawing.SelectionSets
          While .Count > 0
               .Item(0).Delete
          Wend
          Set ss = .Add("$DynBlocks$")
     End With
     Dim ftype(2) As Integer
     Dim fdata(2) As Variant
     pvalue = 25.4 ''<--change distance value here
     ftype(0) = 0: ftype(1) = 2: ftype(2) = 67
     fdata(0) = "INSERT": fdata(1) = "`*U#*" & "," & bname: fdata(2) = 0 '<--"2__DR__1__ DF_ SINK_ FRONT" <--change block name
     ss.Select acSelectionSetAll, , , ftype, fdata
  If ss.Count > 0 Then
  MsgBox ss.Count
  For Each ent In ss
  Set blkRef = ent
  If blkRef.IsDynamicBlock Then
  If blkRef.EffectiveName = bname Then
  Dim props() As AcadDynamicBlockReferenceProperty
  Dim i As Integer
  props = blkRef.GetDynamicBlockProperties
  Dim prop As AcadDynamicBlockReferenceProperty
For i = LBound(props) To UBound(props)
Set prop = props(i)
If prop.PropertyName = "Distance" Or prop.PropertyName = "Distance1" Then
prop.Value = pvalue
End If
Next i
End If
End If
Next ent
End If
ss.Delete
End Sub

~'J'~

Re: Динамические блоки

Ну,возможно что-то типа:

Dim attr, AttrDin
AttrDin = objBlref.GetDynamicBlockProperties
For Each attr In AttrDin
   If attr.PropertyName = "Distanse" Then
      x = attr.Value
   End If
Next

Здесь objBlref- объект типа AcadBlockReference (к примеру, полученный с помощью:

Dim varPoint As Variant
Dim objBlref As Object
ThisDrawing.Utility.GetEntity objBlref, varPoint, "Укажите блок"
If TypeOf objBlref Is AcadBlockReference Then
...
'вышеприведенный код
...
end if

), x- переменная, в которую считывается значение свойства "Distanse"

Re: Динамические блоки

> Fatty
Долго писал, не заметил, что уже ответ дан.

Re: Динамические блоки

> Fatty
А насчет того, что "динамические блоки нельзя сделать программно" - верно? Средствами VBA? Я информации о том, как добавить в описание блока самый простейший динамический параметр (базовой точки, например),- не нашел.

Re: Динамические блоки

> AlexV
Я честно говоря не знаю, но думаю
что это близко к истине
(В смысле практической релизации)
~'J'~