تجهیز و بروزرسانی آزمایشگاههای دانشکده مکانیک ساخت و تولید دانشگاه تبریز
تمام ماشین آلات CNC شرکت ضمن دارا بودن علامت CE اروپا، دارای کیفیت لازم برای صادرات به کشورهای اروپایی و کشورهای خارجی میباشد که در چند کشور همجوار هم راه اندازی شده و در حال کار میباشند.
شرکت کنترل ماشین سرو (دانش بنیان) مجموعه ای متشکل از متخصصین و مدرسین دانشگاهی می باشد که در زمینه الکترونیک، اتوماسیون صنعتی، تاسیسات برق صنعتی، و ماشین الات CNC در کارگروه های ویژه هر بخش در جهت تجاری سازی پژوهش و تحقیقات علمی و صنعتی فعالیت می کند. کنترل ماشین سَرو توسط کارگروه ارزیابی و تشخیص صلاحیت شرکتهای دانش بنیان معاونت علمی و فن آوری ریاست جمهوری به عنوان شرکت دانش بنیان مورد تایید قرار گرفته و ثبت گردیده است. این موفقیت بزرگ به لطف الهی مرهون فعالیتهای نوآورانه علمی و صنعتی تاثیر گذار مهندسین فرهیخته و مجرب شرکت می باشد.
; Copyright (C) 2015 Glimlag.gr
; license GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html
COM_MODULES_BASIC_SETTINGS_FIELDSET_LABEL = "Basic player settings"
COM_MODULES_VIDEO_SETTINGS_FIELDSET_LABEL = "Video settings"
COM_MODULES_VIDEO_SOURCE_FIELDSET_FIELDSET_LABEL = "Video source"
COM_MODULES_AUDIO_SOURCE_FIELDSET_FIELDSET_LABEL = "Audio source"
COM_MODULES_WATERMARK_FIELDSET_FIELDSET_LABEL = "Watermark"
COM_MODULES_RIGHTCLICK_FIELDSET_FIELDSET_LABEL = "Right Click options"
MEDIA_CHOOSE = "Choose media"
MEDIA_PLAYLIST = "Playlist"
VIDEO_VIDEO_MP4="Video [mp4]"
VIDEO_VIDEO_WEBM="Video [webm]"
VIDEO_VIDEO_OGG="Video [ogg]"
VIDEO_FLASH="Flash Fallback [mp4]"
VIDEO_IMAGE="Image"
VIDEO_IMAGE_VISIBILITY="Image visible"
VIDEO_HOST = "Host"
VIDEO_PLAYLIST = "Playlist"
VIDEO_SOURCE = "Video source"
AUDIO_SOURCE = "Audio source"
TOOLTIP_MEDIACHOOSE = "Choose what you want to play (video or audio)"
TOOLTIP_VIDEOHOST = "Choose where the video is hosted"
TOOLTIP_VIDEOPLAYLIST = "Are you going to add a playlist or a single video?"
TOOLTIP_VIDEOSOURCE = "Add the URL. If you want to add playlist seperate the URL's with a comma"
TOOLTIP_MEDIAPLAYLIST = "Are you going to add a playlist or a single video - audio?"
TOOLTIP_VIDEO_MP4="Path to the video [mp4]. Type in 0 for no Video."
TOOLTIP_VIDEO_WEBM="Path to the video [webm]. Type in 0 for no Video."
TOOLTIP_VIDEO_OGG="Path to the video [ogg]. Type in 0 for no Video."
TOOLTIP_FLASH="If video cannot display in HTML5, here you can set a default fallback video for flash. Type in 0 for no flash video."
TOOLTIP_IMAGE="Poster image. Types: gif, jpg, png."
TOOLTIP_IMAGE_VISIBILITY="Hide/display the poster image."
VIDEO_WIDTH="Width"
VIDEO_HEIGHT="Height"
VIDEO_SKIN="Skin"
AUDIO_SKIN="Skin"
VIDEO_AUTOPLAY="Autoplay"
VIDEO_PRELOAD="Preload"
VIDEO_LOOP="Loop"
VIDEO_DEFAULT_VOLUME="Default Volume"
VIDEO_PLAYER_FALLBACK_ORDER="Player Fallback Order"
VIDEO_WMODE="WMode"
VIDEO_FLASH_PLAYER_VERSION="Flash Player Version"
VIDEO_STARTUP_IMAGE="Startup image/poster"
VIDEO_ENABLE_CAPTIONS="Enable captions"
VIDEO_CAPTIONS="Captions"
VIDEO_ENABLE_SUBTITLES="Enable subtitles"
VIDEO_SUBTITLES="Subtitles"
VIDEO_WATERMARK_IMAGE="Watermark image"
VIDEO_WATERMARK_POSITION="Watermark position"
VIDEO_WATERMARK_CLICKABLE="Clickable"
VIDEO_WATERMARK_URL="Url"
VIDEO_WATERMARK_OPACITY="Opacity"
VIDEO_RIGHTCLICK_DISABLE="Disable right click"
VIDEO_RIGHTCLICK_ENABLE="Enable custom right click"
VIDEO_RIGHTCLICK_MENUSPEED="Menu speed"
VIDEO_RIGHTCLICK_MENU="Custom menu"
VIDEO_MENU_ID="Menu ID"
TOOLTIP_WIDTH="Width."
TOOLTIP_HEIGHT="Height."
TOOLTIP_SKIN="Choose skin."
TOOLTIP_AUTOPLAY="Autoplay the video."
TOOLTIP_PRELOAD="Preload the video."
TOOLTIP_LOOP="Loops the video. Actually it works only in HTML."
TOOLTIP_CONTROLS_BELOW="Display control bar below video instead in front of."
TOOLTIP_CONTROLS_AT_START="Make controls visible when page loads."
TOOLTIP_CONTROLS_HIDING="Hide controls when mouse is not over the video."
TOOLTIP_DEFAULT_VOLUME="Will be overridden by local volume if available."
TOOLTIP_PLAYER_FALLBACK_ORDER="Players and order to use them."
TOOLTIP_WMODE="Here you can choose the wmode for flash player (e.g. opaque, to place elements above flash)."
TOOLTIP_FLASH_PLAYER_VERSION="Required flash version for fallback."
TOOLTIP_STARTUP_IMAGE="Choose an image that will display before the video starts"
TOOLTIP_ENABLE_CAPTIONS="Enable the captions button in the player"
TOOLTIP_CAPTIONS="Select the captions.The name of the files must be language.videoid.vtt e.g. english.video1.vtt. You shall upload them on folder /modules/mod_nvisionplayer/data"
TOOLTIP_ENABLE_SUBTITLES="Enable the subtitles button in the player"
TOOLTIP_SUBTITLES="Select the subtitles.The name of the files must be language.videoid.vtt e.g. english.video1.vtt. You shall upload them on folder /modules/mod_nvisionplayer/data"
TOOLTIP_AUDIOSOURCE="Add the url of the audio file"
TOOLTIP_WATERMARK_IMAGE="Select an image that will be added as watermark"
TOOLTIP_WATERMARK_POSITION="Select the position where the watermark will be displayed over the video"
TOOLTIP_WATERMARK_CLICKABLE="Whether the watermark image will be clickable or not"
TOOLTIP_WATERMARK_URL="Where do you want to send the user after clicking the watermark"
TOOLTIP_WATERMARK_OPACITY="It must be something between 0 and 1"
TOOLTIP_RIGHTCLICK_DISABLE="Just disable right click in the video"
TOOLTIP_RIGHTCLICK_ENABLE="Enable right click and define what will be displayed"
TOOLTIP_RIGHTCLICK_MENUSPEED="Menu popup speed in ms"
TOOLTIP_RIGHTCLICK_MENU="HTML5 menu.This is what will show on right click. For info check in our manual on www.glimlag.gr"
TOOLTIP_MENU_ID="It must be unique e.g. video1"
/*
This file is part of AudioJS. Copyright 2010 Zencoder, Inc.
Modified for html5 audio tag by dz0ny
AudioJS is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
AudioJS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with AudioJS. If not, see <http://www.gnu.org/licenses/>.
*/
// Store a list of players on the page for reference
var audioJSPlayers = new Array();
// Using jresig's Class implementation http://ejohn.org/blog/simple-javascript-inheritance/
(function(){var initializing=false, fnTest=/xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; this.Class = function(){}; Class.extend = function(prop) { var _super = this.prototype; initializing = true; var prototype = new this(); initializing = false; for (var name in prop) { prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn){ return function() { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; } function Class() { if ( !initializing && this.init ) this.init.apply(this, arguments); } Class.prototype = prototype; Class.constructor = Class; Class.extend = arguments.callee; return Class;};})();
// Audio JS Player Class
var AudioJS = Class.extend({
// Initialize the player for the supplied audio tag element
// element: audio tag
// num: the current player's position in the audioJSPlayers array
init: function(element, setOptions){
this.audio = element;
// Default Options
this.options = {
num: 0, // Optional tracking of audioJSPLayers position
defaultVolume: 0.85, // Will be overridden by localStorage volume if available
linksHiding: true
};
// Override default options with set options
if (typeof setOptions == "object") _V_.merge(this.options, setOptions);
this.box = this.audio.parentNode;
this.percentLoaded = 0;
if (this.options.controlsBelow) {
_V_.addClass(this.box, "vjs-controls-below");
}
// Hide default controls
this.audio.controls = false;
this.buildController();
this.showController();
// Position & show controls when data is loaded
this.audio.addEventListener("loadeddata", this.onLoadedData.context(this), false);
// Listen for when the audio is played
this.audio.addEventListener("play", this.onPlay.context(this), false);
// Listen for when the audio is paused
this.audio.addEventListener("pause", this.onPause.context(this), false);
// Listen for when the audio ends
this.audio.addEventListener("ended", this.onEnded.context(this), false);
// Listen for a volume change
this.audio.addEventListener('volumechange',this.onVolumeChange.context(this),false);
// Listen for audio errors
this.audio.addEventListener('error',this.onError.context(this),false);
// Listen for Audio Load Progress (currently does not if html file is local)
this.audio.addEventListener('progress', this.onProgress.context(this), false);
// Set interval for load progress using buffer watching method
this.watchBuffer = setInterval(this.updateBufferedTotal.context(this), 33);
// Listen for clicks on the play/pause button
this.playControl.addEventListener("click", this.onPlayControlClick.context(this), false);
// Make a click on the audio act like a click on the play button.
this.audio.addEventListener("click", this.onPlayControlClick.context(this), false);
// Make a click on the poster act like a click on the play button.
if (this.poster) this.poster.addEventListener("click", this.onPlayControlClick.context(this), false);
// Listen for drags on the progress bar
this.progressHolder.addEventListener("mousedown", this.onProgressHolderMouseDown.context(this), false);
// Listen for a release on the progress bar
this.progressHolder.addEventListener("mouseup", this.onProgressHolderMouseUp.context(this), false);
// Set to stored volume OR 85%
this.setVolume(localStorage.volume || this.options.defaultVolume);
// Listen for a drag on the volume control
this.volumeControl.addEventListener("mousedown", this.onVolumeControlMouseDown.context(this), false);
// Listen for a release on the volume control
this.volumeControl.addEventListener("mouseup", this.onVolumeControlMouseUp.context(this), false);
// Set the display to the initial volume
this.updateVolumeDisplay();
this.onWindowResize = function(event){
this.positionController();
}.context(this);
// Support older browsers that used autobuffer
this.fixPreloading()
},
// Support older browsers that used "autobuffer"
fixPreloading: function(){
if (typeof this.audio.hasAttribute == "function" && this.audio.hasAttribute("preload")) {
this.audio.autobuffer = true;
}
},
buildController: function(){
/* Creating this HTML
<ul class="vjs-controls">
<li class="vjs-play-control vjs-play">
<span></span>
</li>
<li class="vjs-progress-control">
<ul class="vjs-progress-holder">
<li class="vjs-load-progress"></li>
<li class="vjs-play-progress"></li>
</ul>
</li>
<li class="vjs-time-control">
<span class="vjs-current-time-display">00:00</span><span> / </span><span class="vjs-duration-display">00:00</span>
</li>
<li class="vjs-volume-control">
<ul>
<li></li><li></li><li></li><li></li><li></li><li></li>
</ul>
</li>
</ul>
*/
// Create a list element to hold the different controls
this.controls = _V_.createElement("ul", { className: "vjs-controls" });
// Add the controls to the audio's container
this.audio.parentNode.appendChild(this.controls);
// Build the play control
this.playControl = _V_.createElement("li", { className: "vjs-play-control vjs-play", innerHTML: "<span></span>" });
this.controls.appendChild(this.playControl);
// Build the progress control
this.progressControl = _V_.createElement("li", { className: "vjs-progress-control" });
this.controls.appendChild(this.progressControl);
// Create a holder for the progress bars
this.progressHolder = _V_.createElement("ul", { className: "vjs-progress-holder" });
this.progressControl.appendChild(this.progressHolder);
// Create the loading progress display
this.loadProgress = _V_.createElement("li", { className: "vjs-load-progress" });
this.progressHolder.appendChild(this.loadProgress)
// Create the playing progress display
this.playProgress = _V_.createElement("li", { className: "vjs-play-progress" });
this.progressHolder.appendChild(this.playProgress);
// Create the progress time display (00:00 / 00:00)
this.timeControl = _V_.createElement("li", { className: "vjs-time-control" });
this.controls.appendChild(this.timeControl);
// Create the current play time display
this.currentTimeDisplay = _V_.createElement("span", { className: "vjs-current-time-display", innerHTML: "00:00" });
this.timeControl.appendChild(this.currentTimeDisplay);
// Add time separator
this.timeSeparator = _V_.createElement("span", { innerHTML: " / " });
this.timeControl.appendChild(this.timeSeparator);
// Create the total duration display
this.durationDisplay = _V_.createElement("span", { className: "vjs-duration-display", innerHTML: "00:00" });
this.timeControl.appendChild(this.durationDisplay);
// Create the volumne control
this.volumeControl = _V_.createElement("li", {
className: "vjs-volume-control",
innerHTML: "<ul><li></li><li></li><li></li><li></li><li></li><li></li></ul>"
});
this.controls.appendChild(this.volumeControl);
this.volumeDisplay = this.volumeControl.children[0]
},
// Show the controller
showController: function(){
this.controls.style.display = "block";
this.positionController();
},
// Place controller relative to the audio's position
positionController: function(){
// Make sure the controls are visible
if (this.controls.style.display == 'none') return;
this.controls.style.height = this.audio.offsetHeight + this.controls.offsetHeight + "px";
this.controls.style.width = "100px";
this.sizeProgressBar();
},
canPlaySource: function(){
var children = this.audio.children;
for (var i=0; i<children.length; i++) {
if (children[i].tagName.toUpperCase() == "SOURCE") {
var canPlay = this.audio.canPlayType(children[i].type);
if(canPlay == "probably" || canPlay == "maybe") {
return true;
}
}
}
return false;
},
// When the audio is played
onPlay: function(event){
this.playControl.className = "vjs-play-control vjs-pause";
this.trackPlayProgress();
},
// When the audio is paused
onPause: function(event){
this.playControl.className = "vjs-play-control vjs-play";
this.stopTrackingPlayProgress();
},
// When the audio ends
onEnded: function(event){
this.audio.pause();
this.onPause();
},
onVolumeChange: function(event){
this.updateVolumeDisplay();
},
onError: function(event){
console.log(event);
console.log(this.audio.error);
},
onLoadedData: function(event){
this.showController();
},
// When the audio's load progress is updated
// Does not work in all browsers (Safari/Chrome 5)
onProgress: function(event){
if(event.total > 0) {
this.setLoadProgress(event.loaded / event.total);
}
},
// Buffer watching method for load progress.
// Used for browsers that don't support the progress event
updateBufferedTotal: function(){
if (this.audio.buffered) {
if (this.audio.buffered.length >= 1) {
this.setLoadProgress(this.audio.buffered.end(0) / this.audio.duration);
if (this.audio.buffered.end(0) == this.audio.duration) {
clearInterval(this.watchBuffer);
}
}
} else {
clearInterval(this.watchBuffer);
}
},
setLoadProgress: function(percentAsDecimal){
if (percentAsDecimal > this.percentLoaded) {
this.percentLoaded = percentAsDecimal;
this.updateLoadProgress();
}
},
updateLoadProgress: function(){
if (this.controls.style.display == 'none') return;
this.loadProgress.style.width = (this.percentLoaded * (_V_.getComputedStyleValue(this.progressHolder, "width").replace("px", ""))) + "px";
},
// React to clicks on the play/pause button
onPlayControlClick: function(event){
if (this.audio.paused) {
this.audio.play();
} else {
this.audio.pause();
}
},
// Adjust the play position when the user drags on the progress bar
onProgressHolderMouseDown: function(event){
this.stopTrackingPlayProgress();
if (this.audio.paused) {
this.audioWasPlaying = false;
} else {
this.audioWasPlaying = true;
this.audio.pause();
}
_V_.blockTextSelection();
document.onmousemove = function(event) {
this.setPlayProgressWithEvent(event);
}.context(this);
document.onmouseup = function(event) {
_V_.unblockTextSelection();
document.onmousemove = null;
document.onmouseup = null;
if (this.audioWasPlaying) {
this.audio.play();
this.trackPlayProgress();
}
}.context(this);
},
// When the user stops dragging on the progress bar, update play position
// Backup for when the user only clicks and doesn't drag
onProgressHolderMouseUp: function(event){
this.setPlayProgressWithEvent(event);
},
// Adjust the volume when the user drags on the volume control
onVolumeControlMouseDown: function(event){
_V_.blockTextSelection();
document.onmousemove = function(event) {
this.setVolumeWithEvent(event);
}.context(this);
document.onmouseup = function() {
_V_.unblockTextSelection();
document.onmousemove = null;
document.onmouseup = null;
}.context(this);
},
// When the user stops dragging, set a new volume
// Backup for when the user only clicks and doesn't drag
onVolumeControlMouseUp: function(event){
this.setVolumeWithEvent(event);
},
// Adjust the width of the progress bar to fill the controls width
sizeProgressBar: function(){
// this.progressControl.style.width =
// this.controls.offsetWidth
// - this.playControl.offsetWidth
// - this.volumeControl.offsetWidth
// - this.timeControl.offsetWidth
// - this.fullscreenControl.offsetWidth
// - (this.getControlsPadding() * 6)
// - this.getControlBorderAdjustment()
// + "px";
// this.progressHolder.style.width = (this.progressControl.offsetWidth - (this.timeControl.offsetWidth + 20)) + "px";
this.updatePlayProgress();
this.updateLoadProgress();
},
// Get the space between controls. For more flexible styling.
getControlsPadding: function(){
return _V_.findPosX(this.playControl) - _V_.findPosX(this.controls)
},
// When dynamically placing controls, if there are borders on the controls, it can break to a new line.
getControlBorderAdjustment: function(){
var leftBorder = parseInt(_V_.getComputedStyleValue(this.playControl, "border-left-width").replace("px", ""));
var rightBorder = parseInt(_V_.getComputedStyleValue(this.playControl, "border-right-width").replace("px", ""));
return leftBorder + rightBorder;
},
// Track & display the current play progress
trackPlayProgress: function(){
this.playProgressInterval = setInterval(function(){ this.updatePlayProgress(); }.context(this), 33);
},
// Turn off play progress tracking (when paused)
stopTrackingPlayProgress: function(){
clearInterval(this.playProgressInterval);
},
// Ajust the play progress bar's width based on the current play time
updatePlayProgress: function(){
if (this.controls.style.display == 'none') return;
this.playProgress.style.width = ((this.audio.currentTime / this.audio.duration) * (_V_.getComputedStyleValue(this.progressHolder, "width").replace("px", ""))) + "px";
this.updateTimeDisplay();
},
// Update the play position based on where the user clicked on the progresss bar
setPlayProgress: function(newProgress){
this.audio.currentTime = newProgress * this.audio.duration;
this.playProgress.style.width = newProgress * (_V_.getComputedStyleValue(this.progressHolder, "width").replace("px", "")) + "px";
this.updateTimeDisplay();
},
setPlayProgressWithEvent: function(event){
var newProgress = _V_.getRelativePosition(event.pageX, this.progressHolder);
this.setPlayProgress(newProgress);
},
// Update the displayed time (00:00)
updateTimeDisplay: function(){
this.currentTimeDisplay.innerHTML = _V_.formatTime(this.audio.currentTime);
if (this.audio.duration) this.durationDisplay.innerHTML = _V_.formatTime(this.audio.duration);
},
// Set a new volume based on where the user clicked on the volume control
setVolume: function(newVol){
this.audio.volume = parseFloat(newVol);
localStorage.volume = this.audio.volume;
},
setVolumeWithEvent: function(event){
var newVol = _V_.getRelativePosition(event.pageX, this.volumeControl.children[0]);
this.setVolume(newVol);
},
// Update the volume control display
// Unique to these default controls. Uses borders to create the look of bars.
updateVolumeDisplay: function(){
var volNum = Math.ceil(this.audio.volume * 6);
for(var i=0; i<6; i++) {
if (i < volNum) {
_V_.addClass(this.volumeDisplay.children[i], "vjs-volume-level-on")
} else {
_V_.removeClass(this.volumeDisplay.children[i], "vjs-volume-level-on");
}
}
},
})
// Convenience Functions (mini library)
// Functions not specific to audio or AudioJS and could be replaced with a library like jQuery
var _V_ = {
addClass: function(element, classToAdd){
if (element.className.split(/\s+/).lastIndexOf(classToAdd) == -1) element.className = element.className == "" ? classToAdd : element.className + " " + classToAdd;
},
removeClass: function(element, classToRemove){
if (element.className.indexOf(classToRemove) == -1) return;
var classNames = element.className.split(/\s+/);
classNames.splice(classNames.lastIndexOf(classToRemove),1);
element.className = classNames.join(" ");
},
merge: function(obj1, obj2){
for (attrname in obj2) { obj1[attrname] = obj2[attrname]; }
return obj1;
},
createElement: function(tagName, attributes){
return _V_.merge(document.createElement(tagName), attributes);
},
// Attempt to block the ability to select text while dragging controls
blockTextSelection: function(){
document.body.focus();
document.onselectstart = function () { return false; };
},
// Turn off text selection blocking
unblockTextSelection: function(){
document.onselectstart = function () { return true; };
},
// Return seconds as MM:SS
formatTime: function(seconds) {
seconds = Math.round(seconds);
minutes = Math.floor(seconds / 60);
minutes = (minutes >= 10) ? minutes : "0" + minutes;
seconds = Math.floor(seconds % 60);
seconds = (seconds >= 10) ? seconds : "0" + seconds;
return minutes + ":" + seconds;
},
// Return the relative horizonal position of an event as a value from 0-1
getRelativePosition: function(x, relativeElement){
return Math.max(0, Math.min(1, (x - _V_.findPosX(relativeElement)) / relativeElement.offsetWidth));
},
// Get an objects position on the page
findPosX: function(obj) {
var curleft = obj.offsetLeft;
while(obj = obj.offsetParent) {
curleft += obj.offsetLeft;
}
return curleft;
},
getComputedStyleValue: function(element, style){
return window.getComputedStyle(element, null).getPropertyValue(style);
}
}
// Class Methods
// Add audio-js to any audio tag with the class
AudioJS.setup = function(options){
var audioCount = document.getElementsByTagName("audio").length
for (var i=0;i<audioCount;i++) {
audioTag = document.getElementsByTagName("audio")[i];
if (audioTag.className.indexOf("audio-js") != -1) {
options = (options) ? _V_.merge(options, { num: i }) : options;
audioJSPlayers[i] = new AudioJS(audioTag, options);
}
}
}
// Check if the browser supports audio.
AudioJS.browserSupportsAudio = function() {
return !!document.createElement('audio').canPlayType;
}
AudioJS.isIpad = function(){
return navigator.userAgent.match(/iPad/i) != null;
}
AudioJS.isIE = function(){
return !+"\v1";
}
// Allows for binding context to functions
// when using in event listeners and timeouts
Function.prototype.context = function(obj) {
var method = this
temp = function() {
return method.apply(obj, arguments)
}
return temp
}
شرکت دانش بنیان کنترل ماشین سرو تولیدکننده ماشین های CNC مخصوص تولید قطعات خودروئی و صنعتی مانند طبق پراید، طبق پرو 206 و قطعات جلوبندی انواع خودروها میباشد. تمام ماشین های CNC این شرکت دارای استانداردهای بالای بین المللی و ضمانت نامه های چند ساله و خدمات پشتیبانی و تامین قطعات یدکی به مدت ده سال میباشند.
با ما در تماس باشید
در هر مورد سوالی در مورد دستگاه ها دارید با ما مطرح نمایید.