home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Structural20376112142006.psc / ModelEditor.bas < prev   
BASIC Source File  |  2006-12-14  |  8KB  |  326 lines

  1. Attribute VB_Name = "ModelEditor"
  2. Const ColorLink = &HFFFFFF 'Link Color
  3. Const ColorLinkH = &HFFFF80 'Link Handle Color
  4. Const ColorNode = &HFF00& 'Node color
  5. Const ColorNodeL = &HFF& 'Locked Node color
  6. Const ColorText = &HC0C0C0 'Node index color
  7. Const ColorLinkDraw = &HE0E0E0
  8. Const DWLink = 2 'Link draw width
  9. Const DWNode = 5 'Node draw width
  10. Const DWLinkH = 10 'Link Handle draw width
  11. Const DWLinkDraw = 5 'Drawing line for likes draw width
  12.  
  13.  
  14. Dim Node(0 To 1000) As Node
  15. Dim Link(0 To 1000) As Link
  16.  
  17. Dim MovTrue As Boolean
  18. Dim MovIndex As Integer
  19. Dim ReLenLinks As Boolean
  20. Dim SelNode As Integer
  21. Dim LinkDrw As Boolean
  22. Dim LinkHDrw As Boolean
  23. Dim CurX, CurY
  24.  
  25. Public Sub LinkHandleDrawEnable(state As Boolean)
  26. LinkHDrw = state
  27. End Sub
  28.  
  29. Public Sub ReLenLinkEnable(state As Boolean)
  30. ReLenLinks = state
  31. End Sub
  32.  
  33. Public Sub LinkDrawEnable(state As Boolean)
  34. LinkDrw = state
  35. End Sub
  36.  
  37. Public Function GetLinkDat(ind) As Link
  38. GetLinkDat = Link(ind)
  39. End Function
  40.  
  41. Public Function GetNodeDat(ind) As Node
  42. GetNodeDat = Node(ind)
  43. End Function
  44.  
  45. Public Sub SetLinkDat(ind, flex, breakpoint, nobreak, rope)
  46. Link(ind).flex = flex
  47. Link(ind).breakpoint = breakpoint
  48. Link(ind).Indestuctable = nobreak
  49. Link(ind).rope = rope
  50. End Sub
  51.  
  52. Public Sub SetNodeDat(ind, mass, bounce, locked)
  53. Node(ind).mass = mass
  54. Node(ind).Bouce = bounce
  55. Node(ind).locked = locked
  56. End Sub
  57.  
  58. Public Function GetLinkHandle(X, Y) As Integer
  59. GetLinkHandle = 32000
  60. For i = 0 To 1000
  61. lX = Node(Link(i).Node1).X - ((Node(Link(i).Node1).X - Node(Link(i).Node2).X) / 2)
  62. lY = Node(Link(i).Node1).Y - ((Node(Link(i).Node1).Y - Node(Link(i).Node2).Y) / 2)
  63. If Abs(lX - X) < 100 And Abs(lY - Y) < 100 And lX > 0 And lY > 0 Then GetLinkHandle = i
  64. Next i
  65. End Function
  66.  
  67.  
  68. Public Sub StartMov(ind)
  69. MovTrue = True
  70. MovIndex = ind
  71. End Sub
  72.  
  73. Public Sub EndMov()
  74. MovTrue = False
  75. If ReLenLinks = True Then
  76.     For a = 0 To 1000
  77.         If Link(a).Node1 = MovIndex Or Link(a).Node2 = MovIndex Then Link(a).Lenth = Distance(Node(Link(a).Node1).X, Node(Link(a).Node1).Y, Node(Link(a).Node2).X, Node(Link(a).Node2).Y)
  78.     Next a
  79. End If
  80. End Sub
  81.  
  82. Public Sub UpdateCursor(X, Y)
  83. CurX = X
  84. CurY = Y
  85. If MovTrue = True Then
  86. Node(MovIndex).X = X
  87. Node(MovIndex).Y = Y
  88. End If
  89.  
  90. End Sub
  91.  
  92. Public Sub DeleteElement(X, Y)
  93. For i = 0 To 1000
  94. lX = Node(Link(i).Node1).X - ((Node(Link(i).Node1).X - Node(Link(i).Node2).X) / 2)
  95. lY = Node(Link(i).Node1).Y - ((Node(Link(i).Node1).Y - Node(Link(i).Node2).Y) / 2)
  96. If Abs(lX - X) < 100 And Abs(lY - Y) < 100 And lX > 0 And lY > 0 Then Link(i).Active = False
  97. Next i
  98. For i = 0 To 1000
  99.     If Abs(Node(i).X - X) < 100 And Abs(Node(i).Y - Y) < 100 And Node(i).X > 0 And Node(i).Y > 0 Then
  100.         Node(i).X = 0
  101.         Node(i).Y = 0
  102.         For a = 0 To 1000
  103.             If Link(a).Node1 = i Or Link(a).Node2 = i Then Link(a).Active = False
  104.         Next a
  105.         GoTo konec
  106.     End If
  107. Next i
  108.  
  109. konec:
  110. End Sub
  111.  
  112.  
  113. Public Sub TrasferModelToSim()
  114. For i = 0 To 1000
  115. SetNode i, Node(i)
  116. SetLink i, Link(i)
  117. Next i
  118. End Sub
  119.  
  120. Public Function SelectNode(X, Y) As Integer
  121. SelectNode = 32000
  122. SelNode = 32000
  123. For i = 0 To 1000
  124. If Abs(Node(i).X - X) < 100 And Abs(Node(i).Y - Y) < 100 And Node(i).X > 0 And Node(i).Y > 0 Then
  125. SelectNode = i
  126. SelNode = i
  127. Exit For
  128. End If
  129. Next i
  130. End Function
  131.  
  132. Public Sub AddLink(Node1, Node2, Flexing, breakpoint, Indestructable, rope)
  133. i = FreeLinkVar
  134. Link(i).Node1 = Node1
  135. Link(i).Node2 = Node2
  136. Link(i).flex = Flexing
  137. Link(i).breakpoint = breakpoint
  138. If Indestructable = 1 Then
  139. Link(i).Indestuctable = True
  140. Else
  141. Link(i).Indestuctable = False
  142. End If
  143.  
  144. If rope = 1 Then
  145. Link(i).rope = True
  146. Else
  147. Link(i).rope = False
  148. End If
  149.  
  150. Link(i).Active = True
  151.  
  152. Link(i).Lenth = Distance(Node(Node1).X, Node(Node1).Y, Node(Node2).X, Node(Node2).Y)
  153.  
  154. End Sub
  155.  
  156.  
  157. Public Sub AddNode(X, Y, mass, Bouce, locked)
  158. i = FreeNodeVar
  159. Node(i).X = X
  160. Node(i).Y = Y
  161. Node(i).mass = mass
  162. Node(i).Bouce = Bouce
  163. If locked = 1 Then
  164. Node(i).locked = True
  165. Else
  166. Node(i).locked = False
  167. End If
  168. End Sub
  169. Public Function MaxNodeID() As Integer
  170. For i = 0 To 1000
  171. If Node(i).X <> 0 And Node(i).Y <> 0 Then MaxNodeID = i
  172. Next i
  173. End Function
  174.  
  175. Public Function MaxLinkID() As Integer
  176. For i = 0 To 1000
  177. If Link(i).Active = True Then MaxLinkID = i
  178. Next i
  179. End Function
  180.  
  181.  
  182. Public Function FreeNodeVar()
  183. i = 0
  184. Do Until i = 1000
  185. If Node(i).X = 0 And Node(i).Y = 0 Then Exit Do
  186. i = i + 1
  187. Loop
  188. FreeNodeVar = i
  189. End Function
  190.  
  191. Public Function FreeLinkVar()
  192. i = 0
  193. Do Until i = 1000
  194. If Link(i).Active = False Then Exit Do
  195. i = i + 1
  196. Loop
  197. FreeLinkVar = i
  198. End Function
  199. Public Sub SaveModelEdit(FileName As String)
  200. Dim temp As String
  201. temp = temp & ModelName & vbNewLine
  202. temp = temp & Form2.Tgrav & vbNewLine
  203. temp = temp & Form2.Tair & vbNewLine
  204. temp = temp & "# Nodes" & vbNewLine
  205. For i = 0 To MaxNodeID
  206.     temp = temp & Node(i).X & vbNewLine
  207.     temp = temp & Node(i).Y & vbNewLine
  208.     temp = temp & Node(i).mass & vbNewLine
  209.     temp = temp & Node(i).Bouce & vbNewLine
  210.     If Node(i).locked = True Then
  211.         temp = temp & "1" & vbNewLine
  212.     Else
  213.         temp = temp & "0" & vbNewLine
  214.     End If
  215. Next i
  216. temp = temp & "# Links" & vbNewLine
  217. For i = 0 To MaxLinkID
  218.     temp = temp & Link(i).Node1 & vbNewLine
  219.     temp = temp & Link(i).Node2 & vbNewLine
  220.     temp = temp & Link(i).Lenth & vbNewLine
  221.     temp = temp & Link(i).flex & vbNewLine
  222.     temp = temp & Link(i).breakpoint & vbNewLine
  223.     If Link(i).Indestuctable = True Then
  224.         temp = temp & "1" & vbNewLine
  225.     Else
  226.         temp = temp & "0" & vbNewLine
  227.     End If
  228.     If Link(i).rope = True Then
  229.         temp = temp & "1" & vbNewLine
  230.     Else
  231.         temp = temp & "0" & vbNewLine
  232.     End If
  233. Next i
  234.  
  235. Open FileName For Output As #2
  236. Print #2, temp
  237. Close #2
  238. End Sub
  239.  
  240.  
  241. Public Sub LoadModelEdit(FileName As String)
  242. Open FileName For Input As #1
  243. Line Input #1, vrst
  244. ModelName = vrst
  245. Line Input #1, vrst
  246. Form2.Tgrav = vrst
  247. Line Input #1, vrst
  248. Form2.Tair = vrst
  249. Line Input #1, vrst
  250.  
  251. Do Until vrst = "# Links"
  252.     Line Input #1, vrst
  253.     If i > 1000 Or vrst = "# Links" Then Exit Do
  254.     Node(i).X = CLng(vrst)
  255.     Line Input #1, vrst
  256.     Node(i).Y = CLng(vrst)
  257.     Line Input #1, vrst
  258.     Node(i).mass = vrst
  259.     Line Input #1, vrst
  260.     Node(i).Bouce = vrst
  261.     Line Input #1, vrst
  262.     Node(i).locked = TrueOrFalse(vrst)
  263.     i = i + 1
  264. Loop
  265. i = 0
  266. Do Until EOF(1)
  267.     Line Input #1, vrst
  268.     If vrst = "" Then Exit Do
  269.     Link(i).Node1 = Int(vrst)
  270.     Line Input #1, vrst
  271.     Link(i).Node2 = Int(vrst)
  272.     Line Input #1, vrst
  273.     Link(i).Lenth = Int(vrst)
  274.     Line Input #1, vrst
  275.     Link(i).flex = Int(vrst)
  276.     Line Input #1, vrst
  277.     Link(i).breakpoint = Int(vrst)
  278.     Line Input #1, vrst
  279.     Link(i).Indestuctable = TrueOrFalse(vrst)
  280.     Line Input #1, vrst
  281.     Link(i).rope = TrueOrFalse(vrst)
  282.     Link(i).Active = True
  283.     i = i + 1
  284.     If i > 1000 Then Exit Do
  285. Loop
  286. Close #1
  287. End Sub
  288.  
  289. Public Sub ClearModel()
  290. For i = 0 To 1000
  291. Node(i).X = 0
  292. Node(i).Y = 0
  293. Link(i).Active = False
  294. Next i
  295. End Sub
  296.  
  297. Public Sub RenderEdit(img As Object)
  298. 'On Error Resume Next
  299. img.Cls
  300. For i = 0 To 1000
  301.     img.DrawWidth = DWLink
  302.     If Link(i).Active = True And Link(i).Broken = False Then
  303.         img.Line (Node(Link(i).Node1).X, Node(Link(i).Node1).Y)-(Node(Link(i).Node2).X, Node(Link(i).Node2).Y), ColorLink
  304.         img.DrawWidth = DWLinkH
  305.         If LinkHDrw = True Then img.PSet (Node(Link(i).Node1).X - ((Node(Link(i).Node1).X - Node(Link(i).Node2).X) / 2), Node(Link(i).Node1).Y - ((Node(Link(i).Node1).Y - Node(Link(i).Node2).Y)) / 2), ColorLinkH
  306.     End If
  307.     img.DrawWidth = DWNode
  308.     img.ForeColor = ColorText
  309.     If Node(i).X > 0 And Node(i).Y > 0 Then
  310.         If Node(i).locked = flase Then
  311.             img.PSet (Node(i).X, Node(i).Y), ColorNode
  312.             img.Print Str(i)
  313.         Else
  314.             img.PSet (Node(i).X, Node(i).Y), ColorNodeL
  315.             img.Print Str(i)
  316.         End If
  317.     End If
  318. Next i
  319. img.ForeColor = ColorLinkDraw
  320. img.DrawWidth = DWLinkDraw
  321. If SelNode < 1000 And LinkDrw = True Then
  322.     img.PSet (Node(SelNode).X, Node(SelNode).Y)
  323.     img.Line (Node(SelNode).X, Node(SelNode).Y)-(CurX, CurY)
  324. End If
  325. End Sub
  326.