hexagon logo

Constructing a sphere with variable amount of arcs.

Hello and thank you in advance. Here is another code problem i ran into. I am running PCDMIS v4.0.

CS3        =SCRIPT/FILENAME= C:\PROGRAM FILES\WAI\PC-DMIS V40\PART PROGRAMS\VARIABLES PULLED.BAS
            FUNCTION/Main,SHOW=YES,,
            STARTSCRIPT/
            ASSIGN/A = .709
            ASSIGN/B = .570
            ASSIGN/C = 1.023
            ASSIGN/D = 1.062
            ASSIGN/E = .561
            ASSIGN/F = 1.159
            ASSIGN/G = 1.414
            ASSIGN/HOLESETS = 1
            ASSIGN/NUMBER1HOLES = 6
            ASSIGN/NUMBER2HOLES = 0
            ASSIGN/START1Z = 90
            ASSIGN/START2Z = 90
            ASSIGN/Z1ROTATE = 360/NUMBER1HOLES
            ASSIGN/Z2ROTATE = 360/NUMBER2HOLES
            ASSIGN/X1ANGLE = 45
            ASSIGN/X2ANGLE = 0
            ASSIGN/X1ROTATE = -45
            ASSIGN/X2ROTATE = 0
            ASSIGN/X1ROTATEBACK = -(X1ROTATE)
            ASSIGN/X2ROTATEBACK = -(X2ROTATE)
            ASSIGN/A1START = 0
            ASSIGN/A1END = 360
            ASSIGN/A1ANGLE = 45
            ASSIGN/B10ANGLE = 90
            ASSIGN/B11ANGLE = 150
            ASSIGN/B12ANGLE = -150
            ASSIGN/B13ANGLE = -90
            ASSIGN/B14ANGLE = -30
            ASSIGN/B15ANGLE = 30
            ASSIGN/B16ANGLE = 0
            ASSIGN/B17ANGLE = 0
            ASSIGN/B18ANGLE = 0
            ASSIGN/B19ANGLE = 0
            ASSIGN/A2START = 0
            ASSIGN/A2END = 0
            ASSIGN/A2ANGLE = 0
            ASSIGN/B20ANGLE = 0
            ASSIGN/B21ANGLE = 0
            ASSIGN/B22ANGLE = 0
            ASSIGN/B23ANGLE = 0
            ASSIGN/B24ANGLE = 0
            ASSIGN/B25ANGLE = 0
            ASSIGN/THRUHOLEDEPTH = -(B)-.025
            ASSIGN/Z1START = Z1ROTATE/2
            ASSIGN/Z2START = Z2ROTATE/2
            ENDSCRIPT/


ASSIGN/B_DIAM = B*2
            IF/HOLESETS==1
            ASSIGN/CRHITS = 12
            ASSIGN/SRSTART = -START1Z+(Z1ROTATE/2)
            ASSIGN/SRROTATE = Z1ROTATE
ISR_ROT    =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ATUM_XY,LIST=YES
            ALIGNMENT/ROTATE_OFFSET,SRSTART,ABOUT,ZPLUS
            ALIGNMENT/END
V1         =LOOP/START, ID = YES, NUMBER = NUMBER1HOLES, START = 1, SKIP = ,
               OFFSET: XAXIS = 0, YAXIS = 0, ZAXIS = 0, ANGLE = SRROTATE
            MOVE/CLEARPLANE
ISR1_      =AUTO/CIRCLE,SHOWALLPARAMS = YES,SHOWHITS = NO
            THEO/0+0,0+0,0.009+0,1,0,0,B_DIAM+0
            ACTL/0,0,0.009,1,0,0,1.14
            TARG/0+0,0+0,0.009+0,1,0,0
            THICKNESS_OFF = 0,RECT,IN,CIRCULAR,LEAST_SQR,ONERROR = NO,$
            AUTO MOVE = NO,DISTANCE = 1,RMEAS = None,None,None,$
            READ POS = NO,FIND HOLE = DISABLED,REMEASURE = NO,$
            NUMHITS = CRHITS,INIT = 0,PERM = 0,SPACER = 0,PITCH = 0,$
            START ANG = -140,END ANG = -115,DEPTH = 0,$
            VOID DETECT = NO,$
            ANGLE VEC = 0,0,1
            LOOP/END
            COMMENT/OPER,NO,Need to construct Sphere
