2015-01-26 2 views
0

Здравствуйте, я генерирую кинетический код JavaScript из инструмента Sparx «enterprise architect» из VB Script. Проблема, с которой я столкнулся, - 1) Я могу сгенерировать код из модели здесь. У меня нет проблем. Но я хотел бы сгенерировать вывод в последовательности слева от модели до нижнего правого. Теперь, как генерируется мой вывод, я добавляю новый компонент, который генерирует первый компонент, а затем другой. enter image description hereгенерация кода из архитектуры

Вот моя модель здесь я генерируя вывод, как: 1) Birt 2) ИГПК ..... Но я хочу в последовательности, как 1) GS-IS 2) Promics 3) FMEA 4) ИГПК ... enter image description here

option explicit 

!INC Local Scripts.EAConstants-VBScript 


' 
sub main 
    if (Repository.GetTreeSelectedItemType() = otDiagram) then 

     ' Show the script output window 
     Repository.EnsureOutputVisible "Script" 

     dim theDiagram as EA.Diagram 
     set theDiagram = Repository.GetTreeSelectedObject() 

     dim doOffsetLeft, doOffsetRight, doOffsetTop, doOffsetBottom 'As Integer 
     dim scaleX, scaleY 'As Integer 

     dim inputpicSizeX, inputpicSizeY, newpicSizeX1, newpicSizeY2 'As Integer 

     dim decreasex, newdecreasex, decreasey, newdecreasey ' as Integer 
     dim connectLink 'As String 

     scalex = theDiagram.cx 
     scaley = theDiagram.cy 
     connectLink="" 
     'doOffsetLeft = 35 
     'doOffsetTop = 9 





     Session.Output("scaleX: " + CStr(scaleX) + "scaleY: " + CStr(scaleY)) 'this have the whole pick size' 

     connectLink=InputBox("Connect URL for tool list?", "Input required", connectLink) 

     ' next have to take input box and have to calculate % ' 


     newpicSizeX1 = CInt(InputBox("Exported image width (in pixels)?", "Input required", inputpicSizeX)) 
     newpicSizeY2 = CInt(InputBox("Exported image height (in pixels)?", "Input required", inputpicSizeY)) 

     Session.Output("NewscaleX: " + CStr(newpicSizeX1) + "NewscaleY: " + CStr(newpicSizeY2)) 'new scale stored here given by user' 

     'calculation of % x' 

     decreasex = scalex - newpicSizex1 
     newdecreasex = (decreasex/scalex) * 100 


     'calculation of % y' 

     decreasey = scaley - newpicSizeY2 
     newdecreasey = (decreasey/ scaley) * 100 


     Session.Output("%decreasex: " + CStr(newdecreasex) + " %decreasey: " + CStr(newdecreasey))'new % output' 





     dim diagramObjects as EA.Collection  
     Set diagramObjects = theDiagram.DiagramObjects 

     dim diagramObject As EA.DiagramObject 

     dim x1 
    dim y1 
    dim x2 
    dim y2 

    dim width 
     dim height 

     dim seqCnt 
     dim found 
     dim findIdx 


     seqCnt = 0 

     found = true 
     while (found) 
      seqCnt = seqCnt + 1 

      findIdx = 0 
      found = false   
      while ((Not found) and (findIdx < diagramObjects.Count))     

       Set diagramObject = diagramObjects.GetAt(findIdx) 


       if (diagramObject.Sequence = seqCnt) Then     

        dim doLeft, doRight, doTop, doBottom 'As Integer 
        dim element AS EA.Element 



        set element = Repository.GetElementByID(diagramObject.ElementID) 




           x1 = CInt(diagramObject.left * ((100 - newdecreasex)/100)) - 28 


           y1 = CInt(-1 * diagramObject.top * ((100 - newdecreasey)/100)) - 42 



           x2 = 1 * CInt(diagramObject.right * ((100 - newdecreasex)/100)) - 28 


           y2 = CInt(-1 * diagramObject.bottom * ((100 - newdecreasey)/100)) -45 

           width = x2 - x1 
           height = -1 * (y1 - y2) 

        if (element.Type = "ActivityPartition") Then 

          dim ElementName 
          ElementName = Replace(element.Name, " ", "") 

         'for drawing rectangle outer boundry 

          Session.Output("var " & ElementName & " = new Kinetic.Rect({") 
         'Session.Output("X:" & X1 & "," "Y:" & y1 & "," "Width:" & width & "," "Height:" & height & "," "Stroke Width:2})") 
          Session.Output("x : " & X1 & ",") 
          Session.Output("y : " & y1 & ",") 
          Session.Output("width : " & width & ",") 
          Session.Output("height : " & height & ",") 

          Session.Output("strokeWidth : 2 " & ",") 
          Session.Output("stroke : 'Black'" & "," & "});") 
         'layer.add(EngineeringData); 
          Session.Output("layer.add(" & ElementName & ");") 


         'for drawing outer boundry line 


          dim ElementLine 
          dim linewidth 
          dim ywidth 
          'ElementLine = join(ElementName,"line") 
          ElementLine = (Elementname & "line") 
          'Session.Output (ElementLine) 
          ywidth = (y1+20) 'line should come down so adding 20 
          linewidth= (width+X1) ' till where the line has to end so width + x1 value 

         'for drawing line 
          Session.Output("var " & ElementLine & " = new Kinetic.Line({") 
         'Session.Output("X:" & X1 & "," "Y:" & y1 & "," "Width:" & width & "," "Height:" & height & "," "Stroke Width:2})") 
          Session.Output("points : " & "[" & X1 & "," & ywidth & "," & linewidth & "," & ywidth & "],") 
          Session.Output("stroke : 'black' " & ",") 
          Session.Output("strokeWidth : 2 " & ",") 
          Session.Output("tension : 0 " & ",") 
          Session.Output("linecap : 'round'" & "," & "});") 
          Session.Output("layer.add(" & ElementLine & ");") 

         'for drawing message text 

          dim Elementtext 
          Elementtext = (Elementname & "text") 
          dim ActivityName 
          ActivityName = element.Name 

          'Session.Output(Elementtext) 
          Session.Output("var " & Elementtext & " = new Kinetic.Text({") 
         'Session.Output("X:" & X1 & "," "Y:" & y1 & "," "Width:" & width & "," "Height:" & height & "," "Stroke Width:2})") 
          Session.Output("x : " & X1 & ",") 
          Session.Output("y : " & y1 & ",") 
          Session.Output("width : " & width & ",") 
          Session.Output("height : " & height & ",") 

          Session.Output("text : " & "'" & ActivityName & "'" & ",") 
          Session.Output("fontSize : 17 " & ",") 
          Session.Output("fontFamily : 'Calibri' " & ",") 
          Session.Output("fill : 'black' " & ",") 
          Session.Output("align : 'center'" & "," & "});") 
         'layer.add(EngineeringData); 
          Session.Output("layer.add(" & Elementtext & ");") 



        end if     

