Esame della macro Do_it
La definizione di Do_it è riportata di seguito.
DEFINE Do_it {Generate holes in demopart04.mi}
EDIT_PART TOP {Setup: make sure we are at top part}
SPOTLIGHT OFF
PD_RESOLVE REPLACE {Solve for front holes}
AREA_PROPERTY 1 Find_midp DEL_OLD '\temp\area'
END {Get the area properties of 1 front hole}
{and write to a temporary file. }
EDIT_PART 'slot_grid' {Goto the second part, slot_grid}
PD_PARAM_FIX 'Newrad' New_radius {Find radius needed to give equivalent}
{area. Fix part radius to this value.}
PD_RESOLVE REPLACE {Solve for back slots}
EDIT_PART TOP {Clean up: go back to top part}
DISPLAY ('Variations Generated. Done.')
END_DEFINE {of Do_it}
Do_it indica le macro Find_midp e New_radius, entrambe elencate di seguito.
DEFINE Find_midp {find a point inside a front-face hole}
LOCAL A {Declare local variable A}
LOCAL B {Declare local variable B}
PD_PARAM_INQ 'Pt1' {Find Pt1 location from parameter table}
LET A (PNT_XY (INQ 3) (INQ 4)) {assign Pt1 location to A}
PD_PARAM_INQ 'Pt2' {Find Pt2 location from parameter table}
LET B (PNT_XY (INQ 3) (INQ 4)) {assign Pt2 location to B}
((A+B)/2) {Return midpoint of A and B}
END_DEFINE {of Find_midp}
DEFINE New_radius {Get area of front hole,}
{return radius of back slot.}
LOCAL L {Declare local variable L}
LOCAL A {Declare local variable A}
LET A 'junk' {Set A to some junk value!}
LET L 200 {Set L to length of a back slot}
OPEN_INFILE 1 '\temp\area' {open file of area properties written above}
WHILE ((SUBSTR A 1 3)<>'A =') {scan area_spec for the area (A=) field}
READ_FILE 1 A {and load the area field into A}
LET A (TRIM A)
END_WHILE
LET A (SUBSTR A 4 (LEN A)) {set A to be just area value (area of 1 hole}
LET A ((VAL A)*4) {total area of front holes is 4A}
(((SQRT(L*L + (PI*A)/3))-L)/PI){Given area of holes A and length of slots L}
{return hole radius for equivalent area. }
END_DEFINE {of New_radius}
L'algoritmo utilizzato da Do_it è descritto di seguito.
1. Risolve la variante generando le luci di entrata.
2. Utilizzare AREA_PROPERTIES per trovare le proprietà dell'area di una luce di entrata e scrivere i dati in un file. Richiamare la macro Find_midp per generare il punto che identifica quella luce di entrata.
3. Assume il pannello di uscita come parte corrente.
4. Richiamare la macro New_radius per calcolare il raggio che soddisfa i dati scritti nel file appena creato. Assegna questo valore del raggio al parametro "Newrad".
5. Risolve la variante generando le luci di uscita.
Benché semplice, questa procedura utilizza alcune interessanti funzioni di Creo Elements/Direct e alcuni comandi di Progettazione parametrica.
• Anche se Parametric Design agisce solo sulla parte corrente, con una macro come Do_it si può agevolmente passare da una parte all'altra.
• La macro Find_midp utilizza i vincoli dei punti di riferimento Pt1 e Pt2 per determinare un punto che si trovi di sicuro all'interno di una luce di entrata. Dato che Pt1 e Pt2 sono vincolati ad essere sempre sui due estremi dell'arco che delimita questa luce, un punto compreso tra di essi sarà per forza interno alla luce. Fornendo questo punto a AREA_PROPERTIESsi è sicuri di ottenere le proprietà di una luce di entrata. Notare che si usa PD_PARAM_INQ per prelevare le posizioni di questi punti dalla tabella dei parametri.
• New-radius legge semplicemente il valore dell'area da un file e lo usa, insieme ai dati codificati sulla lunghezza della luce di uscita, per generare il raggio necessario. L'uscita viene inserita in Parametric Design mediante PD_FIX_PARAM. Naturalmente, per fornire questo dato si potrebbe anche usare una macro molto più complessa.