◆- Adobe插件与脚本区 主要讨论Adobe插件开发与软件脚本撰写

发表新主题 回复
 
只看楼主 主题工具
旧 2024-04-17, 19:51     #1
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
默认 大神谁能帮忙修改下这个用符号替换对象的脚本   



在外网找了个符号替换对象的脚本,有个问题就是如果符号旋转了,替换的时候会自动恢复成初始状态,谁能帮忙改下让它保留角度
123123.gif

var scriptID = "用符号替换对象 ";
var numSelectedItems = 0;
var docRef = app.activeDocument;


var selectedSymbol = null;
// find a symbol in the selection (first symbol found is used)

selectedSymbol = getSymbolInSelection(docRef, selectedSymbol);

//$.write(selectedSymbol);

// script will not work unless selection includes a symbol
var symbolName = '未选择符号,脚本将运行失败!';
if (selectedSymbol){
symbolName = selectedSymbol.name;
}

// Make a simple interface box
var box = new Window('dialog', scriptID);
box.alignChildren='left';
// headline
box.add('statictext', undefined, "符号替换对象");

// stats panel: display selected object count and symbol
box.statsPanel = box.add('panel', undefined, "信息");
box.statsPanel.alignChildren='left';
box.statsPanel.group0 = box.statsPanel.add('group', undefined );

box.statsPanel.add('statictext', undefined, "已选符号名称: " + symbolName);
box.statsPanel.add('statictext', undefined, "选定的对象数: " + numSelectedItems+"个");

// options panel
box.optionsPanel = box.add('panel', undefined, "选项");
box.optionsPanel.alignChildren='left';

// scale checkbox, default: false
var scaleCheck = box.optionsPanel.add('checkbox', undefined, "缩放符号以匹配原始对象?");
scaleCheck.value=false;

// clear originals checkbox; default true
var clearCheck = box.optionsPanel.add('checkbox', undefined, "清除原始对象?");
clearCheck.value=false; //true

// ok and cancel buttons group
box.buttons = box.add('group', undefined );
box.buttons.orientation='row';

box.buttons.add('statictext', undefined, "运行脚本");
var okButton = box.buttons.add('button',undefined, "确定", {name:'ok'});
var closeButton = box.buttons.add('button',undefined, "取消", {name:'close'});

// Ok button function
okButton.onClick = function(){

var scaleSymbol = scaleCheck.value;
var clearOriginals = clearCheck.value;

if (selectedSymbol == null)
{alert(scriptID + "\n" + "请选择一个符号", scriptID, true);
box.close();
} else {
replaceWithSymbol(docRef, selectedSymbol, clearOriginals, scaleSymbol);
box.close();
}


// box.ok();

}

closeButton.onClick = function(){
box.close();
}

box.show()




function replaceWithSymbol(docRef, selectedSymbol, clearOriginals, scaleSymbol){

// loop through remaining selection and replace them with symbols on active layer
// clear originals if desired

for(i=0;i<docRef.selection.length;i++){
var currObj=docRef.selection[i];
// $.write(currObj.layer);
var currLeft=currObj.left;
var currTop=currObj.top;
var currWidth=currObj.width;
var currHeight=currObj.height;
var currInstance=docRef.activeLayer.symbolItems.add(selectedSymbol);

if (scaleSymbol){
currInstance.width*=currHeight/currInstance.height;
currInstance.height=currHeight;
currInstance.left=currLeft;
currInstance.top=currTop;
} else {
currInstance.position = Array( currObj.position[0]+currWidth/2 - currInstance.width/2,
currObj.position[1]-currHeight/2 + currInstance.height/2 );
}
currObj.selected = false;
currInstance.selected = true;
if (clearOriginals) {currObj.remove();}
}
redraw();


if (numSelectedItems > 0) {
// alert(scriptID + "\n" + numSelectedItems + " " + ((numSelectedItems == 1)?"object":"objects") + " in total", scriptID, true);
} else {
alert(scriptID + "\n" + "请选择对象", scriptID, true);
return;
}
}

function getSymbolInSelection(docRef, selectedSymbol) {
// loop through selected items to get the desired symbol and deselect this item
var symbolLayer = null;
for(i=0;i<docRef.selection.length;i++){
if(docRef.selection[i].symbol) {
symbolLayer = docRef.selection[i].layer;
selectedSymbol = docRef.selection[i].symbol;
docRef.selection[i].selected = false;
numSelectedItems -= 1;
}
numSelectedItems += 1;
}


return selectedSymbol;
}
xf01 当前在线   回复时引用此帖回复时引用此帖
旧 2024-04-17, 22:13   只看该作者   #2
木棉树下 木棉树下 当前离线
正式会员
等级: 六袋长老
级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时
 
