检查选择是否包含图形
Check if the selection contains graphics
我正在尝试编写一个脚本,其中的一部分是找出所选对象中是否有图像,或者对象是否为空形状。
我要检查选择的文件是全是图片,全是形状还是混合。
我把这段代码和警报放在一起了(最终代码不会有警报,这是为了理解目的):
if (app.selection.length == 0) {
alert ("Nothing selected");
}
else {
for (var i = 0; i < app.selection.length; i++) {
if ((app.selection[i].graphics.length == 0) && (app.selection[i].graphics.length == 1)) {
alert ("The files are mixed");
}
else if (app.selection[i].graphics.length == 1) {
alert ("The files are images");
}
else if (app.selection[i].graphics.length == 0) {
alert ("The files are shapes");
}
}
}
显然代码没有按预期工作(它适用于图像和形状,虽然我已经知道混合部分它写得不正确),因为我的搜索没有结果。
我正在寻找的是:如果没有选择任何东西(做某事),否则如果文件是形状和图像(只对形状做某事),否则如果只有图像(做某事),否则如果只有形状(做点什么)。
有人可以告诉我怎么做吗?
基本上算法可以是这样的:
var sel = app.selection;
if (sel.length == 0) alert('Nothing selected');
else {
var images = sel.pop().graphics.length > 0;
var mixed = false;
while (sel.length) {
if ((sel.pop().graphics.length > 0) != images) {
mixed = true;
break;
}
}
if (mixed) alert('Mixed');
else {
if (images) alert('Images');
else alert('Shapes');
}
}
但它不处理组。
更新
如果您只想从选区中获取形状(并忽略图像),可以这样做:
var sel = app.selection;
if (sel.length == 0) { alert('Nothing selected'); exit() }
var shapes = [];
for (var i=0; i<sel.length; i++)
if (sel[i].graphics.length == 0) shapes.push(sel[i]);
if (shapes.length > 0) do_something(shapes);
// ----------------------------------------------------------------------
function do_something(shapes) {
alert('Here we go...');
app.selection = shapes;
// do stuff...
}
或者一个简短的变体(只是为了取消选择图像):
var sel = app.selection;
for (var i=0; i<sel.length; i++)
if (sel[i].graphics.length > 0) sel[i].select(SelectionOptions.REMOVE_FROM);
更新 2
代码如下:
- 如果未选择任何内容 > 创建一个白色矩形,
- 如果仅选择图像 > 创建一个白色矩形,
- 如果仅选择形状 > 将形状着色为白色,
- 如果选择是混合的 > 仅选择白色的形状和颜色。
var sel = app.selection;
if (sel.length == 0) fn_nothing();
else {
var images = sel.pop().graphics.length > 0;
var mixed = false;
while (sel.length) {
if ((sel.pop().graphics.length > 0) != images) {
mixed = true;
break;
}
}
if (mixed) fn_mixed();
else {
if (images) fn_images();
else fn_shapes();
}
}
function fn_nothing() {
alert('Nothing');
create_white_rectangle();
}
function fn_images() {
alert('Images');
create_white_rectangle();
}
function fn_shapes() {
alert('Shapes');
color_shapes_white();
}
function fn_mixed() {
alert('Mixed');
select_shapes();
color_shapes_white();
}
function select_shapes() {
var sel = app.selection;
while (sel.length) {
var item = sel.pop();
if (item.graphics.length > 0)
item.select(SelectionOptions.REMOVE_FROM)
}
alert('Select shapes');
}
function color_shapes_white() {
alert('Color shapes white')
}
function create_white_rectangle() {
alert('Create a white rectangle');
}
我正在尝试编写一个脚本,其中的一部分是找出所选对象中是否有图像,或者对象是否为空形状。
我要检查选择的文件是全是图片,全是形状还是混合。
我把这段代码和警报放在一起了(最终代码不会有警报,这是为了理解目的):
if (app.selection.length == 0) {
alert ("Nothing selected");
}
else {
for (var i = 0; i < app.selection.length; i++) {
if ((app.selection[i].graphics.length == 0) && (app.selection[i].graphics.length == 1)) {
alert ("The files are mixed");
}
else if (app.selection[i].graphics.length == 1) {
alert ("The files are images");
}
else if (app.selection[i].graphics.length == 0) {
alert ("The files are shapes");
}
}
}
显然代码没有按预期工作(它适用于图像和形状,虽然我已经知道混合部分它写得不正确),因为我的搜索没有结果。
我正在寻找的是:如果没有选择任何东西(做某事),否则如果文件是形状和图像(只对形状做某事),否则如果只有图像(做某事),否则如果只有形状(做点什么)。
有人可以告诉我怎么做吗?
基本上算法可以是这样的:
var sel = app.selection;
if (sel.length == 0) alert('Nothing selected');
else {
var images = sel.pop().graphics.length > 0;
var mixed = false;
while (sel.length) {
if ((sel.pop().graphics.length > 0) != images) {
mixed = true;
break;
}
}
if (mixed) alert('Mixed');
else {
if (images) alert('Images');
else alert('Shapes');
}
}
但它不处理组。
更新
如果您只想从选区中获取形状(并忽略图像),可以这样做:
var sel = app.selection;
if (sel.length == 0) { alert('Nothing selected'); exit() }
var shapes = [];
for (var i=0; i<sel.length; i++)
if (sel[i].graphics.length == 0) shapes.push(sel[i]);
if (shapes.length > 0) do_something(shapes);
// ----------------------------------------------------------------------
function do_something(shapes) {
alert('Here we go...');
app.selection = shapes;
// do stuff...
}
或者一个简短的变体(只是为了取消选择图像):
var sel = app.selection;
for (var i=0; i<sel.length; i++)
if (sel[i].graphics.length > 0) sel[i].select(SelectionOptions.REMOVE_FROM);
更新 2
代码如下:
- 如果未选择任何内容 > 创建一个白色矩形,
- 如果仅选择图像 > 创建一个白色矩形,
- 如果仅选择形状 > 将形状着色为白色,
- 如果选择是混合的 > 仅选择白色的形状和颜色。
var sel = app.selection;
if (sel.length == 0) fn_nothing();
else {
var images = sel.pop().graphics.length > 0;
var mixed = false;
while (sel.length) {
if ((sel.pop().graphics.length > 0) != images) {
mixed = true;
break;
}
}
if (mixed) fn_mixed();
else {
if (images) fn_images();
else fn_shapes();
}
}
function fn_nothing() {
alert('Nothing');
create_white_rectangle();
}
function fn_images() {
alert('Images');
create_white_rectangle();
}
function fn_shapes() {
alert('Shapes');
color_shapes_white();
}
function fn_mixed() {
alert('Mixed');
select_shapes();
color_shapes_white();
}
function select_shapes() {
var sel = app.selection;
while (sel.length) {
var item = sel.pop();
if (item.graphics.length > 0)
item.select(SelectionOptions.REMOVE_FROM)
}
alert('Select shapes');
}
function color_shapes_white() {
alert('Color shapes white')
}
function create_white_rectangle() {
alert('Create a white rectangle');
}