home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / CADKEY_C.ZIP / CADKEY14.ZIP / CDL / SPLPAR.CDL < prev    next >
Encoding:
Text File  |  1989-03-18  |  3.2 KB  |  165 lines

  1. rem **************************************************************
  2. rem This is a CADL file to create the points for an offset spline.
  3. rem Presently set up for 2-D and 3-D Cubic splines.
  4. rem Offset points will be produced at the knot points
  5. rem of the selected spline. These points can then be joined
  6. rem to produce the required spline.
  7. rem This routine will work for a closed spline. Note that
  8. rem checks have not been included to ensure the offset is
  9. rem always on the correct side. This shortfall can be overcome by
  10. rem running the routine twice and asking for a positive
  11. rem as well as a negative offset.
  12. rem **************************************************************
  13. :select
  14. set mask, 5
  15. getent "Select the SPLINE you want to offset", enttype
  16. if enttype != 5
  17.   goto select
  18. deft = 0.25
  19. getflt "Enter the OFFSET required (%f) =>",deft,thick
  20. if @intdat[8] == 0
  21.   goto dim2
  22. if @intdat[8] == 1
  23.   goto dim3
  24. pause "SPLINE type selected is not supported. PRESS RETURN"
  25.   goto exit
  26. :dim2
  27. pause "2-D SPLINE selected with %d segments.PRESS RETURN", @intdat[11]
  28. i=0
  29. j=0
  30. col =@color + 1
  31. lev =@level + 1
  32. levels 1, lev
  33. :loop1
  34. i=i+1
  35. if i >@intdat[11]
  36.   goto lab1
  37. :loop2
  38. k1=j + 8*(i-1)
  39. A=@fltdat[k1]
  40. k2=j+1+8*(i-1)
  41. B=@fltdat[k2]
  42. k3=j+2+8*(i-1)
  43. C=@fltdat[k3]
  44. k4=j+3+8*(i-1)
  45. D=@fltdat[k4]
  46. k5=j+4+8*(i-1)
  47. E=@fltdat[k5]
  48. k6=j+5+8*(i-1)
  49. F=@fltdat[k6]
  50. k7=j+6+8*(i-1)
  51. G=@fltdat[k7]
  52. k8=j+7+8*(i-1)
  53. H=@fltdat[k8]
  54. x1=D
  55. y1=H
  56. if C==0.0
  57.   goto zero
  58. dydx1=G/C
  59.   goto cont
  60. :zero
  61. ang=90.0
  62.   goto jump
  63. :cont
  64. ang=atan(dydx1)
  65. :jump
  66. x1new = x1 - thick*sin(ang)
  67. y1new = y1 + thick*cos(ang)
  68. POINT x1new, y1new, @depth, col, lev, 0, 0, 0
  69. if i == @intdat[11]
  70.   goto loop3
  71. goto loop1
  72. :loop3
  73. x2=A + B + C + D
  74. y2=E + F + G + H
  75. den=(3.0*A+2.0*B+C)
  76. if den==0.0
  77.   goto zero1
  78. dydx2= (3.0*E + 2.0*F + G)/(3.0*A + 2.0*B + C)
  79.   goto cont1
  80. :zero1
  81. ang=90.0
  82.   goto jump1
  83. :cont1
  84. ang=atan(dydx2)
  85. :jump1
  86. x2new= x2 - thick*sin(ang)
  87. y2new= y2 + thick*cos(ang)
  88. POINT x2new, y2new, @depth, col, lev, 0, 0, 0
  89.   goto exit
  90. :dim3
  91. pause "3-D SPLINE selected with %d segments.PRESS RETURN", @intdat[11]
  92. i=0
  93. j=0
  94. col =@color + 1
  95. lev =@level + 1
  96. levels 1, lev
  97. :loop10
  98. i=i+1
  99. if i >@intdat[11]
  100.   goto lab1
  101. :loop20
  102. k1=j + 12*(i-1)
  103. A=@fltdat[k1]
  104. k2=j+1+12*(i-1)
  105. B=@fltdat[k2]
  106. k3=j+2+12*(i-1)
  107. C=@fltdat[k3]
  108. k4=j+3+12*(i-1)
  109. D=@fltdat[k4]
  110. k5=j+4+12*(i-1)
  111. E=@fltdat[k5]
  112. k6=j+5+12*(i-1)
  113. F=@fltdat[k6]
  114. k7=j+6+12*(i-1)
  115. G=@fltdat[k7]
  116. k8=j+7+12*(i-1)
  117. H=@fltdat[k8]
  118. k9=j+8+12*(i-1)
  119. M=@fltdat[k9]
  120. k10=j+9+12*(i-1)
  121. N=@fltdat[k10]
  122. k11=j+10+12*(i-1)
  123. O=@fltdat[k11]
  124. k12=j+11+12*(i-1)
  125. P=@fltdat[k12]
  126. x1=D
  127. y1=H
  128. z1=P
  129. if C==0.0
  130.   goto zero2
  131. dydx1=G/C
  132.   goto cont2
  133. :zero2
  134. ang=90.0
  135.   goto jump2
  136. :cont2
  137. ang=atan(dydx1)
  138. :jump2
  139. x1new = x1 - thick*sin(ang)
  140. y1new = y1 + thick*cos(ang)
  141. POINT x1new, y1new, z1, col, lev, 0, 0, 0
  142. if i == @intdat[11]
  143.   goto loop30
  144. goto loop10
  145. :loop30
  146. x2=A + B + C + D
  147. y2=E + F + G + H
  148. z2=M + N + O + P
  149. den=(3.0*A+2.0*B+C)
  150. if den==0.0
  151.   goto zero3
  152. dydx2= (3.0*E + 2.0*F + G)/(3.0*A + 2.0*B + C)
  153.   goto cont3
  154. :zero3
  155. ang=90.0
  156.   goto jump3
  157. :cont3
  158. ang=atan(dydx2)
  159. :jump3
  160. x2new= x2 - thick*sin(ang)
  161. y2new= y2 + thick*cos(ang)
  162. POINT x2new, y2new, z2, col, lev, 0, 0, 0
  163. :lab1
  164. :exit
  165.