Тема: Работа с командами VBScript при создании наборов характеристик

Доброго времни суток. Задался целью создать автоматическую спецификацию заполнения дверных проемов. Создал Набор характеристик, формирующий запись двери по ГОСТ. запись помещается в таблицу.
Все хорошо, однако столкнулся с такой проблемой - в базовых функциях свойств дверей есть распознавание правого и левого открывания. Однако получаемый результат "Слева" и "Справа" не является гостовским обозначением. Мне необходимо получить в итоге значение П или просто пустое место.
После недолгих раздумий пришел к выводу, что можно попытаться сделать это с помощью ВБскрипт команд, вроде вот этой:  If  <>условие>  Then  <>утверждения<>  Else  <>Выражения<>
Однако, как ни бился, не мог заставить заработать даже простейший скрипт с этой командой. Возможно,использую неправильный синтаксис.. (логика оператора достаточно проста и понятна)
Если кто-нибудь сталкивался с использованием команд VBScript, подскажите, пожалуйста, где можно посмотреть примерчик использования именно в Наборах характеристик АДТ.

Re: Работа с командами VBScript при создании наборов характеристик

1. В PropertySet'e добавить автоматическое поле SwingDirection (направление открывания)
2. ДОбавить формульное поле и там в качестве кода нечто типа:

  If InStr(Replace(UCase("[Door_SwingDirection]"),"LEFT","ЛЕВ"),"ЛЕВ")<>0 Then
    Swing="Л"
  Else
    Swing=""
  End If

А потом в RESULT уже использовать вычисленное значение Swing.
У меня такое работает.

Re: Работа с командами VBScript при создании наборов характеристик

Большое спасибо, все получилось.

Re: Работа с командами VBScript при создании наборов характеристик

Тема старая, но для меня актуальная)
Может кто подскажет.. Хочу добраться до свойств динамического блока, причем через VBA код работает, а в VBS - тишина. Возможно, это вообще импосибл..

Set acadApp = GetObject(, "AutoCAD.Application")
Set ActiveDoc = acadApp.ActiveDocument
Set BlockObj = ActiveDoc.ObjectIdToObject([ObjectID])

If BlockObj.IsDynamicBlock = True Then
    DynProps = BlockObj.GetDynamicBlockProperties
End If

For Each prp in DynProps 
           If prp.PropertyName = "MeshLength" Then
               prp_Val = prp.Value
               Exit For
           End If
Next
RESULT = prp_Val

Re: Работа с командами VBScript при создании наборов характеристик

Здесь на форуме попробуйте поискать в моих сообщениях

Re: Работа с командами VBScript при создании наборов характеристик

Vitaly,

Поискал. Нашел много интересного, но не по теме. Может, более конкретно напарвление укажете?

Re: Работа с командами VBScript при создании наборов характеристик

То, что вы написали для VBA, в VBScript будет несколько иначе выглядеть.
Начиная с указания Application, остальное тоже отличается.
Заострите на этом внимание!
Возможно чуть позже смогу помочь конкретнее...

Re: Работа с командами VBScript при создании наборов характеристик

Да уж, перерыл весь хелп и форумы...
хоть шаром покати. Самое интересное, что DynProps = BlockObj.GetDynamicBlockProperties получает значение -> TypeName(DynProps) = Object(), но For Each и Set pp=DynProps(i) не работают. Но данные то в нем есть!!! они там!!!

Указал уже в Application номер версии.. 0 (у меня АА2008)

Re: Работа с командами VBScript при создании наборов характеристик

В понедельник постараюсь помочь...

Re: Работа с командами VBScript при создании наборов характеристик

Попробовал через ExtendedDictionary

Set acadApp = GetObject(,"AutoCAD.Application")
'ACADVER values:
'ACD-A2008 = "17.1s (LMS Tech)"
'ACD-A2009 = "17.2s (LMS Tech)"
acadVerString = acadApp.ActiveDocument.GetVariable("ACADVER")
'Set ADT application string, based on version running:
Select Case acadVerString
 Case "17.1s (LMS Tech)"
  aecBaseVer = "AecX.AecArchBaseApplication.5.5"
 Case "17.2s (LMS Tech)"
  aecBaseVer = "AecX.AecArchBaseApplication.5.7"
 Case Else
  aecBaseVer = "Unknown"
End Select
If aecBaseVer = "Unknown" Then
 RESULT = "Unknown Version"
Else
Set aecBase = acadApp.GetInterfaceObject(aecBaseVer)
End If
aecBase.Init acadApp
Set utilObj = aecBase.ActiveDocument.Utility
objID = [ObjectID]
Set BlockObj = acadApp.ActiveDocument.ObjectIdToObject(objID)
Set BlockObjDict = BlockObj.GetExtensionDictionary
Set BlockObjDict = BlockObjDict.Item("AcDbBlockRepresentation")
Set BlockObjDict = BlockObjDict.Item("AppDataCache")
Set BlockObjDict = BlockObjDict.Item("ACAD_ENHANCEDBLOCKDATA")
Set BlockObjDict = BlockObjDict.GetObject("42")
    BlockObjDict.GetXRecordData XRecordDataType, XRecordDataValue
    XR = XRecordDataValue(5)
    XR1 = utilObj.ConvertToVariantArray(XR)
RESULT = XR1(0)

та же беда((. без Utils тоже не фурычит.

Re: Работа с командами VBScript при создании наборов характеристик

acadApp.ActiveDocument.ObjectIdToObject(objID)

...что вы смотрели, где искали? Разве так пишется в  VBScript эта команда?
Сходите тогда на Autodesk на форум, там поищите...
Даже googl сразу найдёт "Autocad MEP formula" !!!

Re: Работа с командами VBScript при создании наборов характеристик

Vitaly,
Если бы я был знатоком СОМ и пр. меня бы тут не было.
К сожалению, времени уже нет на сидение на форумах и гуглоскопию..

И у меня перед этим

acadApp.ActiveDocument.ObjectIdToObject(objID)

ещё

objID = [ObjectID]

Re: Работа с командами VBScript при создании наборов характеристик

objID = [ObjectID]

такие веши не прохрдят

(изменено: Михаил Мирохин, 14 февраля 2012г. 08:59:08)

Re: Работа с командами VBScript при создании наборов характеристик

Да? Но работает же, до определенного момента.

И вообще, дело скорее в том, что Акад и VBS по разному хранят данные и как их к общему знаменателю привести я не знаю.