ISR_ROTA   =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ATUM_XY,LIST=YES
            ALIGNMENT/ROTATE_OFFSET,-SRSTART,ABOUT,ZPLUS
            ALIGNMENT/END
            END_IF/
            IF/HOLESETS==2
            ASSIGN/CRHITS = 10
            ASSIGN/SRSTART = START2Z+(Z2ROTATE/2)
            ASSIGN/SRROTATE = Z2ROTATE
            ASSIGN/SRSTART2 = START1Z+(Z1ROTATE/2)
            ASSIGN/SRROTATE2 = Z1ROTATE
ISR_ROT    =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ATUM_XY,LIST=YES
            ALIGNMENT/ROTATE_OFFSET,SRSTART,ABOUT,ZPLUS
            ALIGNMENT/END
V1         =LOOP/START, ID = YES, NUMBER = NUMBER2HOLES, START = 1, SKIP = ,
               OFFSET: XAXIS = 0, YAXIS = 0, ZAXIS = 0, ANGLE = SRROTATE
            MOVE/CLEARPLANE
ISR1_      =AUTO/CIRCLE,SHOWALLPARAMS = YES,SHOWHITS = NO
            THEO/0+0,0+0,0.009+0,1,0,0,B_DIAM+0
            ACTL/0,0,0.009,1,0,0,1.14
            TARG/0+0,0+0,0.009+0,1,0,0
            THICKNESS_OFF = 0,RECT,IN,CIRCULAR,LEAST_SQR,ONERROR = NO,$
            AUTO MOVE = NO,DISTANCE = 1,RMEAS = None,None,None,$
            READ POS = NO,FIND HOLE = DISABLED,REMEASURE = NO,$
            NUMHITS = CRHITS,INIT = 0,PERM = 0,SPACER = 0,PITCH = 0,$
            START ANG = -140,END ANG = -130,DEPTH = 0,$
            VOID DETECT = NO,$
            ANGLE VEC = 0,0,1
            LOOP/END
ISR_ROTA   =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ATUM_XY,LIST=YES
            ALIGNMENT/ROTATE_OFFSET,-SRSTART,ABOUT,ZPLUS
            ALIGNMENT/END
ISR_ROT    =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ATUM_XY,LIST=YES
            ALIGNMENT/ROTATE_OFFSET,SRSTART2,ABOUT,ZPLUS
            ALIGNMENT/END
V2         =LOOP/START, ID = YES, NUMBER = NUMBER1HOLES, START = 1, SKIP = ,
               OFFSET: XAXIS = 0, YAXIS = 0, ZAXIS = 0, ANGLE = SRROTATE
            MOVE/CLEARPLANE
ISR2_      =AUTO/CIRCLE,SHOWALLPARAMS = YES,SHOWHITS = NO
            THEO/0+0,0+0,0.009+0,1,0,0,B_DIAM+0
            ACTL/0,0,0.009,-1,0,0,1.14
            TARG/0+0,0+0,0.009+0,1,0,0
            THICKNESS_OFF = 0,RECT,IN,CIRCULAR,LEAST_SQR,ONERROR = NO,$
            AUTO MOVE = NO,DISTANCE = 1,RMEAS = None,None,None,$
            READ POS = NO,FIND HOLE = DISABLED,REMEASURE = NO,$
            NUMHITS = CRHITS,INIT = 0,PERM = 0,SPACER = 0,PITCH = 0,$
            START ANG = -125,END ANG = -115,DEPTH = 0,$
            VOID DETECT = NO,$
            ANGLE VEC = 0,0,1
            LOOP/END
            COMMENT/OPER,NO,Need to construct Sphere
ISR_ROTA   =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ATUM_XY,LIST=YES
            ALIGNMENT/ROTATE_OFFSET,-SRSTART2,ABOUT,ZPLUS
            ALIGNMENT/END
            END_IF/
            IF/HOLESETS==1
            IF/NUMBER1HOLES==6
SPH1       =FEAT/SPHERE,RECT,OUT
            THEO/0.11629,0.20141,0.009,0,0,1,1.23124
            ACTL/-0.02884,0.01665,-0.0243,0,0,1,1.04588
            CONSTR/SPHERE,BF,ISR1_1.HITS[1..10],ISR1_2.HITS[1..10],ISR1_3.HITS[1..10],ISR1_4.HITS[1..10],ISR1_5.HITS[1..10],ISR1_6.HITS[1..10],,
            END_IF/
            END_IF/
            IF/HOLESETS==2
            IF/NUMBER1HOLES==6
