# ============= OCAF ============================
# Naming
#
# Testing purpose: Naming selection mechanism 
#
# Test case: F1 (ShapeOrientation is not used)
#
# 1.  Create Box B2
# 2.  Create cylinder $Cyl
# 3.  Translate $Cyl along XYZ
# 4.  $CS = Cut ($B2, $Cyl)
# 5.  Create 4 points as attachments of box $B2
# 6.  Create 4 spheres ($Sph1, $Sph2, $Sph9, $Sph11)
# 7.  Rotate spheres $Sph1, $Sph2 around line
# 8.  Fuse all spheres with box B2
# 9.  Make selection for all sub-shapes
# 10. Modify B2
# 11. Recompute modeling functions
# 12. Recompute selections
# ===============================================

erase 
Close D 

NewDocument D BinOcaf
AddDriver D Box Cyl Sph Attach XAttach PTxyz PTALine PRLine PMirr Cut Fuse Prism FulRevol SecRevol Fillet

#1 Create Box
NewCommand D
set B2 [AddObject D];			## add object
set F2 [AddFunction D $B2 Box];		## add function
BoxDX D $B2 190;			## set argumets of this function
BoxDY D $B2 290
BoxDZ D $B2 390
InitLogBook D;				## initialize (clean) internal maps of labels
ComputeFun D $F2;			## compute the function
GetShape D $F2:2 Box2;			## check result
whatis Box2
GetReference D $B2

#2 Create Cylinder
NewCommand D
explode Box2 F
explode Box2_1 E
set Sel1 [AttachShape D Box2_1_1 ${B2} ${B2} 1]; ## set attachment
## AddDriver D Attach Cyl
set Cyl [AddCyl D 50 515 ${Sel1}]
ComputeFun D $Cyl:1
GetShape D $Cyl:1:2 CylS

#3 Translate Cylinder
NewCommand D
set FTr1 [PTranslateDXYZ D $Cyl 100 0 0]
ComputeFun D $FTr1
GetShape D $Cyl:2:2 CylS

#4 Cut Box Cyl
NewCommand D
set CS [AddCut D $B2 $Cyl]
ComputeFun D $CS
erase
GetShape D $CS:2 S
don S
NewCommand D

#5 set attachments - vertexes
explode S V
set SPnt1 [AttachShape D S_1 ${B2} ${B2} 0]; ## set attachment
set SPnt2 [AttachShape D S_2 ${B2} ${B2} 0]; ## set attachment
set SPnt9 [AttachShape D S_9 ${B2} ${B2} 0]; ## set attachment
set SPnt11 [AttachShape D S_11 ${B2} ${B2} 0]; ## set attachment


#6 create 4 Spheres
set Sph1 [AddSphere D $SPnt1 15]
ComputeFun D $Sph1:1
GetShape D $Sph1:1:2 Sp1

set Sph2 [AddSphere D $SPnt2 15]
ComputeFun D $Sph2:1
GetShape D $Sph2:1:2 Sp2

set Sph9 [AddSphere D $SPnt9 15]
ComputeFun D $Sph9:1
GetShape D $Sph9:1:2 Sp9

set Sph11 [AddSphere D $SPnt11 15]
ComputeFun D $Sph11:1
GetShape D $Sph11:1:2 Sp11

#7
explode Box2 E
set Sel61 [AttachShape D Box2_1 ${B2} ${B2} 0];
set FR1 [PRotateRoundLine D $Sph1 $Sel61 120]
ComputeFun D $FR1 
GetShape D $FR1:2 Sp1

set Sel62 [AttachShape D Box2_1 ${B2} ${B2} 0];
set FR2 [PRotateRoundLine D $Sph2 $Sel62 120]
ComputeFun D $FR2
GetShape D $FR2:2 Sp2

#8 Fuse 4 spheres
set FS1 [AddFuse D $B2 $Sph1]
ComputeFun D $FS1
GetShape D $FS1:2 S

set FS2 [AddFuse D $B2 $Sph2]
ComputeFun D $FS2
GetShape D $FS2:2 S


set FS9 [AddFuse D $B2 $Sph9]
ComputeFun D $FS9
GetShape D $FS9:2 S

set FS11 [AddFuse D $B2 $Sph11]
ComputeFun D $FS11
GetShape D $FS11:2 S


#9 test Naming
set SL [TestSingleSelection D $B2 0]    
set SL2 [TestMultipleSelection D $B2 0]

#10 Modification
NewCommand D
BoxDX D $B2 250
BoxDZ D $B2 310

#11 recompute
NewCommand D
InitLogBook D
ComputeFun D $F2
ComputeFun D $Sel1:1
ComputeFun D $Cyl:1
ComputeFun D $FTr1
ComputeFun D $CS
ComputeFun D $SPnt1:1
ComputeFun D $SPnt2:1
#ComputeFun D $SPnt5:1
#ComputeFun D $SPnt6:1
#ComputeFun D $SPnt7:1
ComputeFun D $SPnt9:1
ComputeFun D $SPnt11:1
#ComputeFun D $SPnt12:1
ComputeFun D $Sph1:1
ComputeFun D $Sph2:1
ComputeFun D $Sel61:1
ComputeFun D $FR1 
ComputeFun D $Sel62:1
ComputeFun D $FR2 
#ComputeFun D $Sph5:1 ## because 5,6,7,12 gives NOT VALID result
#ComputeFun D $Sph6:1
#ComputeFun D $Sph7:1
ComputeFun D $Sph9:1
ComputeFun D $Sph11:1
#ComputeFun D $Sph12:1
ComputeFun D $FS1
ComputeFun D $FS2
ComputeFun D $FS9
ComputeFun D $FS11
erase
GetShape D $FS11:2 S

#12
SolveFlatFrom D $SL
NewCommand D

