Перейти к содержанию
gizmo_zx

Установка параметров динамического блока VB.net (Nanocad)

Рекомендуемые сообщения

Бодрого дня.

 

Есть задача добраться до параметров динамического блока в Nanocad :(.

:facepalm:

Есть пример в Autocad.

 

<CommandMethod("bx_HelloWorld8", CommandFlags.UsePickSet)> _
Public Sub bx_HelloWorld8()


'' Получение текущего документа и базы данных
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acCurDb As Database = acDoc.Database
'' Старт транзакции
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

'' Запрос выбора объектов в области чертежа
Dim acSSPrompt As PromptSelectionResult = acDoc.Editor.GetSelection()
'' Если статус запроса равен OK, объекты выбраны
If acSSPrompt.Status = PromptStatus.OK Then
Dim acSSet As SelectionSet = acSSPrompt.Value

'' Перебор объектов в наборе
For Each acSSObj As SelectedObject In acSSet
'' Проверка, нужно убедится в правильности полученного объекта
If Not IsDBNull(acSSObj) Then
'' Открытие объекта для записи
Dim acEnt As Entity = acTrans.GetObject(acSSObj.ObjectId, _
OpenMode.ForWrite)
If acEnt <> Nothing Then
Dim col As DynamicBlockReferencePropertyCollection = acEnt.DynamicBlockReferencePropertyCollection
'Dim col As DynamicBlockReferencePropertyCollection = acEnt.
For Each dp As DynamicBlockReferenceProperty In col
'acEnt.WriteMessage(vbLf & "Name= {0} Value = {1}", dp.PropertyName, dp.Value)
Application.ShowAlertDialog("Name= {0} Value = {1}", dp.PropertyName, dp.Valu)
Next
End If
End If
Next
'' Сохранение нового объекта в базе данных
acTrans.Commit()
End If

'' Очистка транзакции
End Using

 

 

 

Проблеммы с Dim col As DynamicBlockReferencePropertyCollection = acEnt.DynamicBlockReferencePropertyCollection

 

"DynamicBlockReferencePropertyCollection" не является членом "Teigha.DatabaseServices.Entity"

 

Есть какие варианты это объехать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dim br As BlockReference = sender

Dim pc As DynamicBlockReferencePropertyCollection = br.DynamicBlockReferencePropertyCollection

For Each prop As DynamicBlockReferenceProperty In pc

 If prop.UnitsType.ToString() = "Distance" Then

		Dim vvalue As String = prop.Value.ToString

 End If
Next

 

br это BlockReference

 

чтобы узнать имя

Dim Имя_блока As String = ""
Using tr As Transaction = db.TransactionManager.StartTransaction()
     Dim block As BlockTableRecord = Nothing
     If br.IsDynamicBlock Then
            block = tr.GetObject(br.DynamicBlockTableRecord, 0)
     Else
            block = tr.GetObject(br.BlockTableRecord, 0)
     End If
    Имя_блока = block.Name
    tr.Abort()
End Using

 

Искать в селектионс можно так

 

For Each objId_1 In bt
   If objId_1.ObjectClass.DxfName = "INSERT" Then
       Dim br_1 As BlockReference = tr.GetObject(objId_1, 0)
......

Изменено пользователем Robink

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как вы это используете? Если не секрет. Вместо таблицы параметров?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Огромное спасибо.

Заработало... :)

  <CommandMethod("u_dba", CommandFlags.UsePickSet)> _
   Public Sub bx_HelloWorld8()

    '' Получение текущего документа и базы данных
    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
    Dim acCurDb As Database = acDoc.Database
    Dim acEd As Editor = acDoc.Editor
    Dim dp_str As String
    Dim dp_pres As PromptResult
    Dim dp_dbl, dp_dbl2 As Double
    '' Старт транзакции
    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
	    '' Запрос выбора объектов в области чертежа
	    Dim acSSet As PromptEntityResult = acDoc.Editor.GetEntity("Select :")
	    ' Если статус запроса равен OK, объекты выбраны
	    If acSSet.Status = PromptStatus.OK Then
		    '' Проверка, нужно убедится в правильности полученного объекта
		    If Not IsDBNull(acSSet) Then
			    '' Открытие объекта для записи
			    Dim acEnt As Entity = acTrans.GetObject(acSSet.ObjectId, _
												   OpenMode.ForWrite)
			    If acEnt <> Nothing Then
				    If TypeOf acEnt Is BlockReference Then
					    Dim acBlock As BlockReference
					    acBlock = CType(acEnt, BlockReference)
					    Dim blName As String = acBlock.Name
					    Dim col As DynamicBlockReferencePropertyCollection = acBlock.DynamicBlockReferencePropertyCollection
					    'Dim col As DynamicBlockReferencePropertyCollection = acEnt.
					    For Each dp As DynamicBlockReferenceProperty In col
						    'acEnt.WriteMessage(vbLf & "Name= {0} Value = {1}", dp.PropertyName, dp.Value)
						    'acEd.WriteMessage(vbCrLf & "Name= " & dp.PropertyName.ToString() & " Value= [" & dp.Value.ToString() & "]")
						    If Mid(dp.PropertyName, 1, 4) = "Угол" Then
							    dp_dbl2 = dp.Value * 180 / Math.PI
							    dp_pres = acEd.GetString(vbCrLf & "Name= " & dp.PropertyName.ToString() & " Value= [" & dp_dbl2.ToString() & "]")
							    dp_str = CType(dp_pres.ToString(), String)
							    If dp_str <> "(OK,)" Then
								    dp_dbl = Val(Mid(dp_str, 5))
								    acEd.WriteMessage(vbCrLf & dp_dbl.ToString)
								    dp_dbl = dp_dbl * Math.PI / 180
								    dp.Value = dp_dbl
							    End If
						    Else
							    acEd.WriteMessage(vbCrLf & "Name= " & dp.PropertyName.ToString() & " Value= [" & dp.Value.ToString() & "]")
						    End If

					    Next
				    End If
			    End If
		    End If
		    'Next
		    ' Сохранение нового объекта в базе данных
		    acTrans.Commit()
	    End If
	    '' Очистка транзакции
    End Using
   End Sub

 

Использую динамические блоки из Autocad.

Есть параметр поворота (Угол). Иногда в Nanocad не получается выставить правильный угол маркером (крутилкой).

В Acad этот парамет в панели свойств показывает.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...