SPH1       =FEAT/SPHERE,RECT,OUT
            THEO/0.11629,0.20141,0.009,0,0,1,1.23124
            ACTL/-0.02884,0.01665,-0.0243,0,0,1,1.04588
            CONSTR/SPHERE,BF,ISR1_1.HITS[1..10],ISR1_2.HITS[1..10],ISR1_3.HITS[1..10],ISR1_4.HITS[1..10],ISR1_5.HITS[1..10],ISR1_6.HITS[1..10],ISR2_1.HITS[1..10],ISR2_2.HITS[1..10],ISR2_3.HITS[1..10],ISR2_4.HITS[1..10],ISR2_5.HITS[1..10],,
            END_IF/
            IF/NUMBER1HOLES==7
SPH1       =FEAT/SPHERE,RECT,OUT
            THEO/0.11629,0.20141,0.009,0,0,1,1.23124
            ACTL/-0.02884,0.01665,-0.0243,0,0,1,1.04588
            CONSTR/SPHERE,BF,ISR1_1.HITS[1..10],ISR1_2.HITS[1..10],ISR1_3.HITS[1..10],ISR1_4.HITS[1..10],ISR1_5.HITS[1..10],ISR1_6.HITS[1..10],ISR1_7.HITS[1..10],ISR2_1.HITS[1..10],ISR2_2.HITS[1..10],ISR2_3.HITS[1..10],ISR2_4.HITS[1..10],,
            END_IF/
            IF/NUMBER1HOLES==8
SPH1       =FEAT/SPHERE,RECT,OUT
            THEO/0.11629,0.20141,0.009,0,0,1,1.23124
            ACTL/-0.02884,0.01665,-0.0243,0,0,1,1.04588
            CONSTR/SPHERE,BF,ISR1_1.HITS[1..10],ISR1_2.HITS[1..10],ISR1_3.HITS[1..10],ISR1_4.HITS[1..10],ISR1_5.HITS[1..10],ISR1_6.HITS[1..10],ISR1_7.HITS[1..10],ISR1_8.HITS[1..10],,
            END_IF/
            IF/NUMBER1HOLES==9
SPH1       =FEAT/SPHERE,RECT,OUT
            THEO/0.11629,0.20141,0.009,0,0,1,1.23124
            ACTL/-0.02884,0.01665,-0.0243,0,0,1,1.04588
            CONSTR/SPHERE,BF,ISR1_1.HITS[1..10],ISR1_2.HITS[1..10],ISR1_3.HITS[1..10],ISR1_4.HITS[1..10],ISR1_5.HITS[1..10],ISR1_6.HITS[1..10],ISR1_7.HITS[1..10],ISR1_8.HITS[1..10],ISR1_9.HITS[1..10],,
            END_IF/
            IF/NUMBER1HOLES==10
SPH1       =FEAT/SPHERE,RECT,OUT
            THEO/0.11629,0.20141,0.009,0,0,1,1.23124
            ACTL/-0.02884,0.01665,-0.0243,0,0,1,1.04588
            CONSTR/SPHERE,BF,ISR1_1.HITS[1..10],ISR1_2.HITS[1..10],ISR1_3.HITS[1..10],ISR1_4.HITS[1..10],ISR1_5.HITS[1..10],ISR1_6.HITS[1..10],ISR1_7.HITS[1..10],ISR1_8.HITS[1..10],ISR1_9.HITS[1..10],ISR1_10.HITS[1..10],,
            END_IF/
            END_IF/
            ASSIGN/EREF = 0


Ok here is the code ^. Here is my problem.

On a different CMM software, MCOSMOS to be exact, I can select a feature and then use a measuring pattern to draw said feature. So for instance, a sphere. I can select sphere and then crunch out arcs, and finish that feature and allow the software to calculate out the sphere from all the points entered. Comes in handy when you have a segmented sphere due to hole locations, openings, windows, etc.

So in my attempt to do something relatively close to it on PCDMIS, I have ran into some snags. In the code above, I am running a series of cup parts. A family of approx. 20 parts. Through the script, i put in the above window, that is called in through variable inputs I can call in all the print dimensions I need for the Part Size that is inputed. So with all 20 parts being almost identical, I can just run them all through one program.

The problem. The internal sphere, the cup, is broken up by thru holes. So I have to measure it using arcs. The holes are on certain rotation patterns but as the part gets bigger, there becomes 2 rows and the holes don't line up. So again I am stuck with arcing, in more locations on them. In my best attempt to remain accurate, I arc in the middle of every 2 holes.

Now toward the end of my line of code, in the bottom section, i ran out of room to incorporate more arcs into my sphere constructions. I am sure there has to be a better way to do this. I am treading unknown waters when it comes to using loops in PCDMIS, they have been aggrevating. I do not know if I am even programming this correctly. I am just hard coding, I do not have a part infront of me. Just a stack of blueprints.

So any and all advice or input on this would be most welcomed.