Page 1 of 1

Merge all files in a directory from command line

Posted: Thu Sep 10, 2015 7:29 pm
by max72
Subject says all.
I would like to be able to run from command line a "merge all".
I would like to know if there is a simple way to do that.

Thanks in advance,
Massimo

Re: Merge all files in a directory from command line - and scaling intensity

Posted: Thu Sep 10, 2015 10:25 pm
by max72
A little update:
I was able to batch merge the files using the following commands (in a .bat file):

Code: Select all

echo|set /p= "C:\myccpath\cloudcompare.exe -SILENT -C_EXPORT_FMT E57 " > myrunfile.bat
for %%f in (%*) DO echo|set /p=-O  %%f >>myrunfile.bat
echo -MERGE_CLOUDS >>myrunfile.bat
myrunfile.bat

Drag and dropping the files in the bat file does the magic (change the ccpath to yours..).

Now I would also like to scale the intensity (0-1 range) to 0-65535. I tried the commands form the command line but I'm probably missing somthing.
Any suggestion?

Thanks in advance,
Massimo

Re: Merge all files in a directory from command line

Posted: Fri Sep 11, 2015 1:48 pm
by daniel
Thanks for the tip.

And for the second question, sadly there's no command for this right now. We will have to add this to the TODO list (we can probably add a new sub-option to the SF_ARITHMETIC option).

Re: Merge all files in a directory from command line

Posted: Fri Sep 11, 2015 5:47 pm
by max72
Thanks.
I have Faro files. They have the intensity range between 0 and 1 but I would like to share them using the laz format, so I have to scale the intensity.
At the moment I'm using Arena to "translate" them, but if I don't need to use the cloud in Arena a direct approach from the command line would be nicer and faster.
Anyway I really enjoy the power of the command line.
Thanks.
Massimo

Re: Merge all files in a directory from command line

Posted: Fri Sep 18, 2015 7:28 am
by mfloris
If your cloud is an ASCII file you can easily do that with a VBScript

The following is an example of a script that reads all the *.asc files in a directory and creates a copy of the cloud skipping all the "NaN" lines, which are not supported by CloudCompare (the ShapeDrive 3D scanner outputs "NaN" for every pixel of its sensor that doesn't return a value)

Instead of the <<If Not point "Nan" Then >> etc. block you should split the string into a vector, access the element that corresponds to the intensity and multiply it by 65535 if I understood correctly what you need to do.

Hope it helps

Code: Select all


Dim fso, folder, files, strPath, strTxtFilName, point, outputFile

Set fso = CreateObject("Scripting.FileSystemObject")

Set objShell = CreateObject("Wscript.Shell")

strPath = objShell.CurrentDirectory &"\"

Set folder = fso.GetFolder(strPath)

Set files = folder.Files

For each folderIdx In files
    
	extension = fso.GetExtensionName(folderIdx.Name)

	If extension = "asc" Then
		
		strTxtFilName = fso.getbasename(folderIdx.Name)

		If not InStr(1, folderIdx.Name, "_NaN_parsed") > 0 Then
		
			Set listFile = fso.OpenTextFile(strPath & folderIdx.Name)
			
			Set outputFile = fso.CreateTextFile(strPath & strTxtFilName & "_NaN_parsed.asc", True)
		
			do while not listFile.AtEndOfStream 
		
				point = listFile.ReadLine()
		
				If not point = "NaN" Then
		
					outputFile.WriteLine(point)
		
				End If
			
			loop
			
			outputFile.Close
		
		End If
		
	End If
	
Next


Re: Merge all files in a directory from command line

Posted: Wed Sep 30, 2015 7:54 pm
by max72
Thanks!
I'm wondering if it would be possible to create a small wiki page with this kind of short scripts, that save so much time..
Massimo