'     diagramObjects.DeleteAt findIdx,true      
        found = true 
       end if 

       findIdx = findIdx + 1 
      wend    
     wend 



    else 
     ' Error message 
     Session.Prompt "This script does not support items of this type.", promptOK  
    end if 

end sub 

function TVGetElementTaggedValue(theElement, taggedValueName, defaultValueMissing, defaultValueEmpty) 

    if not theElement is nothing and Len(taggedValueName) > 0 then  
     dim taggedValue as EA.TaggedValue 
     set taggedValue = theElement.TaggedValues.GetByName(taggedValueName) 

     if taggedValue is nothing then 
      TVGetElementTaggedValue = defaultValueMissing 
' Dump warning   
'Session.Output(theElement.Name & " " & taggedValueName & " TAG Missing")   
     else 
      if taggedValue.Value = "" then 
       TVGetElementTaggedValue = defaultValueEmpty  
' Dump warning   
'Session.Output(theElement.Name & " " & taggedValueName & " Value Missing")   
      else 
       TVGetElementTaggedValue = taggedValue.Value 
      end if 
     end if 
    end if 

end function 


main 
+0

Я не могу понять, почему заказ важен. Я генерирую код, тогда это пакет, и в итоге у вас есть код - или нет. –

+0

Порядок очень важен для меня, потому что я генерирую код Kinetic Javascript из сценария VB. Прямо сейчас я получаю вывод, что нет никаких проблем, но я хочу, чтобы слева направо от диаграммы. – Rickey

+0

Если вы создаете код из VB (и не используете этот неудобный язык сценариев из Sparx), вы можете использовать порядок элементов в дереве проектов. IIRC это свойство Pos. Обратите внимание, что порядок лежит в основе очень грубых заказов. Я объяснил это на форуме Sparx один раз. Лучше всего заставить команду вручную перемещать один элемент вверх/вниз. –

ответ

0

EA игнорирует диаграммы при генерации кода. (В противном случае, что произойдет, если вы разместите одни и те же элементы в другом порядке на другой диаграмме?)

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

Если вы хотите обеспечить соблюдение определенного порядка поколений, я думаю, вам придется писать собственные сценарии генерации кода.

+0

На самом деле я пишу код VB Script для генерации кода Kinetic Javascript, и мой окончательный вывод будет такой же моделью на самом деле. Но знаете ли вы, как получить данные модели в серии? – Rickey

0

В своем vbscript вы можете запросить объекты диаграммы на этой конкретной диаграмме для своей позиции.

Затем вы можете использовать свою позицию, чтобы определить порядок, в котором вы создаете код.

+0

см Я использую так: \t \t тусклого diagramObjects в EA.Collection \t \t Set diagramObjects = theDiagram.DiagramObjects тусклого diagramObject As EA.DiagramObject (Здесь его использование в качестве нового элемента, который создается сегодня предположить, что придет на первом) – Rickey

+1

Никогда не предполагайте ничего. Особенно не при работе с EA.Используйте цикл для перечисления диаграммных объектов и сортировки их на основе их положения на диаграмме (или других критериев, которые вы хотите использовать) –

+0

ya Я использую цикл на самом деле. не могли бы вы дать мне пример, как отсортировать их на основе их положения. – Rickey

1

Ваш код показывает, что вы перебираете элементы на диаграмме. Они не упорядочены географически, а в порядке добавления. Вы можете проверить координату в DiagramObject, чтобы найти позиционный порядок. Если у вас есть порядок слева направо, просто проверьте DiagramObject.Left (левая y-координата) и отсортируйте объекты по возрастанию.

+0

Я думаю, что это даст мне результат как GS-IS, Igpk, Request one .... then promics? но не GS-IS, Promics, FMEA, Igpk ... – Rickey

+0

Зависит от того, как вы оцениваете координаты. Во всяком случае, я предпочел бы придерживаться порядка в браузере проекта. Это легче оценить. Если вы создаете вложенные элементы, вы можете упорядочить их, как на картинке, и сохранить, что порядок в порядке. –

0

Возможно, вы можете добавить в модель отметку «SORT_CODE», а затем использовать ее в своем скрипте для сортировки ваших объектов.

Смежные вопросы