• Scott Sun's avatar
    s · fcb3acbc
    Scott Sun authored
    fcb3acbc
ATS_rout_program_read_into_sys.js 6.79 KB
/*
NAME: 
DESCRIPTION: 回读;
PARAMETER:
	[
		{
			name : 'step',
			title : 'step',
			type : 'LineEdit',
			property : {tool_tip : '目标step,默认是orig'}
		},
		{
			name : 'suffix',
			title : 'suffix',
			type : 'LineEdit',
			property : {tool_tip : 'suffix'}
		},
        {
			name : 'export_path',
			title : 'export_path',
			type : 'LineEdit',
			property : {tool_tip : '输出路径'},
		},
         {
			name : 'nf1',
			title : 'nf1',
			type : 'LineEdit',
			property : {tool_tip : 'nf1'},
		},
         {
			name : 'nf2',
			title : 'nf2',
			type : 'LineEdit',
			property : {tool_tip : 'nf2'},
		},
        {
			name : 'units',
			title : '单位',
			type : 'RadioBox',
			property : {
				item_list:[
					{name:'mm',text:'mm'},
					{name:'inch',text:'inch'},
				],
				tool_tip:'单位默认是mm'
			}
		},
		{
			name : 'auto_save',
			title : '自动保存',
			type : 'RadioBox',
			property : {
				item_list:[
					{name:'yes',text:'YES'},
					{name:'no',text:'NO'},
				],
				tool_tip:'是否自动保存料号开关'
			}
		}
	]
	
 VERSION_HISTORY:
	V1.00 2021-04-08 template
		1.新版本
		
 HELP:
	  <html><body bgcolor="#DDECFE">
		<font size="3" color="#003DB2"><p>功能简介</p></font>
		<p> template </ p>
		<br>
		<font size="3" color="#003DB2"><p>参数配置</p></font>
		<p> 回读 </p>
		<br>
		<font size="3" color="#003DB2"><p>注意事项</p></font>
		<p> 无 </p>
		<br>
	</body></html>	
*/

// 引入模块 包 外部参数
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm ? $.ikm : require('topcam.ikm6')($);
var GEN = $.gen;
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db;
var plugin = require('topsin.gengui');
var GUI = plugin.newGui(plugin.__dirname);
var PAR = {};
if ($.par) {
	PAR = $.par;
} else if ($.hasOwnProperty('script_parameter')) {
	PAR = JSON.parse($.script_parameter);
}
if (mode === "aimdfm") {
	IKM.crud("updateRow", {
		table: "pdm_aimdfm_task",
		data: { current_process_title: $.process_title },
		where: { id: $.task_id }
	});
}
var Status = 'ok';
var resultData = [];
var par = PAR; // 接收参数
var default_par = { // 设置默认参数
	step: "array",
    workLayer: "rou",
    export_path:"E:/1",
	suffix:"_read",
	auto_save: "No",
    nf1:3,nf2:3,
	units: "mm"
};
for (var key in default_par) {
	if (!par.hasOwnProperty(key) || par[key] == "") {
		par[key] = default_par[key];
	}
}