Uid: 183469
注册日期: 2010-09-07, 10:51
帖子: 1876
感谢: 314
210 个帖子获得 302 次感谢
现金: 544金币
资产: 1344金币
声望: 10 木棉树下 向着好的方向发展
木棉树下 木棉树下 当前离线
正式会员
等级: 六袋长老
级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时级别:90 | 在线时长:8528小时 | 升级还需:117小时
 
Uid: 183469
注册日期: 2010-09-07, 10:51
帖子: 1876
感谢: 314
210 个帖子获得 302 次感谢
现金: 544金币
资产: 1344金币
声望: 10 木棉树下 向着好的方向发展
默认

拼版里面的刀线也做成符号保留旋转角度信息,应该就可以按照相同的旋转角度一次替换了。
木棉树下 当前离线   回复时引用此帖回复时引用此帖
旧 2024-04-18, 08:34   只看该作者   #3
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
默认

引用:
作者: 木棉树下 查看帖子
拼版里面的刀线也做成符号保留旋转角度信息,应该就可以按照相同的旋转角度一次替换了。
这个脚本只能符号替换对象,没法符号替换成另一个符号的
xf01 当前在线   回复时引用此帖回复时引用此帖
旧 2024-06-08, 23:53   只看该作者   #4
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
默认

大佬,我看你的脚本里有个替换-v2,是这种吗?能否分享一下?
上传的图像
文件类型: png QQ截图20240426195532.png (9.3 KB, 634 次查看)
luckystarr 当前在线   回复时引用此帖回复时引用此帖
旧 2024-06-09, 10:39   只看该作者   #5
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
默认

引用:
作者: luckystarr 查看帖子
大佬,我看你的脚本里有个替换-v2,是这种吗?能否分享一下?
你自己去找下那些脚本合集里面都有的
xf01 当前在线   回复时引用此帖回复时引用此帖
旧 2024-06-09, 11:44   只看该作者   #6
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
默认

引用:
作者: xf01 查看帖子
你自己去找下那些脚本合集里面都有的
都找遍了啊,如果跟截图这个一样的话,别的合集里都没有跟你这个一样的
luckystarr 当前在线   回复时引用此帖回复时引用此帖
旧 2024-06-09, 16:35   只看该作者   #7
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
默认

源版 有兴趣自己折腾下吧

/* Program version: Adobe Illustrator CC+ */
var scriptName = 'ReplaceItems-2',
settingFile = {
name: scriptName + '__setting.json',
folder: Folder.myDocuments + '/Scripts/'
};

// DIALOG
var dialog = new Window("dialog");
dialog.text = "Replace objects";
dialog.orientation = "column";
dialog.alignChildren = ["center", "top"];
dialog.spacing = 10;

// MAINGROUP
var MainGroup = dialog.add("group");
MainGroup.orientation = "row";
MainGroup.alignChildren = ["left", "fill"];
MainGroup.spacing = 10;
MainGroup.margins = 0;

// FIRSTCOLUMN
var FirstColumn = MainGroup.add("panel");
FirstColumn.text = "";
FirstColumn.preferredSize.width = 175;
FirstColumn.orientation = "column";
FirstColumn.alignChildren = ["left", "top"];
FirstColumn.spacing = 8;
FirstColumn.margins = [10, 5, 0, 10];


var saveOriginalCheckbox = FirstColumn.add("checkbox");
saveOriginalCheckbox.text = "Save original";
//saveOriginalCheckbox.value = true;

var copyColorsCheckbox = FirstColumn.add("checkbox");
copyColorsCheckbox.text = "Copy fill color (for simple objects)";

var ignoreStroke = FirstColumn.add("checkbox");
ignoreStroke.text = "Ignore stroke";
//ignoreStroke.value = true;
try {
if ( selection[0].typename=="GroupItem"){
//ignoreStroke.enabled = false;
ignoreStroke.text = "Ignore stroke of the replaced objects";
}
}catch (e){
alert ("Plese, select some objects");
}

var TopObj= FirstColumn.add("checkbox");
TopObj.text = "Replace with the top object";

