Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/php
- <?php
- //print_r($_SERVER);exit;
- $module_names_stl = array();
- $module_names_db = array(); // only nominal names
- $module_names_dxf = array();
- $module_name = '';
- $module_name_nominal = '';
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
- $cwd = getcwd();
- if(sizeof($argv)==1){
- foreach(glob('*.csg.scad') as $scad_file_name){
- $scad_file_name_elements = pathinfo($scad_file_name);
- $cwd_elements = explode('/',$cwd);
- if(is_file($scad_file_name))
- process_scad_file($scad_file_name);
- }
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
- function process_scad_file($scad_file_name){
- $scad_file_name_elements = pathinfo($scad_file_name);
- // print_r($scad_file_name_elements);
- if($scad_file_name_elements['extension']!='scad')
- exit(print_usage());
- $scad_file_content = file($scad_file_name);
- $scad_name = str_replace('.','_',str_replace('.scad','',$scad_file_name));
- $stl_header_file_name = str_replace('.scad','.stl.h',$scad_file_name);
- $cwd = getcwd();
- $parent_pid = getmypid();
- $datestamp = date("Y-m-d");
- // EXTRACT MODULE NAMES ///////////////////////////////////////////////////
- foreach($scad_file_content as $l){
- if(preg_match('/^module[ ]+([a-zA-Z0-9_]+)/i',$l,$matches)){
- $module_name = $matches[1];
- if(preg_match('/_dxf/i',$module_name)){
- if(!in_array($module_name,$module_names_dxf))
- $module_names_dxf[] = $module_name;
- }
- else if( !preg_match('/no_stl/i',$l)
- && !in_array($module_name,$module_names_stl) )
- $module_names_stl[] = $module_name;
- else if( !preg_match('/_exploded$/i',$module_name) &&
- !preg_match('/no_db/',$l)){
- if(preg_match('/^CAM_/i',$module_name))
- $module_name_nominal = str_replace('CAM_','',$module_name);
- }
- }
- if(preg_match('/^[ \t]+module[ ]+([a-zA-Z0-9_]+)/i',$l,$matches)){
- $submodule_name = $matches[1];
- if(preg_match('/dxf/i',$l))
- $modules_submodules[$module_name][$submodule_name]['dxf'] = 1;
- if(preg_match('/stl/i',$l))
- $modules_submodules[$module_name][$submodule_name]['stl'] = 1;
- }
- }
- // MAKE STL DIRECTORY ///////////////////////////////////////////////////
- $stl_dir = $cwd . '/' . str_replace('.scad','.stl',$scad_file_name);
- $stl_dir_rel = str_replace('.scad','.stl',$scad_file_name);
- //$stl_dir_rel = '_stl_';
- //$stl_dir = $cwd . '/'. $stl_dir_rel;
- if(!is_dir($stl_dir))
- mkdir($stl_dir);
- if(is_dir($stl_dir))
- chmod($stl_dir,0755);
- // SAVE HEADER FILE /////////////////////////////////////////////////////
- $buffer = '//////////////////////////////////////////////////////'."\n";
- $buffer .= '//'."\n";
- foreach($module_names_stl as $module_name){
- $buffer .= '// '.$scad_name.'_stl("'.$module_name.'");'."\n";
- }
- $buffer .= '//'."\n";
- $buffer .= '//////////////////////////////////////////////////////'."\n";
- $buffer .= "\n\n";
- $buffer .= 'module '.$scad_name.'_stl (select="",c,scafold=false){'."\n\n";
- foreach($module_names_stl as $module_name){
- $buffer .= ' if(select=="'.$module_name.'")';
- $buffer .= ' '.$module_name."()children();\n";
- }
- $buffer .= "\n";
- foreach($module_names_stl as $module_name){
- $buffer .= ' module '.$module_name."(){\n";
- $buffer .= ' lt_ = dict('.preg_replace('/^_/','',$scad_name).'_transforms,parent_module(2),parent_module(0));'."\n";
- $buffer .= ' lt = lt_?lt_:translation([0,0,0]);'."\n";
- $buffer .= ' multmatrix(lt){'."\n";
- $buffer .= ' if(scafold==false)'."\n";
- $buffer .= ' color('."\n";
- $buffer .= ' c?c[0]:dict('.preg_replace('/^_/','',$scad_name).'_colors,parent_module(0))[0],'."\n";
- $buffer .= ' c?c[1]:dict('.preg_replace('/^_/','',$scad_name).'_colors,parent_module(0))[1])'."\n";
- $buffer .= ' import("'.$stl_dir_rel.'/'.$module_name.'.stl", convexity=3);'."\n";
- $buffer .= ' children();'."\n";
- $buffer .= ' }'."\n";
- $buffer .= ' }'."\n";
- }
- $buffer .= "\n}\n";
- file_put_contents($stl_header_file_name,$buffer);
- chmod($stl_header_file_name,0666);
- // EXPORT INDIVIDUAL STL FILES ////////////////////////////////////////
- foreach($module_names_stl as $module_name){
- $pid = pcntl_fork();
- if($pid==-1) die('ERROR: could not fork');
- else if($pid){}
- else{
- chdir($stl_dir);
- $stl_file_name = $module_name.'.stl';
- if(!is_file($stl_file_name)){
- echo 'stl: '.$module_name."\n";
- $tmp_file_name = $module_name.'.tmp.scad';
- $tmp_file_content = "use <../".$scad_file_name.">\n";
- $tmp_file_content .= $module_name."();\n";
- file_put_contents($tmp_file_name,$tmp_file_content);
- $cmd = "openscad -q -o $stl_file_name $tmp_file_name";
- //echo $cmd."\n";
- exec($cmd);
- if(is_file($stl_file_name))
- chmod($stl_file_name,0666);
- unlink($tmp_file_name);
- }
- exit;
- }
- }
- // EXPORT INDIVIDUAL STL FILES FROM SUBMODULES ////////////////////////////////////////
- foreach($modules_submodules as $root_module_name=>$submodules)
- foreach($submodules as $submodule_name=>$flags)
- if($flags['stl']){
- $module_name = $root_module_name.'.'.$submodule_name;
- $pid = pcntl_fork();
- if($pid==-1) die('ERROR: could not fork');
- else if($pid){}
- else{
- chdir($stl_dir);
- $stl_file_name = $module_name.'.stl';
- if(!is_file($stl_file_name)){
- echo 'stl: '.$module_name."\n";
- $tmp_file_name = $module_name.'.tmp.scad';
- $tmp_file_content = "use <../".$scad_file_name.">\n";
- $tmp_file_content .= $root_module_name.'(select="'.$submodule_name.'");'."\n";
- file_put_contents($tmp_file_name,$tmp_file_content);
- $cmd = "openscad -q -o $stl_file_name $tmp_file_name";
- //echo $cmd."\n";
- exec($cmd);
- if(is_file($stl_file_name))
- chmod($stl_file_name,0666);
- unlink($tmp_file_name);
- }
- exit;
- }
- }
- // MAKE DXF DIRECTORY ///////////////////////////////////////////////////
- $dxf_dir = $cwd . '/' . str_replace('.scad','.dxf',$scad_file_name);
- //$dxf_dir = $cwd . '/_dxf_';
- // EXPORT INDIVIDUAL DXF FILES ////////////////////////////////////////
- foreach($module_names_dxf as $module_name){
- $pid = pcntl_fork();
- if($pid==-1){
- die('ERROR: could not fork');
- }
- else if($pid){
- //pcntl_wait($status);
- }
- else{
- if(!is_dir($dxf_dir))
- mkdir($dxf_dir);
- if(is_dir($dxf_dir))
- chmod($dxf_dir,0755);
- chdir($dxf_dir);
- $dxf_file_name = $module_name.'.dxf';
- if(!is_file($dxf_file_name)){
- echo 'dxf: '.$module_name."\n";
- $tmp_file_name = $module_name.'.tmp.scad';
- $tmp_file_content = "use <../".$scad_file_name.">\n";
- $tmp_file_content .= 'projection()'.$module_name."();\n";
- file_put_contents($tmp_file_name,$tmp_file_content);
- $cmd = "openscad -q -o $dxf_file_name $tmp_file_name";
- //echo $cmd."\n";
- exec($cmd);
- if(is_file($dxf_file_name))
- chmod($stl_file_name,0666);
- unlink($tmp_file_name);
- }
- break;
- }
- }
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
- function print_usage(){
- echo "USAGE: cscad \n";
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
- function deref_path($file_name){
- if(is_link($file_name))
- return(deref_path(readlink($file_name)));
- else
- return($file_name);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement