home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 13 / 13.iso / p / p115 / 10.ddi / GCD4 / UPL / CHAFIL.UPL < prev    next >
Encoding:
Text File  |  1987-04-30  |  2.5 KB  |  91 lines

  1. --This UPL program is used to update the radius of fillets or removing
  2. --fillets all together
  3.  
  4. Proc Main
  5.  
  6. Integer NEnt, I, IEnd, MibArc, MibLines(2)
  7. Real OldRad, NewRad, LineLen, RadRatio
  8. Coord ArcOrg, LEnd1(2), LEnd2(2), Int(2), LineEnd1, LineEnd2
  9.  
  10. BreakChar = 3
  11.  
  12. loop
  13.     EntMask(0); EntMask(3)      --only allow arcs to be picked
  14.     Print "pick fillet to change: ",
  15.     GetEnt(1, NEnt, MibArc, IEnd)
  16.     exit when LastChar = BreakChar or NEnt < 1
  17.  
  18.     Verify Arc EntId(MibArc) Org(ArcOrg) Radius(OldRad)
  19.         
  20.     loop
  21.         EntMask(0); EntMask(1)         --only allow lines to be picked
  22.         Print "dig lines connecting fillet: ",
  23.         GetEnt(2, NEnt, MibLines(1), IEnd)
  24.         exit all when LastChar = BreakChar or NEnt < 2
  25.  
  26.         --Get endpoints of lines
  27.  
  28.         Verify Line EntId(MibLines(1)) Ends(LEnd1(1),LEnd2(1))
  29.         Verify Line EntId(MibLines(2)) Ends(LEnd1(2),LEnd2(2))
  30.  
  31.         --calculate intersection point of lines
  32.  
  33.         LinIntOf(LEnd1(1), LEnd2(1), LEnd1(2), LEnd2(2), Int(1), Int(2))
  34.  
  35.         --do a simple check to make sure the correct lines were picked
  36.  
  37.         exit when VLen(ArcOrg, Int(1)) <= 2.0*OldRad
  38.         print; print '<the lines picked are not correct, try again>'
  39.     end loop
  40.  
  41.     loop
  42.         Accept NewRad Prompt(" new radius: ")
  43.         exit when NewRad >= 0.0
  44.         print; print '<must be a positive number, try again>'
  45.     end loop
  46.  
  47.     --calculate new fillet origin
  48.  
  49.     if NewRad > 0.0 then
  50.  
  51.         --update fillet radius
  52.  
  53.         RadRatio = NewRad/OldRad
  54.         ArcOrg = Int(1) + Coord(RadRatio,RadRatio,RadRatio)*(ArcOrg-Int(1))
  55.         Modify Arc EntId(MibArc) Org(ArcOrg) Radius(NewRad) Rpnt(True)
  56.     else
  57.  
  58.         --remove fillet
  59.  
  60.         Erase EntId(MibArc) Rpnt(True)
  61.     endif
  62.  
  63.     --update lines end points
  64.  
  65.     loop I = 1 to 2
  66.         if VLen(LEnd1(I), Int(I)) > VLen(LEnd2(I), Int(I)) then
  67.             LineEnd1 = LEnd1(I)
  68.         else
  69.             LineEnd1 = LEnd2(I)
  70.         endif
  71.  
  72.         LineLen = VLen(LineEnd1, Int(I))
  73.         if NewRad > 0.0 then
  74.             if LineLen > VLen(LEnd1(I), LEnd2(I)) then
  75.                 LineLen = LineLen-NewRad
  76.             else
  77.                 LineLen = LineLen+NewRad
  78.             endif
  79.         endif
  80.  
  81.         LineEnd2 = LineEnd1 +  \
  82.                    Coord(LineLen,LineLen,LineLen) * Vunit(Int(1) - LineEnd1)
  83.  
  84.         Modify Line EntId(MibLines(I)) Ends(LineEnd1, LineEnd2) Rpnt(True)
  85.     end loop
  86.     print
  87. end loop    --loop to get more arcs and lines to change
  88.  
  89. End Proc
  90.  
  91.