var ResizeStroke= FirstColumn.add("checkbox");
ResizeStroke.text = "Resize stroke";


// SECONDCOLUMN
var SecondColumn = MainGroup.add("panel");
SecondColumn.text = "Size";
SecondColumn.orientation = "column";
SecondColumn.alignChildren = ["left", "top"];
SecondColumn.spacing = 8;
SecondColumn.margins = [10, 15, 10, 10];

var NochangeCheckbox = SecondColumn.add("radiobutton");
NochangeCheckbox.text = "No changes";
//NochangeCheckbox.value = true;

var fitInWidthCheckbox = SecondColumn.add("radiobutton");
fitInWidthCheckbox.text = "Fit width";
//fitInWidthCheckbox.value = false;

var fitInHeightCheckbox = SecondColumn.add("radiobutton");
fitInHeightCheckbox.text = "Fit height";
//fitInHeightCheckbox.value = false;

var copySize= SecondColumn.add("radiobutton");
copySize.text = "Copy";


// THIRDCOLUMN
var ThirdColumn = MainGroup.add("panel");
ThirdColumn.text = "Alignment";
ThirdColumn.preferredSize.width = 100;
ThirdColumn.orientation = "row";
ThirdColumn.alignChildren = ["left", "top"];
ThirdColumn.spacing = 22;
ThirdColumn.margins = [10, 17, 0, 11];
ThirdColumn.alignment = ["left", "fill"];

// GROUP1
var group1 = ThirdColumn.add("group");
group1.orientation = "column";
group1.alignChildren = ["left", "center"];
group1.spacing = 19;
group1.margins = 0;

var AlignTopLeft = group1.add("radiobutton");
var AlignCenterLeft = group1.add("radiobutton");
var AlignBottomLeft = group1.add("radiobutton");

// GROUP2
var group2 = ThirdColumn.add("group");
group2.orientation = "column";
group2.alignChildren = ["left", "center"];
group2.spacing = 19;
group2.margins = 0;

var AlignTopCenter = group2.add("radiobutton");
var AlignCenterCenter = group2.add("radiobutton");
var AlignBottomCenter = group2.add("radiobutton");

// GROUP3
var group3 = ThirdColumn.add("group");
group3.orientation = "column";
group3.alignChildren = ["left", "center"];
group3.spacing = 19;
group3.margins = 0;

var AlignTopRight = group3.add("radiobutton");
var AlignCenterRight = group3.add("radiobutton");
var AlignBottomRight = group3.add("radiobutton");

AlignCenterCenter.value = true;
var myRadioButtons = [];

AlignTopLeft.onClick = toggleRadioButtons;
myRadioButtons.push(AlignTopLeft);
AlignCenterLeft.onClick = toggleRadioButtons;
myRadioButtons.push(AlignCenterLeft);
AlignBottomLeft.onClick = toggleRadioButtons;
myRadioButtons.push(AlignBottomLeft);
AlignTopCenter.onClick = toggleRadioButtons;
myRadioButtons.push(AlignTopCenter);
AlignCenterCenter.onClick = toggleRadioButtons;
myRadioButtons.push(AlignCenterCenter);
AlignBottomCenter.onClick = toggleRadioButtons;
myRadioButtons.push(AlignBottomCenter);
AlignTopRight.onClick = toggleRadioButtons;
myRadioButtons.push(AlignTopRight);
AlignCenterRight.onClick = toggleRadioButtons;
myRadioButtons.push(AlignCenterRight);
AlignBottomRight.onClick = toggleRadioButtons;
myRadioButtons.push(AlignBottomRight);

function toggleRadioButtons() {
for (var i = 0, il = myRadioButtons.length; i < il; i ++) {
if (myRadioButtons[i] !== this) {
myRadioButtons[i].value = false;
}
}
this.value = true;
}

// FINALBUTTONS
//var divider2 = dialog.add("panel");
//divider2.alignment = "fill";

var FinalButtons = dialog.add("group");
FinalButtons.orientation = "row";
FinalButtons.alignChildren = ["left", "center"];
FinalButtons.spacing = 10;
FinalButtons.margins = 0;

var cancel = FinalButtons.add("button", undefined, undefined, {name: "Cancel"});
cancel.text = "Cancel";
cancel.justify = "center";
cancel.onClick = function() {
dialog.close();
}

var ok = FinalButtons.add("button", undefined, undefined, {name: "Ok"});
ok.text = "Ok";
ok.justify = "center";
ok.onClick = startAction;
ok.active = true;

