#!/usr/bin/perl #line 16 use Math::Complex; use Math::Trig; #### #### All Code by Steve Michel #### $UPI = 1016; #### 1016 plt units per inch $VSspeed = "VS1;"; $StartOld = "temp"; #$DestOld = "temp"; $DestOld = "0,0;"; $OBJFile = $ARGV[0]; print ("Open OBJECT " . $OBJFile . "\n" ); open (FILEHANDLE, $OBJFile); while () { push(@lines,$_) } #print join("\n", @lines); $listNum = @lines; for ($Loop = 0; $Loop <= $listNum; $Loop++){ chomp ($lines[$Loop]); } ############ ############ # currently, this script evals for # # # Vertex list # and # # Face list # # instead should eval $lines[$Loop] @ split at " " [0] (first element for # # v vertex # l line # f face # # if = v { vertexline[$vCount] = $lines[$Loop]; $vCount++ # # if = f { faceline[$fCount] = $lines[$Loop]; $fCount++ # # if = l { lineline[$lCount] = $lines[$Loop]; $lCount++ # $NewestVeeCount = 1; $NewestEffCount =1; $NewestEllCount =1; #for ($Loop = 0; $Loop <= $listNum; $Loop++){ # if ($lines[$Loop] eq "# Vertex list"){ # $StartVeeCount = $Loop +2; # } # if ($lines[$Loop] eq "# Face list"){ # $EndVeeCount = $Loop-2; # $StartFaceCount = $Loop +2; # } # if ($lines[$Loop+2] eq "usemtl Default"){ # $StartFaceCount = $Loop +3; # } # if ($lines[$Loop] eq "# End of file"){ # $EndFaceCount = $Loop-2; # } #} #print ("Starting Vertex... " . $lines[$StartVeeCount] . "\n" ); #print ("Ending Vertex... " . $lines[$EndVeeCount] . "\n" ); $NewestVeeCount = 0; $NewestEffCount =0; $NewestEllCount =0; for ($Loop = 0; $Loop <= $listNum; $Loop++){ @LineEval_split=split(/ /,$lines[$Loop]); $EvalLine = $LineEval_split[0]; #print $EvalLine; #print "\n"; if ($EvalLine eq "v"){ $NewestVeeCount = $NewestVeeCount + 1; $VertexLine[$NewestVeeCount] = $lines[$Loop]; print $VertexLine[$NewestVeeCount]; print "\n"; } if ($EvalLine eq "f"){ $NewestEffCount = $NewestEffCount + 1; $FaceLine[$NewestEffCount] = $lines[$Loop]; print $FaceLine[$NewestEffCount]; print "\n"; } if ($EvalLine eq "l"){ $NewestEllCount = $NewestEllCount + 1; $LineLine[$NewestEllCount] = $lines[$Loop]; print $LineLine[$NewestEllCount]; print "\n"; } } $TotalV = $NewestVeeCount; print "total Vertex count "; print $TotalV; print "\n"; print "\n"; $TotalL = $NewestEllCount; print "total Line count "; print $TotalL; print "\n"; print "\n"; $TotalF = $NewestEffCount; print "total Face count "; print $TotalF; print "\n"; print "\n"; for ($Loop = 1; $Loop <= $TotalV; $Loop++){ print $Loop; print " "; @Vertex_split=split(/ /,$VertexLine[$Loop]); $X[$Loop] = $Vertex_split[1]; $Y[$Loop] = $Vertex_split[2]; $Z[$Loop] = $Vertex_split[3]; print $X[$Loop]; print " , "; print $Y[$Loop]; print " , "; print $Z[$Loop]; print "\n"; } print "\n"; for ($Loop = 1; $Loop <= $TotalF; $Loop++){ @Face_split=split(/ /,$FaceLine[$Loop]); $Face_splitNum[$Loop] = @Face_split - 1; $TotalFaceLoop = $Face_splitNum[$Loop]; print $Face_splitNum[$Loop]; print "\n"; $UseLoop = $TotalFaceLoop; for ($SubLoop = 1; $SubLoop <= $TotalFaceLoop; $SubLoop++){ $PointOrder[$Loop][$SubLoop] = $Face_split[$UseLoop]; print $PointOrder[$Loop][$SubLoop]; print " "; $UseLoop = $UseLoop -1; } $SubLoop ++; $PointOrder[$Loop][$SubLoop] = $PointOrder[$Loop][1]; print $PointOrder[$Loop][$SubLoop]; print " "; print "\n"; } print "we are here"; print "\n"; for ($Loop = 1; $Loop <= $TotalL; $Loop++){ @LineLine_split=split(/ /,$LineLine[$Loop]); $FromLinePoint[$Loop]=$LineLine_split[1]; $DestLinePoint[$Loop]=$LineLine_split[2]; # print $LineLine_split[1]; # print " , "; # print $LineLine_split[2]; # print "\n"; print $FromLinePoint[$Loop]; print " , "; print $DestLinePoint[$Loop]; print "\n"; } open (FILEOUT, ">" . "LW_OBJ_2_DXF_test.dxf"); print FILEOUT ("0" . "\n"); print FILEOUT ("SECTION" . "\n"); print FILEOUT ("2" . "\n"); print FILEOUT ("HEADER" . "\n"); print FILEOUT ("999" . "\n"); print FILEOUT ("DXF File Generated by LightWave 3D(TM)" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("ENDSEC" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("SECTION" . "\n"); print FILEOUT ("2" . "\n"); print FILEOUT ("TABLES" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("ENDSEC" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("SECTION" . "\n"); print FILEOUT ("2" . "\n"); print FILEOUT ("BLOCKS" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("ENDSEC" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("SECTION" . "\n"); print FILEOUT ("2" . "\n"); print FILEOUT ("ENTITIES" . "\n"); print FILEOUT ("0" . "\n"); for ($Loop = 1; $Loop <= $TotalF; $Loop++){ $refNum = $Face_splitNum[$Loop]; for ($SubLoop = 1; $SubLoop <= $refNum; $SubLoop++){ $OrderNum = $PointOrder[$Loop][$SubLoop]; $OrderNum2 = $PointOrder[$Loop][$SubLoop+1]; if ($SubLoop == $refNum){ $OrderNum2 = $PointOrder[$Loop][1]; } print FILEOUT ("LINE" . "\n"); print FILEOUT ("8" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("70" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("10" . "\n"); print $PointOrder[$Loop][$SubLoop]; print " "; print $refNum; print " "; print $SubLoop; print " "; print $OrderNum2; print "\n"; print FILEOUT ($X[$OrderNum] . "\n"); print FILEOUT ("20" . "\n"); print FILEOUT ($Y[$OrderNum] . "\n"); print FILEOUT ("30" . "\n"); print FILEOUT ($Z[$OrderNum] . "\n"); print FILEOUT ("11" . "\n"); print FILEOUT ($X[$OrderNum2] . "\n"); print FILEOUT ("21" . "\n"); print FILEOUT ($Y[$OrderNum2] . "\n"); print FILEOUT ("31" . "\n"); print FILEOUT ($Z[$OrderNum2] . "\n"); print FILEOUT ("0" . "\n"); } } for ($Loop = 1; $Loop <= $TotalL; $Loop++){ $UseStart = $FromLinePoint[$Loop]; $UseDest = $DestLinePoint[$Loop]; print FILEOUT ("LINE" . "\n"); print FILEOUT ("8" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("70" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("10" . "\n"); print FILEOUT ($X[$UseStart] . "\n"); print FILEOUT ("20" . "\n"); print FILEOUT ($Y[$UseStart] . "\n"); print FILEOUT ("30" . "\n"); print FILEOUT ($Z[$UseStart] . "\n"); print FILEOUT ("11" . "\n"); print FILEOUT ($X[$UseDest] . "\n"); print FILEOUT ("21" . "\n"); print FILEOUT ($Y[$UseDest] . "\n"); print FILEOUT ("31" . "\n"); print FILEOUT ($Z[$UseDest] . "\n"); print FILEOUT ("0" . "\n"); } print FILEOUT ("ENDSEC" . "\n"); print FILEOUT ("0" . "\n"); print FILEOUT ("EOF" . "\n"); __END__ :endofperl