Community
PowerMill Forum
Welcome to Autodesk’s PowerMill Forums. Share your knowledge, ask questions, and explore popular PowerMill topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

PowerMill 2025

39 REPLIES 39
Reply
Message 1 of 40
lawrence.halls83P7Q
7404 Views, 39 Replies

PowerMill 2025

lawrence.halls83P7Q
Autodesk
Autodesk

PowerMill 2025 and the PowerMill 2025.0.1 Hot Fix were released today. Over the next few weeks, you will see PowerMill 2025 and PowerMill 2025.0.1 Hot Fix availability in your account. Please check your Autodesk Account or Autodesk Access to see when your entitlement is available for download.

 

When you install PowerMill 2025, the PowerMill 2025.0.1 Hot Fix should automatically install with it. Alternatively, you can download the PowerMill 2025.0.1 Hot Fix from the Product Updates area of your Autodesk Account. To confirm that you've successfully installed the PowerMill 2025.0.1 Hot Fix, select the  ?  > About  menu option in your PowerMill 2025 software and check that you're working in Version: 2025.0.1.2025012.

 

In the meantime, you can review the Help and Release Notes to see what is being delivered in PowerMill 2025 and the PowerMill 2025.0.1 Hot Fix.

 

Thank you


Lawrence Halls
QA Engineer

0 Likes

PowerMill 2025

PowerMill 2025 and the PowerMill 2025.0.1 Hot Fix were released today. Over the next few weeks, you will see PowerMill 2025 and PowerMill 2025.0.1 Hot Fix availability in your account. Please check your Autodesk Account or Autodesk Access to see when your entitlement is available for download.

 

When you install PowerMill 2025, the PowerMill 2025.0.1 Hot Fix should automatically install with it. Alternatively, you can download the PowerMill 2025.0.1 Hot Fix from the Product Updates area of your Autodesk Account. To confirm that you've successfully installed the PowerMill 2025.0.1 Hot Fix, select the  ?  > About  menu option in your PowerMill 2025 software and check that you're working in Version: 2025.0.1.2025012.

 

In the meantime, you can review the Help and Release Notes to see what is being delivered in PowerMill 2025 and the PowerMill 2025.0.1 Hot Fix.

 

Thank you


Lawrence Halls
QA Engineer

39 REPLIES 39
Message 21 of 40
evo80
in reply to: Sean571

evo80
Collaborator
Collaborator

Only Toolpaths though Sean

0 Likes

Only Toolpaths though Sean

Message 22 of 40
nguyenthinhvt95
in reply to: Sean571

nguyenthinhvt95
Advocate
Advocate

@Sean571 You are right, we can use Group to export multiple toolpaths. 

0 Likes

@Sean571 You are right, we can use Group to export multiple toolpaths. 

Message 23 of 40
evo80
in reply to: icse

evo80
Collaborator
Collaborator

Hi @icse,

I'd like to add models to the Export macro but I get an error at line 146, could you help?

Appreciated!

if length(project_pathname(0)) == 0 OR project_modified() == 1 {
	message warn 'Save First'
	return
}

string $path = "C:/Temp/EntityExport"

if dir_exists($path) {
	bool $query = 0
	$query = query "Replace existing Entities?"
	if $query {
		delete directory $path
	} else {
		return
	}
}
string list $inputTypes = {'toolpath','tool','boundary','pattern','featureset','workplane','model'}
int list $indexer = input choice multiple $inputTypes 'Choose Type of Entity to Export'


entity list $entitiesToExport = {}

foreach $index in $indexer {
	
	entity list $entities = {}
	
	SWITCH $index {	
		Case 0
			$entities = input entity multiple toolpath 'Select Toolpaths to Export'
			Break
		Case 1
			$entities = input entity multiple tool 'Select Tools to Export'
			Break
		Case 2
			$entities = input entity multiple boundary 'Select Boundaries to Export'
			Break
		Case 3
			$entities = input entity multiple pattern 'Select Patterns to Export'
			Break
		Case 4
			$entities = input entity multiple featureset 'Select Featuresets to Export'
			Break
		Case 5
			$entities = input entity multiple workplane 'Select Workplanes to Export'
			Break
		Case 6
			$entities = input entity multiple model 'Select Models to Export'
			Break
		DEFAULT
			return
			BREAK
		}		
	foreach $ent in $entities {
		int $i = add_last($entitiesToExport, $ent)
	}
}