var progressBar = dialog.add('progressbar', [0, 0, 110, 5]),
progressBarCounter = 100;
progressBar.value = 0;
progressBar.minvalue = 0;
progressBar.maxvalue = progressBarCounter;


///////
//FUNCTIONS//
function setFillColor(items, color) {
if (color) {
var i = items.length;
if (i)
while (i--) {
if (items[i].typename === 'GroupItem') {
setFillColor(items[i].pageItems, color);
}
else if (items[i].typename === 'CompoundPathItem') {
if (items[i].pathItems.length) items[i].pathItems[0].fillColor = color;
}
else if (items[i].typename === 'PathItem') {
items[i].fillColor = color;
}
}
}
}

function getFillColor(items) {
var i = items.length,
gc;
if (i)
while (i--) {
if (items[i].typename === 'GroupItem' && (gc = getFillColor(items[i].pageItems))) return gc;
else if (items[i].typename === 'CompoundPathItem' && items[i].pathItems.length) return items[i].pathItems[0].fillColor;
else if (items[i].typename === 'PathItem') return items[i].fillColor;
}
}


/////////////////////////

function startAction() {
if (selection.length) {
items = selection,
i = items.length;
progressBarCounter = progressBar.maxvalue / i;
var nodes = selection[0];

if (TopObj.value == false) {
selection = null;
app.paste();
nodes = selection[0];
selection = null;
}



////
while (i--) {
var err = null;
var item = items[i];
var node = nodes.duplicate(item, ElementPlacement.PLACEBEFORE);

if (node.typename != "GroupItem"){
var nd_s =ignoreStroke.value? 0:(node.visibleBounds[1]-node.geometricBounds[1])*2;
} else {
var nd_Bounds = FindBounds(node);
var nd_height = nd_Bounds[1] - nd_Bounds[3];
var nd_width = nd_Bounds[2] - nd_Bounds[0];
// var nd_height = nd_Bounds[5] - nd_Bounds[7];
//var nd_width = nd_Bounds[6] - nd_Bounds[4];
}

////if ignoreStroke true calculate parameters of geometric bounds
if (ignoreStroke.value == true){
if (item.typename != "GroupItem") {
var it_top = item.geometricBounds[1];
var it_left = item.geometricBounds[0];
var it_width = item.geometricBounds[2] - item.geometricBounds[0];
var it_height = item.geometricBounds[1] - item.geometricBounds[3];

} else if (item.typename == "GroupItem") {
var it_Bounds = FindBounds(item);
var it_top = it_Bounds[1];
var it_left = it_Bounds[0];
var it_width = it_Bounds[2] - it_Bounds[0];
var it_height = it_Bounds[1] - it_Bounds[3];
}

////if ignoreStroke false calculate parameters of visible bounds
} else if (ignoreStroke.value == false) {
if (item.typename != "GroupItem") {
var it_top = item.visibleBounds[1];
var it_left = item.visibleBounds[0];
var it_width = item.visibleBounds[2] - item.visibleBounds[0];
var it_height = item.visibleBounds[1] - item.visibleBounds[3];

}else if (item.typename == "GroupItem"){
var it_Bounds = FindBounds(item);
var it_top = it_Bounds[5];
var it_left = it_Bounds[4];
var it_width = it_Bounds[6] - it_Bounds[4];
var it_height = it_Bounds[5] - it_Bounds[7];
}
}



//////////////////////////
///change size///

var newStroke, newHeight, newWidth;
newStroke = newHeight = newWidth = 100;


if (fitInHeightCheckbox.value) {

//if node is vertical line
if (node.width == 0) {
newStroke = newHeight = it_height * 100 / node.height;
newWidth = 100;

//if node is horisontal line
} else if (node.height == 0) {
newStroke = it_height * 100 / node.strokeWidth;
newHeight = newWidth = 100;

//if node isnot a group
} else if (it_height != 0) {
if (node.typename != "GroupItem") {
newWidth = newHeight = newStroke = ResizeStroke.value
? (it_height / (node.height + nd_s)) * 100
: ((it_height - nd_s) / node.height) * 100;

//if node is a group
} else if (node.typename == "GroupItem") {
newWidth = newHeight = newStroke = it_height / nd_height * 100;
}
} else {
err = "There is an object with zero height";
}


} else if (fitInWidthCheckbox.value) {

//if node is vertical line
if (node.width == 0) {
newStroke = it_width * 100 / node.strokeWidth;
newHeight = 100;

//if node is horisontal line
} else if (node.height == 0) {
newStroke = newWidth = it_width * 100 / node.width;
newHeight = 100;

//if node is not a group
} else if (it_width != 0) {
if (node.typename != "GroupItem" & node.height != 0 & node.width != 0) {
newWidth = newHeight = newStroke = ResizeStroke.value
? (it_width / (node.width + nd_s)) * 100
: ((it_width - nd_s) / node.width) * 100;

//if node is a group
} else if (node.typename == "GroupItem") {
newWidth = newHeight = newStroke = it_width / nd_width * 100;
}
} else {
err = "There is an object with zero width";
}


} else if (copySize.value) {

//if node is vertical line
if (node.width == 0) {
newWidth = 100;
newHeight = it_height * 100 / node.height;
newStroke = it_width * 100 / node.strokeWidth;

//if node is horisontal line
} else if (node.height == 0) {
newWidth = it_width * 100 / node.width;
newHeight = 100;
newStroke = it_height * 100 / node.strokeWidth;

} else if (it_width != 0 | it_height != 0) {
//if node is not a group
if (node.typename != "GroupItem") {
newWidth = ((it_width - nd_s) / node.width) * 100;
newHeight = ((it_height - nd_s) / node.height) * 100;
newStroke = 100;

//if node is a group
} else if (node.typename == "GroupItem") {
newHeight = it_height / nd_height * 100;
newWidth = it_width / nd_width * 100;
newStroke = undefined; /// ?
}
} else {
err = "There is an object with zero width or height";
}
}


node.resize(
scaleX=newWidth,
scaleY= newHeight,
changePositions= undefined,
changeFillPatterns= undefined,
changeFillGradients= undefined,
changeStrokePattern= undefined,
changeLineWidths = ResizeStroke.value ? newStroke : 100);

// end changing size


/// calculate node parametres
if (node.typename == "GroupItem") {
var nd_Bounds = FindBounds(node);
var nd_top = nd_Bounds[1];
var nd_left = nd_Bounds[0];
var nd_width = nd_Bounds[2] - nd_Bounds[0];
var nd_height = nd_Bounds[1] - nd_Bounds[3];
var nd_str = 0;

} else if (node.typename != "GroupItem") {

if (ignoreStroke.value == true) {
var nd_str = node.visibleBounds[1] - node.geometricBounds[1];
var nd_width = node.geometricBounds[2] - node.geometricBounds[0];
var nd_height = node.geometricBounds[1] - node.geometricBounds[3];
var nd_top = node.geometricBounds[1];
var nd_left = node.geometricBounds[0];

if (node.height == 0 || node.width == 0) {
nd_str = 0;
nd_height = node.visibleBounds[1] - node.visibleBounds[3];
nd_width = node.visibleBounds[2] - node.visibleBounds[0];
}

} else if (ignoreStroke.value == false) {
var nd_str = 0;
var nd_width = node.visibleBounds[2] - node.visibleBounds[0];
var nd_height = node.visibleBounds[1] - node.visibleBounds[3];
var nd_top = node.visibleBounds[1];
var nd_left = node.visibleBounds[0];
}
}


//////////////////////////
///change position///


//if node is clipping mask
if (node.typename == "GroupItem"){

///TOP
if (AlignTopLeft.value | AlignTopRight.value | AlignTopCenter.value) {
node.top = node.top - (nd_top - it_top) + nd_str;
}
if (AlignCenterLeft.value | AlignCenterRight.value | AlignCenterCenter.value) {
node.top = node.top - ((nd_top - nd_height / 2) - (it_top - it_height / 2)) + nd_str;
}
if (AlignBottomLeft.value | AlignBottomRight.value | AlignBottomCenter.value) {
node.top = node.top - ((nd_top - nd_height) - (it_top - it_height)) + nd_str;
}

///LEFT
if (AlignTopLeft.value | AlignCenterLeft.value | AlignBottomLeft.value) {
node.left = node.left - (nd_left - it_left) - nd_str;
}
if (AlignTopCenter.value | AlignCenterCenter.value | AlignBottomCenter.value) {
node.left = node.left + ((it_left + it_width / 2) - (nd_left + nd_width / 2)) - nd_str;
}
if (AlignTopRight.value | AlignCenterRight.value | AlignBottomRight.value) {
node.left = node.left + ((it_left + it_width) - (nd_left + nd_width)) - nd_str;
}

///
} else {

///TOP
if (AlignTopLeft.value | AlignTopRight.value | AlignTopCenter.value) {
node.top = it_top + nd_str;
}
if (AlignCenterLeft.value | AlignCenterRight.value | AlignCenterCenter.value) {
node.top = it_top + (nd_height - it_height) / 2 + nd_str;
}
if (AlignBottomLeft.value | AlignBottomRight.value | AlignBottomCenter.value) {
node.top = it_top + nd_height - it_height + nd_str;
}

///LEFT
if (AlignTopLeft.value | AlignCenterLeft.value | AlignBottomLeft.value) {
node.left = it_left - nd_str;
}
if (AlignTopCenter.value | AlignCenterCenter.value | AlignBottomCenter.value) {
node.left = it_left - (nd_width - it_width) / 2 - nd_str;
}
if (AlignTopRight.value | AlignCenterRight.value | AlignBottomRight.value) {
node.left = it_left - (nd_width - it_width) - nd_str;
}
}



/////////////////////////////

if (copyColorsCheckbox.value) {
try {
setFillColor([node], getFillColor([item]));
} catch (e) {
alert(e + '\n' + e.line)
}
}


if (err != null) {
node.remove();
}


if (!saveOriginalCheckbox.value) {
if (item.clipping == true) {
item = item.parent;
}
item.remove();
}

progressBar.value += progressBarCounter;
dialog.update();

} //end while



if (saveOriginalCheckbox.value == true & TopObj.value == true) {
node.remove();
}

if (TopObj.value == false) {
nodes.remove();
}

}

dialog.close();

if (err!=null) alert (err);

} // end StartAction