// 定义变量
var job = Job.toLowerCase();
require("topsin.genmath");
var genMath = new GenMath();
try {
	// 常规验证 准备工作
	if (!GEN.isJobExists({ job: job })) { throw "料号" + job + "不存在" }
	if (!GEN.isJobOpen({ job: job })) { GEN.openJob({ job: job }) }
	if (mode == "aimdfm") {
		if (GEN.checkInout({job: job,mode: "test"}) != 0) {
			throw "the job check"
		}
		GEN.checkInout({job: job,mode: "out"});
	}
	// 主体
	var stepList = GEN.getStepList({ job: job });
	stepList = stepList.filter(function (v) {
		var tmpreg = new RegExp(par.step, "ig");
		return tmpreg.test(v);
	});
	if (stepList.length == 0) {
		throw "未找到" + par.step
	}
	if( !fs.dirExists(par.export_path) ){
        throw "路径错误"
    }
	//判断当前路径是否存在此料号的文件夹
	if( !fs.dirExists(par.export_path + "/" + job) ){
		fs.mkdir(par.export_path + "/" + job);
	}

    var workLayer = par.workLayer;
    if(fs.exists(par.export_path+"/" + job+"/"+workLayer)) {
        stepList.forEach(function (step) {
            GEN.openStep({ job: job, name: step });
            GEN.clearLayers();  //清除层显示
            GEN.affectedLayer({ mode: 'all', affected: 'no' }); //设置影响层全部不影响
            GEN.COM("sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=inside,area_select=select,select_mode=standard,area_touching_mode=exclude");
            GEN.units({ type: par.units }); //单位初始化
            GEN.zoomHome();  //窗口显示回到原始位置
            GEN.selClearFeature()
        
			var read = workLayer + par.suffix;
			if(GEN.isLayerExists({job:job, layer:read})) {
				GEN.deleteLayer({job:job, layer:read})
			}
            

			GEN.COM( "input_manual_reset");
			GEN.COM( "input_manual_set,path="+(par.export_path+"/" + job+"/"+workLayer)+",job="+job+",step="+step
			+",format=Excellon2,data_type=ascii,units=mm,coordinates=absolute,"
			+"zeroes=none,nf1="+par.nf1+",nf2="+par.nf2+",decimal=no,separator=nl,tool_units=mm,layer="+read
			+",wheel=,wheel_template=,nf_comp=0,multiplier=1,text_line_width=0.0024,"
			+"signed_coords=no,break_sr=yes,drill_only=no,merge_by_rule=no,threshold=200,resolution=3");
			GEN.COM( "input_manual,script_path=");
			GEN.zoomHome();

            GEN.affectedLayer({ mode: 'all', affected: 'no' }); //设置影响层全部不影响
            GEN.clearLayers();  //清除层显示
        });
    } else {
        IKM.msg("没有找到资料")
    }

	

	// 保存料号
	if (/yes/ig.test(par.auto_save)) {
		GEN.checkInout({ job: job, mode: "out" });
		GEN.saveJob({ job: job });
		GEN.checkInout({ job: job, mode: "in" });
	}

	// 结尾返回  固定写法
	var Return = "Done";
	if (mode === "aimdfm") {
		IKM.crud("updateRow", {
			table: "pdm_aimdfm_task",
			data: { progress: 100 },
			where: { id: $.task_id }
		});
		var tmperr = { type: "info", title: "操作完成, 请注意检查!" };
		if (GEN.hasError()) {
			Status = 'error';
			tmperr = { type: "error", title: "GEN错误!", detail: [{ desc: GEN.STATUS.join("\n") }] };
		}
		resultData.push(tmperr);
		Return = { status: Status, result_data: resultData };
	}
	return Return;
} catch (e) {
	var showGUI = true;
	if (GEN.STATUS.length > 0) {
		if (GEN.STATUS.indexOf("Pause Exit:0") >= 0) {
			showGUI = false;
		}
		e = _.toString(e) + "\n" + GEN.STATUS.join("\n");
	}
	if (showGUI) {
		IKM.msg(e);
	}
	Status = 'error';
	resultData.push({ type: "error", title: "脚本执行出错!", detail: [{ desc: _.toString(e) }] });
	return mode === "aimdfm" ? { status: Status, result_data: resultData } : "Error";
}

/**
 * 获取层别
 * @param {Object} 过滤选项
 * @returns {Array}
 */
function getLayer(props) {
	if (!props) {
		props = {};
	}
	var matrix = GEN.getMatrix({ job: job });
	return Object.keys(matrix).reduce(function (a, b) {
		var info = matrix[b];
		var ret = true;
		for (var _key in props) {
			if (info[_key]) {
				if (/object string|object number/ig.test({}.toString.call(props[_key]))) {
					if (props[_key] != info[_key]) {
						ret = false;
					}
				}
				if (/object RegExp/ig.test({}.toString.call(props[_key]))) {
					if (!props[_key].test(info[_key])) {
						ret = false;
					}
				}
				if (/object function/ig.test({}.toString.call(props[_key]))) {
					if (!props[_key](info[_key])) {
						ret = false;
					}
				}
			}
		}
		if (ret) {
			a.push(props.res == "info" ? info : b);
		}
		return a;
	}, []);
}