似乎这只能通过gvpr来实现:
豆子.bat:
set layers=beans:classes
rem beans:jsps:classes:http:externals
gvpr.exe -o beansFiltered.dot -a %layers% -f beansFilter.gvpr beans.dot
dot.exe -Glayerselect=%layers% -Tsvg beansFiltered.dot -o beans.svg
beansFilter.gvpr:
BEGIN
{
int i;
int j;
int k;
string wantedLayers[int];
string layersArr[int];
int found;
j = 0;
for (i = 0; i < ARGC; ++i)
{
unset(layersArr);
split(ARGV[i], layersArr, ':');
for (k = 0; k < #layersArr; ++k)
{
wantedLayers[j++] = layersArr[k];
}
}
}
BEG_G
{
$tgtname = $.name;
for (i = 0; i < #wantedLayers; ++i)
{
$tgtname = sprintf("%s%s%s", $tgtname, "_", wantedLayers[i]);
}
graph_t subgraphs[int];
graph_t subgraph;
subgraph = fstsubg($);
i = 0;
while (subgraph != NULL)
{
if (substr(subgraph.name, 0, 1) != "%")
{
subgraphs[i++] = subgraph;
}
subgraph = nxtsubg(subgraph);
}
}
N
[
unset(layersArr);
split(layer, layersArr, ':');
for (i = 0; i < #layersArr; ++i)
{
found = 0;
for (j = 0; j < #wantedLayers; ++j)
{
if (layersArr[i] == wantedLayers[j])
{
found = 1;
}
}
if (found == 0)
{
return 0;
}
}
return 1;
]
{
found = 0;
for (i = 0; i < #subgraphs; ++i)
{
if (isSubnode(subgraphs[i], $))
{
graph_t sg = subg($T, subgraphs[i].name);
copyA(subgraphs[i], sg);
subnode(sg, $);
++found;
break;
}
}
if (found == 0)
{
node_t newnode = node($T, $.name);
copyA($, newnode);
}
}
E
[
unset(layersArr);
split(layer, layersArr, ':');
for (i = 0; i < #layersArr; ++i)
{
found = 0;
for (j = 0; j < #wantedLayers; ++j)
{
if (layersArr[i] == wantedLayers[j])
{
found = 1;
}
}
if (found == 0)
{
return 0;
}
}
return 1;
]
这为我解决了不需要的边缘过滤和最终图像大小的问题。