///////////////////////
/* //////////////////////////////Get object size-support mask function/////////////////////////////////// */
function FindBounds(obj) {
var Bounds = new Array();
GET_Bounds(obj);
var v_left = new Array();
var g_left = new Array();
var v_top = new Array();
var g_top = new Array();
var v_right = new Array();
var g_right = new Array();
var v_bottom = new Array();
var g_bottom = new Array();
for (var i = 0; i < Bounds.length; i += 1) {
g_left[i] = Bounds[i].geometricBounds[0];
v_left[i] = Bounds[i].visibleBounds[0];
g_top[i] = Bounds[i].geometricBounds[1];
v_top[i] = Bounds[i].visibleBounds[1];
g_right[i] = Bounds[i].geometricBounds[2];
v_right[i] = Bounds[i].visibleBounds[2];
g_bottom[i] = Bounds[i].geometricBounds[3];
v_bottom[i] = Bounds[i].visibleBounds[3];
}
var v_L = MIN_IN_ARRAY(v_left);
var g_L = MIN_IN_ARRAY(g_left);
var v_T = MAX_IN_ARRAY(v_top);
var g_T = MAX_IN_ARRAY(g_top);
var v_R = MAX_IN_ARRAY(v_right);
var g_R = MAX_IN_ARRAY(g_right);
var v_B = MIN_IN_ARRAY(v_bottom);
var g_B = MIN_IN_ARRAY(g_bottom);
return [g_L, g_T, g_R, g_B, v_L, v_T, v_R, v_B];

function GET_Bounds(obj) {
if (IS_CLIP(obj)) {
Bounds.push(obj.pageItems[0]);
return;
}
if (obj.constructor.name == "GroupItem") {
try {
var N_sub_obj = obj.pageItems.length;
for (var i = 0; i < N_sub_obj; i += 1) {
GET_Bounds(obj.pageItems[i]);
}
} catch (error) {}
return;
}
Bounds.push(obj);
return;
}
}
////////////////
function IS_CLIP(obj) {
try {
if (obj.constructor.name == "GroupItem") {
if (obj.clipped) {
return true;
}
}
} catch(error) {

}
return false;
}

