申し訳ありませんが、入れ子構造を直接取得するような
APIはございません。
入れ子構造を取得するには
ModelFinderで同じ図上にある複合フラグメントを取得し
プレゼンテーションの矩形から親子関係を推測する必要があります。
下記は図上で選択した複合フラグメントの親を表示する
サンプルスクリプトです。
infNamespace = 'com.change_vision.jude.api.inf'
var ModelFinder = Java.type(infNamespace + '.project.ModelFinder');
var ICombinedFragment = Java.type(infNamespace + '.model.ICombinedFragment');
var Point2D = Java.type('java.awt.geom.Point2D')
run()
function run() {
var selectedPresentations = getSelectedPresentations()
if (selectedPresentations.length == 0) {
print('Please select an element in a diagram')
return
}
var selectedPresentation = selectedPresentations[0]
var currentDiagram = selectedPresentation.getDiagram()
var selectedModel = selectedPresentation.getModel()
var combinedFragments = astah.findElements(new ModelFinder() {
isTarget : function (element) {
if (element instanceof ICombinedFragment
&& element.getPresentations()[0].getDiagram() == currentDiagram
&& element != selectedModel) {
return true;
}
}
})
var parents = new Array()
var targetRect = selectedPresentation.getRectangle()
for (var i in combinedFragments) {
var parentRect = combinedFragments[i].getPresentations()[0].getRectangle()
if (parentRect.contains(targetRect)) {
parents.push(combinedFragments[i])
}
}
parents.sort(function(a, b){
var aH = a.getPresentations()[0].getRectangle().getHeight()
var bH = b.getPresentations()[0].getRectangle().getHeight()
return aH - bH
})
print(parents[0])
}
function getSelectedPresentations() {
var viewManager = astah.getViewManager()
var diagramViewManager = viewManager.getDiagramViewManager()
var selectedPresentations = diagramViewManager.getSelectedPresentations()
return Java.from(selectedPresentations)
}