mkdir $path

//Active entity file
string $activeEntityFilePath = $path + '/active_entity.pmldat'
string $op = '0 1 # Active Entities (DO NOT EDIT!)'

if file_exists($activeEntityFilePath) {
	delete File $activeEntityFilePath
}
file open $activeEntityFilePath for write as output
file write $op to output
file close output

int $entCount = 0
string $content = ''
foreach $e in $entitiesToExport {

	if entity_exists($e) {	
		
		if $e.RootType == 'toolpath' {
		
			string $eHash = "x" + $e.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntToolpath '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
		
			$eHash = "x" + $e.ID + ".pmlgeom"
			$e_full = project_pathname(0) + "/" + $eHash
			$path_full = $path + "/" + $eHash
			copy file $e_full $path_full
			
			if entity_exists($e.Boundary) {
				$eHash = "x" + $e.Boundary.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntBoundary '" + $e.Boundary.Name + "'" + CRLF
				}				
				copy file $e_full $path_full
			}
			if entity_exists($e.Pattern) {
				$eHash = "x" + $e.Pattern.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntPattern '" + $e.Pattern.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Tool) {
				$eHash = "x" + $e.Tool.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntTool '" + $e.Tool.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Workplane) {
				$eHash = "x" + $e.Workplane.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntWorkplane '" + $e.Workplane.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Featureset) {
				$eHash = "x" + $e.Featureset.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntFeature '" + $e.Featureset.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			}
			if entity_exists($e.Model) {
				$eHash = "x" + $e.Model.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntModel '" + $e.Model.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			continue
		}					
		if $e.RootType == 'boundary' {
			string $eHash = "x" + $e.Boundary.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntBoundary '" + $e.Name + "'" + CRLF
			}				
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'pattern' {
			string $eHash = "x" + $e.Pattern.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntPattern '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'tool' {
			string $eHash = "x" + $e.Tool.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntTool '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'workplane' {
			string $eHash = "x" + $e.Workplane.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntWorkplane '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'featureset' {
			string $eHash = "x" + $e.Featureset.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntFeature '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'model' {
			string $eHash = "x" + $e.model.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntModel '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		
	}
}


if file_exists($activeEntityFilePath) {
	delete File $activeEntityFilePath
}
file open $activeEntityFilePath for write as output
file write $op to output
file close output




string $proj_name = "\" + project_pathname(1) + ".pmlprj"
string $path_full = project_pathname(0) + $proj_name
file open $path_full for read as input

string $line1 = ''
string $line2 = ''
string $line3 = ''

file read $line1 from input
file read $line2 from input
file read $line3 from input

file close input

$line1 = $entCount + substring($line1, position($line1, ' ', 0), length($line1))
string $dest_path_full = $path + $proj_name
file open $dest_path_full FOR WRITE AS output
file write $line1 to "output"
file write $line2 to "output"
file write $line3 to "output"
file write $content to "output"
file close output

 

0 Likes

Hi @icse,

I'd like to add models to the Export macro but I get an error at line 146, could you help?

Appreciated!

if length(project_pathname(0)) == 0 OR project_modified() == 1 {
	message warn 'Save First'
	return
}

string $path = "C:/Temp/EntityExport"

if dir_exists($path) {
	bool $query = 0
	$query = query "Replace existing Entities?"
	if $query {
		delete directory $path
	} else {
		return
	}
}
string list $inputTypes = {'toolpath','tool','boundary','pattern','featureset','workplane','model'}
int list $indexer = input choice multiple $inputTypes 'Choose Type of Entity to Export'


entity list $entitiesToExport = {}

foreach $index in $indexer {
	
	entity list $entities = {}
	
	SWITCH $index {	
		Case 0
			$entities = input entity multiple toolpath 'Select Toolpaths to Export'
			Break
		Case 1
			$entities = input entity multiple tool 'Select Tools to Export'
			Break
		Case 2
			$entities = input entity multiple boundary 'Select Boundaries to Export'
			Break
		Case 3
			$entities = input entity multiple pattern 'Select Patterns to Export'
			Break
		Case 4
			$entities = input entity multiple featureset 'Select Featuresets to Export'
			Break
		Case 5
			$entities = input entity multiple workplane 'Select Workplanes to Export'
			Break
		Case 6
			$entities = input entity multiple model 'Select Models to Export'
			Break
		DEFAULT
			return
			BREAK
		}		
	foreach $ent in $entities {
		int $i = add_last($entitiesToExport, $ent)
	}
}


mkdir $path

//Active entity file
string $activeEntityFilePath = $path + '/active_entity.pmldat'
string $op = '0 1 # Active Entities (DO NOT EDIT!)'

if file_exists($activeEntityFilePath) {
	delete File $activeEntityFilePath
}
file open $activeEntityFilePath for write as output
file write $op to output
file close output

int $entCount = 0
string $content = ''
foreach $e in $entitiesToExport {

	if entity_exists($e) {	
		
		if $e.RootType == 'toolpath' {
		
			string $eHash = "x" + $e.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntToolpath '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
		
			$eHash = "x" + $e.ID + ".pmlgeom"
			$e_full = project_pathname(0) + "/" + $eHash
			$path_full = $path + "/" + $eHash
			copy file $e_full $path_full
			
			if entity_exists($e.Boundary) {
				$eHash = "x" + $e.Boundary.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntBoundary '" + $e.Boundary.Name + "'" + CRLF
				}				
				copy file $e_full $path_full
			}
			if entity_exists($e.Pattern) {
				$eHash = "x" + $e.Pattern.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntPattern '" + $e.Pattern.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Tool) {
				$eHash = "x" + $e.Tool.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntTool '" + $e.Tool.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Workplane) {
				$eHash = "x" + $e.Workplane.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntWorkplane '" + $e.Workplane.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Featureset) {
				$eHash = "x" + $e.Featureset.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntFeature '" + $e.Featureset.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			}
			if entity_exists($e.Model) {
				$eHash = "x" + $e.Model.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntModel '" + $e.Model.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			continue
		}					
		if $e.RootType == 'boundary' {
			string $eHash = "x" + $e.Boundary.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntBoundary '" + $e.Name + "'" + CRLF
			}				
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'pattern' {
			string $eHash = "x" + $e.Pattern.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntPattern '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'tool' {
			string $eHash = "x" + $e.Tool.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntTool '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'workplane' {
			string $eHash = "x" + $e.Workplane.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntWorkplane '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'featureset' {
			string $eHash = "x" + $e.Featureset.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntFeature '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'model' {
			string $eHash = "x" + $e.model.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntModel '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		
	}
}


if file_exists($activeEntityFilePath) {
	delete File $activeEntityFilePath
}
file open $activeEntityFilePath for write as output
file write $op to output
file close output




string $proj_name = "\" + project_pathname(1) + ".pmlprj"
string $path_full = project_pathname(0) + $proj_name
file open $path_full for read as input

string $line1 = ''
string $line2 = ''
string $line3 = ''

file read $line1 from input
file read $line2 from input
file read $line3 from input

file close input

$line1 = $entCount + substring($line1, position($line1, ' ', 0), length($line1))
string $dest_path_full = $path + $proj_name
file open $dest_path_full FOR WRITE AS output
file write $line1 to "output"
file write $line2 to "output"
file write $line3 to "output"
file write $content to "output"
file close output

 

Message 24 of 40
icse
in reply to: evo80

icse
Collaborator
Collaborator

You got one } to much and i think you also need to copy .pmlmz file:

 

 

if length(project_pathname(0)) == 0 OR project_modified() == 1 {
	message warn 'Save First'
	return
}

string $path = "C:/Temp/EntityExport"

if dir_exists($path) {
	bool $query = 0
	$query = query "Replace existing Entities?"
	if $query {
		delete directory $path
	} else {
		return
	}
}
string list $inputTypes = {'toolpath','tool','boundary','pattern','featureset','workplane','model'}
int list $indexer = input choice multiple $inputTypes 'Choose Type of Entity to Export'


entity list $entitiesToExport = {}

foreach $index in $indexer {
	
	entity list $entities = {}
	
	SWITCH $index {	
		Case 0
			$entities = input entity multiple toolpath 'Select Toolpaths to Export'
			Break
		Case 1
			$entities = input entity multiple tool 'Select Tools to Export'
			Break
		Case 2
			$entities = input entity multiple boundary 'Select Boundaries to Export'
			Break
		Case 3
			$entities = input entity multiple pattern 'Select Patterns to Export'
			Break
		Case 4
			$entities = input entity multiple featureset 'Select Featuresets to Export'
			Break
		Case 5
			$entities = input entity multiple workplane 'Select Workplanes to Export'
			Break
		Case 6
			$entities = input entity multiple model 'Select Models to Export'
			Break
		DEFAULT
			return
			BREAK
		}		
	foreach $ent in $entities {
		int $i = add_last($entitiesToExport, $ent)
	}
}


mkdir $path

//Active entity file
string $activeEntityFilePath = $path + '/active_entity.pmldat'
string $op = '0 1 # Active Entities (DO NOT EDIT!)'

if file_exists($activeEntityFilePath) {
	delete File $activeEntityFilePath
}
file open $activeEntityFilePath for write as output
file write $op to output
file close output

int $entCount = 0
string $content = ''
foreach $e in $entitiesToExport {

	if entity_exists($e) {	
		
		if $e.RootType == 'toolpath' {
		
			string $eHash = "x" + $e.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntToolpath '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
		
			$eHash = "x" + $e.ID + ".pmlgeom"
			$e_full = project_pathname(0) + "/" + $eHash
			$path_full = $path + "/" + $eHash
			copy file $e_full $path_full
			
			if entity_exists($e.Boundary) {
				$eHash = "x" + $e.Boundary.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntBoundary '" + $e.Boundary.Name + "'" + CRLF
				}				
				copy file $e_full $path_full
			}
			if entity_exists($e.Pattern) {
				$eHash = "x" + $e.Pattern.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntPattern '" + $e.Pattern.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Tool) {
				$eHash = "x" + $e.Tool.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntTool '" + $e.Tool.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Workplane) {
				$eHash = "x" + $e.Workplane.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntWorkplane '" + $e.Workplane.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Featureset) {
				$eHash = "x" + $e.Featureset.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntFeature '" + $e.Featureset.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}			
			if entity_exists($e.Model) {
				$eHash = "x" + $e.Model.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntModel '" + $e.Model.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			continue
		}					
		if $e.RootType == 'boundary' {
			string $eHash = "x" + $e.Boundary.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntBoundary '" + $e.Name + "'" + CRLF
			}				
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'pattern' {
			string $eHash = "x" + $e.Pattern.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntPattern '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'tool' {
			string $eHash = "x" + $e.Tool.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntTool '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'workplane' {
			string $eHash = "x" + $e.Workplane.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntWorkplane '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'featureset' {
			string $eHash = "x" + $e.Featureset.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntFeature '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'model' {
			string $eHash = "x" + $e.model.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntModel '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			
			$eHash = "x" + $e.model.ID + ".pmlmz"
			$e_full = project_pathname(0) + "/" + $eHash
			$path_full = $path + "/" + $eHash
			
			copy file $e_full $path_full
			
			continue
		}
		
	}
}


if file_exists($activeEntityFilePath) {
	delete File $activeEntityFilePath
}
file open $activeEntityFilePath for write as output
file write $op to output
file close output




string $proj_name = "\" + project_pathname(1) + ".pmlprj"
string $path_full = project_pathname(0) + $proj_name
file open $path_full for read as input

string $line1 = ''
string $line2 = ''
string $line3 = ''

file read $line1 from input
file read $line2 from input
file read $line3 from input

file close input

$line1 = $entCount + substring($line1, position($line1, ' ', 0), length($line1))
string $dest_path_full = $path + $proj_name
file open $dest_path_full FOR WRITE AS output
file write $line1 to "output"
file write $line2 to "output"
file write $line3 to "output"
file write $content to "output"
file close output

 

We probably should open a new post insted of spamming here 😛

 

You got one } to much and i think you also need to copy .pmlmz file:

 

 

if length(project_pathname(0)) == 0 OR project_modified() == 1 {
	message warn 'Save First'
	return
}

string $path = "C:/Temp/EntityExport"

if dir_exists($path) {
	bool $query = 0
	$query = query "Replace existing Entities?"
	if $query {
		delete directory $path
	} else {
		return
	}
}
string list $inputTypes = {'toolpath','tool','boundary','pattern','featureset','workplane','model'}
int list $indexer = input choice multiple $inputTypes 'Choose Type of Entity to Export'


entity list $entitiesToExport = {}

foreach $index in $indexer {
	
	entity list $entities = {}
	
	SWITCH $index {	
		Case 0
			$entities = input entity multiple toolpath 'Select Toolpaths to Export'
			Break
		Case 1
			$entities = input entity multiple tool 'Select Tools to Export'
			Break
		Case 2
			$entities = input entity multiple boundary 'Select Boundaries to Export'
			Break
		Case 3
			$entities = input entity multiple pattern 'Select Patterns to Export'
			Break
		Case 4
			$entities = input entity multiple featureset 'Select Featuresets to Export'
			Break
		Case 5
			$entities = input entity multiple workplane 'Select Workplanes to Export'
			Break
		Case 6
			$entities = input entity multiple model 'Select Models to Export'
			Break
		DEFAULT
			return
			BREAK
		}		
	foreach $ent in $entities {
		int $i = add_last($entitiesToExport, $ent)
	}
}


mkdir $path

//Active entity file
string $activeEntityFilePath = $path + '/active_entity.pmldat'
string $op = '0 1 # Active Entities (DO NOT EDIT!)'

if file_exists($activeEntityFilePath) {
	delete File $activeEntityFilePath
}
file open $activeEntityFilePath for write as output
file write $op to output
file close output

int $entCount = 0
string $content = ''
foreach $e in $entitiesToExport {

	if entity_exists($e) {	
		
		if $e.RootType == 'toolpath' {
		
			string $eHash = "x" + $e.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntToolpath '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
		
			$eHash = "x" + $e.ID + ".pmlgeom"
			$e_full = project_pathname(0) + "/" + $eHash
			$path_full = $path + "/" + $eHash
			copy file $e_full $path_full
			
			if entity_exists($e.Boundary) {
				$eHash = "x" + $e.Boundary.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntBoundary '" + $e.Boundary.Name + "'" + CRLF
				}				
				copy file $e_full $path_full
			}
			if entity_exists($e.Pattern) {
				$eHash = "x" + $e.Pattern.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntPattern '" + $e.Pattern.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Tool) {
				$eHash = "x" + $e.Tool.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntTool '" + $e.Tool.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Workplane) {
				$eHash = "x" + $e.Workplane.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntWorkplane '" + $e.Workplane.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			if entity_exists($e.Featureset) {
				$eHash = "x" + $e.Featureset.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntFeature '" + $e.Featureset.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}			
			if entity_exists($e.Model) {
				$eHash = "x" + $e.Model.ID + ".pmlent"
				$e_full = project_pathname(0) + "/" + $eHash
				$path_full = $path + "/" + $eHash
				if not file_exists($path_full) {
					$entCount = $entCount + 1
					$content = $content + $eHash + " pmlEntModel '" + $e.Model.Name + "'" + CRLF
				}
				copy file $e_full $path_full
			}
			continue
		}					
		if $e.RootType == 'boundary' {
			string $eHash = "x" + $e.Boundary.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntBoundary '" + $e.Name + "'" + CRLF
			}				
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'pattern' {
			string $eHash = "x" + $e.Pattern.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntPattern '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'tool' {
			string $eHash = "x" + $e.Tool.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntTool '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'workplane' {
			string $eHash = "x" + $e.Workplane.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntWorkplane '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'featureset' {
			string $eHash = "x" + $e.Featureset.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntFeature '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			continue
		}
		if $e.RootType == 'model' {
			string $eHash = "x" + $e.model.ID + ".pmlent"
			string $e_full = project_pathname(0) + "/" + $eHash
			string $path_full = $path + "/" + $eHash
			if not file_exists($path_full) {
				$entCount = $entCount + 1
				$content = $content + $eHash + " pmlEntModel '" + $e.Name + "'" + CRLF
			}
			copy file $e_full $path_full
			
			$eHash = "x" + $e.model.ID + ".pmlmz"
			$e_full = project_pathname(0) + "/" + $eHash
			$path_full = $path + "/" + $eHash
			
			copy file $e_full $path_full
			
			continue
		}
		
	}
}


if file_exists($activeEntityFilePath) {
	delete File $activeEntityFilePath
}
file open $activeEntityFilePath for write as output
file write $op to output
file close output




string $proj_name = "\" + project_pathname(1) + ".pmlprj"
string $path_full = project_pathname(0) + $proj_name
file open $path_full for read as input

string $line1 = ''
string $line2 = ''
string $line3 = ''

file read $line1 from input
file read $line2 from input
file read $line3 from input

file close input

$line1 = $entCount + substring($line1, position($line1, ' ', 0), length($line1))
string $dest_path_full = $path + $proj_name
file open $dest_path_full FOR WRITE AS output
file write $line1 to "output"
file write $line2 to "output"
file write $line3 to "output"
file write $content to "output"
file close output

 

We probably should open a new post insted of spamming here 😛

 

Message 25 of 40
iamcdn79
in reply to: ken.poyner

iamcdn79
Advisor
Advisor

I've noticed a bug when pasting a toolpath and renumbering the pasted toolpath Powermill seems to reorder single-character toolpath names from the toolpath list. 

 

 

 

 


Intel Core i9 13900KF CPU
128 GB Kingston Beast DDR4 SDRAM
PNY RTX A2000 6GB Video Card
WD 1 TB SSD Hard Drive
Windows 11 Pro

I've noticed a bug when pasting a toolpath and renumbering the pasted toolpath Powermill seems to reorder single-character toolpath names from the toolpath list. 

 

 

 

 


Intel Core i9 13900KF CPU
128 GB Kingston Beast DDR4 SDRAM
PNY RTX A2000 6GB Video Card
WD 1 TB SSD Hard Drive
Windows 11 Pro

Message 26 of 40
icse
in reply to: ken.poyner

icse
Collaborator
Collaborator

Is it possible to remove the logo when you start Powermill?

It blocks half of the screen...

0 Likes

Is it possible to remove the logo when you start Powermill?

It blocks half of the screen...

Message 27 of 40
rafael.sansao
in reply to: icse
Message 28 of 40

nathanANTQX
Enthusiast
Enthusiast

Hi Guys, Could we please get a solution to display the tool numbers in the tools folder, (so if I set the tool to Tool 2, perhaps automatically add a #2 before the Tool name?) 

 

We are a job shop that is for ever changing jobs and tools. trying to remember what tools are set/empty can be a serious headache.

 

hope its possible to add into an update sometime. 

(automatically add after the tool symbol)

(Active tool : #2 > EM-3.0-SC)

nathanANTQX_0-1717053618966.png

 

0 Likes

Hi Guys, Could we please get a solution to display the tool numbers in the tools folder, (so if I set the tool to Tool 2, perhaps automatically add a #2 before the Tool name?) 

 

We are a job shop that is for ever changing jobs and tools. trying to remember what tools are set/empty can be a serious headache.

 

hope its possible to add into an update sometime. 

(automatically add after the tool symbol)

(Active tool : #2 > EM-3.0-SC)

nathanANTQX_0-1717053618966.png

 

Message 29 of 40
Beta_Librae
in reply to: nathanANTQX

Beta_Librae
Advocate
Advocate

I've added the active tool number as an expression in the quick access toolbar. Not exactly what you're looking for, but I find it pretty helpful.

 

Beta_Librae_0-1717077394511.png

 

Beta_Librae_1-1717077447102.png

 

 


Kind Regards,
Not cnc, you can call me Peabrain
0 Likes

I've added the active tool number as an expression in the quick access toolbar. Not exactly what you're looking for, but I find it pretty helpful.

 

Beta_Librae_0-1717077394511.png

 

Beta_Librae_1-1717077447102.png

 

 


Kind Regards,
Not cnc, you can call me Peabrain
Message 30 of 40
nathanANTQX
in reply to: Beta_Librae

nathanANTQX
Enthusiast
Enthusiast

That is an excellent idea, perhaps suited to something else for us. It gets a bit annoying to try and slot a new tool into the tool carousel, sometimes we run into a tough situation because our machines have 21 tools. sometimes we are able to modify our approach to fit the number of tools in the machine. but trying to remember where you have set those tools to find the last 3 open spots can become laborious. (post out to find tool number collision -> update the tool number, clashes with the next tool etc)

 

If the information could be displayed in the tool icon are as a default, without updating the tool name. it could be a visible cue to the programmers to try and slot the tools into the carousel.

 

I hope that gives a little more clarity.

0 Likes

That is an excellent idea, perhaps suited to something else for us. It gets a bit annoying to try and slot a new tool into the tool carousel, sometimes we run into a tough situation because our machines have 21 tools. sometimes we are able to modify our approach to fit the number of tools in the machine. but trying to remember where you have set those tools to find the last 3 open spots can become laborious. (post out to find tool number collision -> update the tool number, clashes with the next tool etc)

 

If the information could be displayed in the tool icon are as a default, without updating the tool name. it could be a visible cue to the programmers to try and slot the tools into the carousel.

 

I hope that gives a little more clarity.

Message 31 of 40
icse
in reply to: nathanANTQX

icse
Collaborator
Collaborator

this macro pops up a message box with the first free tool number:

int list $toolnumblist = extract(folder('TOOL'), 'Tool.Number.Value')
int $newToolNumb = 1

while member( $toolnumblist, $newToolNumb) {
	$newToolNumb = $newToolNumb + 1
}

Message Info $newToolNumb

 

this macro shows you all tools with duplicate numbers:

int list $toolnumbers = extract(folder('tool'),'Number.Value')
int $i = remove_duplicates($toolnumbers)

string $op = ''

foreach $n in $toolnumbers {
	string list $names = extract(filter(folder('tool'),'this.Number.Value == "' + $n + '"'),'Name')
	if size($names) > 1 {
		$op = $op + 'T ' + $n + CRLF
		foreach $name in $names {
			$op = $op + $name + CRLF
		}
		$op = $op + CRLF
	}
}

message info $op

 

this macro pops up a message box with the first free tool number:

int list $toolnumblist = extract(folder('TOOL'), 'Tool.Number.Value')
int $newToolNumb = 1

while member( $toolnumblist, $newToolNumb) {
	$newToolNumb = $newToolNumb + 1
}

Message Info $newToolNumb

 

this macro shows you all tools with duplicate numbers:

int list $toolnumbers = extract(folder('tool'),'Number.Value')
int $i = remove_duplicates($toolnumbers)

string $op = ''

foreach $n in $toolnumbers {
	string list $names = extract(filter(folder('tool'),'this.Number.Value == "' + $n + '"'),'Name')
	if size($names) > 1 {
		$op = $op + 'T ' + $n + CRLF
		foreach $name in $names {
			$op = $op + $name + CRLF
		}
		$op = $op + CRLF
	}
}

message info $op

 

Message 32 of 40
Beta_Librae
in reply to: nathanANTQX

Beta_Librae
Advocate
Advocate

I got ya now. You're looking for the tools that aren't there.


Kind Regards,
Not cnc, you can call me Peabrain
0 Likes

I got ya now. You're looking for the tools that aren't there.


Kind Regards,
Not cnc, you can call me Peabrain
Message 33 of 40
evo80
in reply to: icse

evo80
Collaborator
Collaborator

@icse 

What would be really handy is a variation on this that will return the unused tool numbers from a compliment of say 60 tools?

Best Regards

0 Likes

@icse 

What would be really handy is a variation on this that will return the unused tool numbers from a compliment of say 60 tools?

Best Regards

Message 34 of 40
icse
in reply to: evo80

icse
Collaborator
Collaborator

You could automatically give the active tool if that tool does not have a number the first free tool number.

 

to show a list of all free tool numbers from 1 to 60 you could use something like this:

int list $toolnumblist = extract(folder('TOOL'), 'Tool.Number.Value')
int $numb = 1

int list $freeNumbs = {}

string $op = ''

while $numb <= 60 {
	if not member( $toolnumblist, $numb) {
		int $i = add_last($freeNumbs,$numb)
		$op = $op + $numb + CRLF
	}
	$numb = $numb + 1
}

Message Info $op

You could automatically give the active tool if that tool does not have a number the first free tool number.

 

to show a list of all free tool numbers from 1 to 60 you could use something like this:

int list $toolnumblist = extract(folder('TOOL'), 'Tool.Number.Value')
int $numb = 1

int list $freeNumbs = {}

string $op = ''

while $numb <= 60 {
	if not member( $toolnumblist, $numb) {
		int $i = add_last($freeNumbs,$numb)
		$op = $op + $numb + CRLF
	}
	$numb = $numb + 1
}

Message Info $op
Message 35 of 40
evo80
in reply to: icse

evo80
Collaborator
Collaborator

@icse,

That's perfect!

Cheers!!

0 Likes

@icse,

That's perfect!

Cheers!!

Message 36 of 40

iamcdn79
Advisor
Advisor

Regarding the drawing of the stock in Setups in the release notes, how does this work? When turning it off and deactivating the setup but then re-activating it, it just draws again every time. I was hoping it would keep it undrawn every time.

 

And how is this any different from older versions? 2023 has the same options

 

iamcdn79_0-1719495225158.png

iamcdn79_1-1719495361628.png

iamcdn79_2-1719495516031.png

 

 

 


Intel Core i9 13900KF CPU
128 GB Kingston Beast DDR4 SDRAM
PNY RTX A2000 6GB Video Card
WD 1 TB SSD Hard Drive
Windows 11 Pro

0 Likes

Regarding the drawing of the stock in Setups in the release notes, how does this work? When turning it off and deactivating the setup but then re-activating it, it just draws again every time. I was hoping it would keep it undrawn every time.

 

And how is this any different from older versions? 2023 has the same options

 

iamcdn79_0-1719495225158.png

iamcdn79_1-1719495361628.png

iamcdn79_2-1719495516031.png

 

 

 


Intel Core i9 13900KF CPU
128 GB Kingston Beast DDR4 SDRAM
PNY RTX A2000 6GB Video Card
WD 1 TB SSD Hard Drive
Windows 11 Pro

Message 37 of 40

Tecnico1_ZetaDueSAS
Participant
Participant

Sorry. Problem is in powershape 2025.

0 Likes

Sorry. Problem is in powershape 2025.

Message 38 of 40

ken.poyner
Autodesk
Autodesk

Have you raised CERs? Can you send me your email in a DM so I track them down.
Do you have a project and/or some reproduction instructions you could send to me too so I can try and reproduce the issue?



Ken Poyner

Software Engineer (PowerMill)

Have you raised CERs? Can you send me your email in a DM so I track them down.
Do you have a project and/or some reproduction instructions you could send to me too so I can try and reproduce the issue?



Ken Poyner

Software Engineer (PowerMill)
Message 39 of 40

edwin_escalona
Explorer
Explorer

It is a pity that having RAM capacities larger than 16 GB PowerMill only uses a maximum of 12 GB

0 Likes

It is a pity that having RAM capacities larger than 16 GB PowerMill only uses a maximum of 12 GB

Message 40 of 40

nathanANTQX
Enthusiast
Enthusiast

Please can we add a section in toolpath reorder within the nc program ( Re-order by SETUP toolpath order) (see picture below)

 

We often run a multiple setup, and try and save on the tool change time across the batch.

 

We are currently using setups to add repeatability and lighten the project by not having models in the translated positions.

This means that every toolpath edit makes it into each part with out being translated and copied to the next position.

(provided the fixture offsets are setup correctly eg. G54 / G55 / G56 etc.)

 

We currently have to manually reorder every toolpath in the nc file. 

(currently with 2 setups added into an nc file)

toolpath 1 : setup 1

toolpath 2 : setup 1

toolpath 3 : setup 1

toolpath 4 : setup 1

etc.

 

(this is what we would like out of an automatic reorder)

toolpath 1 : setup 1

toolpath 1 : setup 2

toolpath 2 : setup 1

toolpath 2 : setup 2

etc.

Untitled.jpg

 kind regards Nathan

0 Likes

Please can we add a section in toolpath reorder within the nc program ( Re-order by SETUP toolpath order) (see picture below)

 

We often run a multiple setup, and try and save on the tool change time across the batch.

 

We are currently using setups to add repeatability and lighten the project by not having models in the translated positions.

This means that every toolpath edit makes it into each part with out being translated and copied to the next position.

(provided the fixture offsets are setup correctly eg. G54 / G55 / G56 etc.)

 

We currently have to manually reorder every toolpath in the nc file. 

(currently with 2 setups added into an nc file)

toolpath 1 : setup 1

toolpath 2 : setup 1

toolpath 3 : setup 1

toolpath 4 : setup 1

etc.

 

(this is what we would like out of an automatic reorder)

toolpath 1 : setup 1

toolpath 1 : setup 2

toolpath 2 : setup 1

toolpath 2 : setup 2

etc.

Untitled.jpg

 kind regards Nathan

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report