function MAX_IN_ARRAY(the_array) {
var MAX = the_array[0];
for (var i = 0; i < the_array.length; i += 1) {
if (the_array[i] > MAX) {
MAX = the_array[i]
}
}
return MAX;
}

function MIN_IN_ARRAY(the_array) {
var MIN = the_array[0];
for (var i = 0; i < the_array.length; i += 1) {
if (the_array[i] < MIN) {
MIN = the_array[i]
}
}
return MIN;
}


//////////////////////
function saveSettings() {
var $file = new File(settingFile.folder + settingFile.name),
data = [

saveOriginalCheckbox.value,
copyColorsCheckbox.value,
ignoreStroke.value,
NochangeCheckbox.value,
fitInWidthCheckbox.value,
fitInHeightCheckbox.value,
copySize.value,
TopObj.value,
ResizeStroke.value

].toString();

$file.open('w');
$file.write(data);
$file.close();
}

function loadSettings() {
var $file = File(settingFile.folder + settingFile.name);
if ($file.exists) {
try {
$file.open('r');
var data = $file.read().split('\n'),
$main = data[0].split(',');


saveOriginalCheckbox.value = ($main[0] === 'true');
copyColorsCheckbox.value = ($main[1] === 'true');
ignoreStroke.value = ($main[2] === 'true');
NochangeCheckbox.value = ($main[3] === 'true');
fitInWidthCheckbox.value = ($main[4] === 'true');
fitInHeightCheckbox.value = ($main[5] === 'true');
copySize.value = ($main[6] === 'true');
TopObj.value= ($main[7] === 'true');
ResizeStroke.value= ($main[8] === 'true');

}
catch (e) {}
$file.close();
}
}


dialog.onClose = function() {
saveSettings();
return true;
}

function checkSettingFolder() {
var $folder = new Folder(settingFile.folder);
if (!$folder.exists) $folder.create();
}

checkSettingFolder();
loadSettings();
dialog.center();
dialog.show();
xf01 当前在线   回复时引用此帖回复时引用此帖
旧 2024-06-09, 17:11   只看该作者   #8
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
默认

引用:
作者: xf01 查看帖子
源版 有兴趣自己折腾下吧

/* Program version: Adobe Illustrator CC+ */
var scriptName = 'ReplaceItems-2',
settingFile = {
name: scriptName + '__setting.json',
folder: Folder.myDocuments + '/Scripts/'
};

// DIALOG
var dialog = new Window("dialog");
dialog.text = "Replace objects";
dialog.ori...
多谢大佬的无私奉献
luckystarr 当前在线   回复时引用此帖回复时引用此帖
旧 2024-06-09, 17:34   只看该作者   #9
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
默认

[QUOTE=xf01;2879242]源版 有兴趣自己折腾下吧

解决了,有个选项没选,结果替换了剪切版内容

此帖于 2024-06-09 17:47 被 luckystarr 编辑. 原因: 选错了选项
luckystarr 当前在线   回复时引用此帖回复时引用此帖
旧 2024-06-09, 17:43   只看该作者   #10
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
默认

引用:
作者: luckystarr 查看帖子
大佬,这个脚本运行后只生成了几行代码
没问题呀,你是没把所有代码复制全吧,左边没勾选的话它是会用剪切板对象替换的
xf01 当前在线   回复时引用此帖回复时引用此帖
旧 2024-06-09, 18:18   只看该作者   #11
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
luckystarr luckystarr 当前在线
正式会员
等级: 三袋长老
级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时级别:19 | 在线时长:442小时 | 升级还需:38小时
 
Uid: 109655
注册日期: 2009-08-24, 15:40
帖子: 129
感谢: 2
5 个帖子获得 5 次感谢
现金: 213金币
资产: 213金币
声望: 10 luckystarr 向着好的方向发展
默认

引用:
作者: xf01 查看帖子
没问题呀,你是没把所有代码复制全吧,左边没勾选的话它是会用剪切板对象替换的
是的大佬,就是忘记选顶层对象了,结果替换了剪切版内容
luckystarr 当前在线   回复时引用此帖回复时引用此帖
旧 2024-10-11, 17:00   只看该作者   #12
悠一 悠一 当前离线
正式会员
等级: 四袋长老
级别:22 | 在线时长:608小时 | 升级还需:13小时级别:22 | 在线时长:608小时 | 升级还需:13小时级别:22 | 在线时长:608小时 | 升级还需:13小时级别:22 | 在线时长:608小时 | 升级还需:13小时
 
Uid: 731898
注册日期: 2023-12-12, 01:32
帖子: 489
感谢: 298
33 个帖子获得 38 次感谢
现金: 351金币
资产: 709金币
声望: 10 悠一 向着好的方向发展
悠一 悠一 当前离线
正式会员
等级: 四袋长老
级别:22 | 在线时长:608小时 | 升级还需:13小时级别:22 | 在线时长:608小时 | 升级还需:13小时级别:22 | 在线时长:608小时 | 升级还需:13小时级别:22 | 在线时长:608小时 | 升级还需:13小时
 
Uid: 731898
注册日期: 2023-12-12, 01:32
帖子: 489
感谢: 298
33 个帖子获得 38 次感谢
现金: 351金币
资产: 709金币
声望: 10 悠一 向着好的方向发展
默认

引用:
作者: xf01 查看帖子
源版 有兴趣自己折腾下吧

/* Program version: Adobe Illustrator CC+ */
var scriptName = 'ReplaceItems-2',
settingFile = {
name: scriptName + '__setting.json',
folder: Folder.myDocuments + '/Scripts/'
};

// DIALOG
var dialog = new Window("dialog");
dialog.text = "Replace objects";
dialog.ori...
谢谢大佬,怎么改成中文呀,复制下来是英文的
悠一 当前离线   回复时引用此帖回复时引用此帖
旧 2024-10-11, 17:04   只看该作者   #13
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
xf01 xf01 当前在线
正式会员
等级: 五袋长老
级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时级别:61 | 在线时长:4062小时 | 升级还需:30小时
 
Uid: 390408
注册日期: 2014-02-22, 18:17
帖子: 930
感谢: 161
118 个帖子获得 146 次感谢
现金: 504金币
资产: 950金币
声望: 10 xf01 向着好的方向发展
默认

引用:
作者: 悠一 查看帖子
谢谢大佬,怎么改成中文呀,复制下来是英文的
你看下相关楼上楼下的帖子呀,有汉化的呀
xf01 当前在线   回复时引用此帖回复时引用此帖
右列会员因为此帖价值甚高向 xf01 表示感谢:
悠一 (2024-10-12)
旧 2024-10-11, 19:44   只看该作者   #14
姜椒蒜 姜椒蒜 当前在线
中级会员
等级: 七袋长老
级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时
 
Uid: 699927
注册日期: 2020-12-20, 15:13
帖子: 3687
感谢: 658
337 个帖子获得 402 次感谢
现金: 34金币
资产: 7234金币
声望: 10 姜椒蒜 向着好的方向发展
姜椒蒜 姜椒蒜 当前在线
中级会员
等级: 七袋长老
级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时级别:83 | 在线时长:7339小时 | 升级还需:53小时
 
Uid: 699927
注册日期: 2020-12-20, 15:13
帖子: 3687
感谢: 658
337 个帖子获得 402 次感谢
现金: 34金币
资产: 7234金币
声望: 10 姜椒蒜 向着好的方向发展
默认

代码能不能放在JSX里啊,安卓浏览这个帖子划拉半天
姜椒蒜 当前在线   回复时引用此帖回复时引用此帖
旧 2024-10-11, 20:30   只看该作者   #15
hutang hutang 当前离线
正式会员
等级: 三袋长老
帅哥 级别:18 | 在线时长:421小时 | 升级还需:16小时级别:18 | 在线时长:421小时 | 升级还需:16小时级别:18 | 在线时长:421小时 | 升级还需:16小时
 
Uid: 270833
注册日期: 2011-12-10, 09:10
来自: 宁波
年龄: 38
帖子: 164
感谢: 4
3 个帖子获得 3 次感谢
现金: 191金币
资产: 193金币
声望: 10 hutang 向着好的方向发展
hutang hutang 当前离线
正式会员
等级: 三袋长老
帅哥 级别:18 | 在线时长:421小时 | 升级还需:16小时级别:18 | 在线时长:421小时 | 升级还需:16小时级别:18 | 在线时长:421小时 | 升级还需:16小时
 
Uid: 270833
注册日期: 2011-12-10, 09:10
来自: 宁波
年龄: 38
帖子: 164
感谢: 4
3 个帖子获得 3 次感谢
现金: 191金币
资产: 193金币
声望: 10 hutang 向着好的方向发展
默认

楼主用这个符号替换用来拼版的难道??。问题是有蒙版的东西做成符号会变成全部内容的尺寸,不好拼了呀反而。
hutang 当前离线   回复时引用此帖回复时引用此帖
发表新主题 回复


发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子

论坛启用 vB 代码
论坛启用 表情图标
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


律师声明:本站内容,均具有版权,未经书面授权,禁止转载,严禁镜像,违者承担一切后果!
论坛广告报价   广告联系及办理企业会员服务QQ:57880388 站务管理QQ:35529388


所有时间均为 +8, 现在的时间是 2025-01-04 14:33.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
 
Copyright © 2004-2022