DWS.Scene.pas 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061
  1. //
  2. // The graphics rendering engine GLScene http://glscene.org
  3. //
  4. unit DWS.Scene;
  5. (*
  6. DelphiWebScript symbol creation for base GLScene classes.
  7. This unit is dependent on dws2Classes and dws2VectorGeometry.
  8. These components must be associated with the same compiler
  9. for the GLScene classes to inherit from.
  10. *)
  11. interface
  12. uses
  13. System.Classes,
  14. System.SysUtils,
  15. GLS.Scene,
  16. GLS.VectorGeometry,
  17. GLS.Coordinates,
  18. DWS.HelperFunc,
  19. dwsExprs,
  20. dwsSymbols,
  21. dwsComp,
  22. dwsCompStrings,
  23. dwsStack,
  24. dwsFunctions;
  25. type
  26. TdwsGLSceneUnit = class(TdwsUnitComponent)
  27. private
  28. procedure AddClassTGLCoordinates(SymbolTable: TSymbolTable);
  29. procedure AddClassTGLBaseSceneObject(SymbolTable: TSymbolTable);
  30. protected
  31. procedure AddUnitSymbols(SymbolTable: TSymbolTable); override;
  32. public
  33. constructor Create(AOwner: TComponent); override;
  34. end;
  35. procedure Register;
  36. // --------------------------------------------------------
  37. implementation
  38. // --------------------------------------------------------
  39. // ----------
  40. // ---------- Internal class method class declarations ----------
  41. // ----------
  42. type
  43. // --------------------------
  44. // -------- TGLCoordinates
  45. // --------------------------
  46. TGLCoordinatesSetXMethod = class(TInternalMethod)
  47. public
  48. procedure Execute(var ExternalObject: TObject); override;
  49. end;
  50. TGLCoordinatesGetXMethod = class(TInternalMethod)
  51. public
  52. procedure Execute(var ExternalObject: TObject); override;
  53. end;
  54. TGLCoordinatesSetYMethod = class(TInternalMethod)
  55. public
  56. procedure Execute(var ExternalObject: TObject); override;
  57. end;
  58. TGLCoordinatesGetYMethod = class(TInternalMethod)
  59. public
  60. procedure Execute(var ExternalObject: TObject); override;
  61. end;
  62. TGLCoordinatesSetZMethod = class(TInternalMethod)
  63. public
  64. procedure Execute(var ExternalObject: TObject); override;
  65. end;
  66. TGLCoordinatesGetZMethod = class(TInternalMethod)
  67. public
  68. procedure Execute(var ExternalObject: TObject); override;
  69. end;
  70. TGLCoordinatesSetWMethod = class(TInternalMethod)
  71. public
  72. procedure Execute(var ExternalObject: TObject); override;
  73. end;
  74. TGLCoordinatesGetWMethod = class(TInternalMethod)
  75. public
  76. procedure Execute(var ExternalObject: TObject); override;
  77. end;
  78. TGLCoordinatesSetVectorMethod = class(TInternalMethod)
  79. public
  80. procedure Execute(var ExternalObject: TObject); override;
  81. end;
  82. TGLCoordinatesSetPointMethod = class(TInternalMethod)
  83. public
  84. procedure Execute(var ExternalObject: TObject); override;
  85. end;
  86. TGLCoordinatesSetToZeroMethod = class(TInternalMethod)
  87. public
  88. procedure Execute(var ExternalObject: TObject); override;
  89. end;
  90. TGLCoordinatesSetAsVectorMethod = class(TInternalMethod)
  91. public
  92. procedure Execute(var ExternalObject: TObject); override;
  93. end;
  94. TGLCoordinatesGetAsVectorMethod = class(TInternalMethod)
  95. public
  96. procedure Execute(var ExternalObject: TObject); override;
  97. end;
  98. TGLCoordinatesGetAsStringMethod = class(TInternalMethod)
  99. public
  100. procedure Execute(var ExternalObject: TObject); override;
  101. end;
  102. TGLCoordinatesTranslateMethod = class(TInternalMethod)
  103. public
  104. procedure Execute(var ExternalObject: TObject); override;
  105. end;
  106. TGLCoordinatesAddScaledVectorMethod = class(TInternalMethod)
  107. public
  108. procedure Execute(var ExternalObject: TObject); override;
  109. end;
  110. TGLCoordinatesRotateMethod = class(TInternalMethod)
  111. public
  112. procedure Execute(var ExternalObject: TObject); override;
  113. end;
  114. TGLCoordinatesNormalizeMethod = class(TInternalMethod)
  115. public
  116. procedure Execute(var ExternalObject: TObject); override;
  117. end;
  118. TGLCoordinatesInvertMethod = class(TInternalMethod)
  119. public
  120. procedure Execute(var ExternalObject: TObject); override;
  121. end;
  122. TGLCoordinatesScaleMethod = class(TInternalMethod)
  123. public
  124. procedure Execute(var ExternalObject: TObject); override;
  125. end;
  126. TGLCoordinatesEqualsMethod = class(TInternalMethod)
  127. public
  128. procedure Execute(var ExternalObject: TObject); override;
  129. end;
  130. // --------------------------
  131. // TGLBaseSceneObject
  132. // --------------------------
  133. TGLBaseSceneObjectSetVisibleMethod = class(TInternalMethod)
  134. public
  135. procedure Execute(var ExternalObject: TObject); override;
  136. end;
  137. TGLBaseSceneObjectGetVisibleMethod = class(TInternalMethod)
  138. public
  139. procedure Execute(var ExternalObject: TObject); override;
  140. end;
  141. TGLBaseSceneObjectSetMatrixMethod = class(TInternalMethod)
  142. public
  143. procedure Execute(var ExternalObject: TObject); override;
  144. end;
  145. TGLBaseSceneObjectGetMatrixMethod = class(TInternalMethod)
  146. public
  147. procedure Execute(var ExternalObject: TObject); override;
  148. end;
  149. TGLBaseSceneObjectAbsoluteMatrixMethod = class(TInternalMethod)
  150. public
  151. procedure Execute(var ExternalObject: TObject); override;
  152. end;
  153. TGLBaseSceneObjectInvAbsoluteMatrixMethod = class(TInternalMethod)
  154. public
  155. procedure Execute(var ExternalObject: TObject); override;
  156. end;
  157. TGLBaseSceneObjectSetAbsolutePositionMethod = class(TInternalMethod)
  158. public
  159. procedure Execute(var ExternalObject: TObject); override;
  160. end;
  161. TGLBaseSceneObjectGetAbsolutePositionMethod = class(TInternalMethod)
  162. public
  163. procedure Execute(var ExternalObject: TObject); override;
  164. end;
  165. TGLBaseSceneObjectSetAbsoluteUpMethod = class(TInternalMethod)
  166. public
  167. procedure Execute(var ExternalObject: TObject); override;
  168. end;
  169. TGLBaseSceneObjectGetAbsoluteUpMethod = class(TInternalMethod)
  170. public
  171. procedure Execute(var ExternalObject: TObject); override;
  172. end;
  173. TGLBaseSceneObjectSetAbsoluteDirectionMethod = class(TInternalMethod)
  174. public
  175. procedure Execute(var ExternalObject: TObject); override;
  176. end;
  177. TGLBaseSceneObjectGetAbsoluteDirectionMethod = class(TInternalMethod)
  178. public
  179. procedure Execute(var ExternalObject: TObject); override;
  180. end;
  181. TGLBaseSceneObjectSetPositionMethod = class(TInternalMethod)
  182. public
  183. procedure Execute(var ExternalObject: TObject); override;
  184. end;
  185. TGLBaseSceneObjectGetPositionMethod = class(TInternalMethod)
  186. public
  187. procedure Execute(var ExternalObject: TObject); override;
  188. end;
  189. TGLBaseSceneObjectSetDirectionMethod = class(TInternalMethod)
  190. public
  191. procedure Execute(var ExternalObject: TObject); override;
  192. end;
  193. TGLBaseSceneObjectGetDirectionMethod = class(TInternalMethod)
  194. public
  195. procedure Execute(var ExternalObject: TObject); override;
  196. end;
  197. TGLBaseSceneObjectSetUpMethod = class(TInternalMethod)
  198. public
  199. procedure Execute(var ExternalObject: TObject); override;
  200. end;
  201. TGLBaseSceneObjectGetUpMethod = class(TInternalMethod)
  202. public
  203. procedure Execute(var ExternalObject: TObject); override;
  204. end;
  205. TGLBaseSceneObjectSetScaleMethod = class(TInternalMethod)
  206. public
  207. procedure Execute(var ExternalObject: TObject); override;
  208. end;
  209. TGLBaseSceneObjectGetScaleMethod = class(TInternalMethod)
  210. public
  211. procedure Execute(var ExternalObject: TObject); override;
  212. end;
  213. TGLBaseSceneObjectSetPitchAngleMethod = class(TInternalMethod)
  214. public
  215. procedure Execute(var ExternalObject: TObject); override;
  216. end;
  217. TGLBaseSceneObjectGetPitchAngleMethod = class(TInternalMethod)
  218. public
  219. procedure Execute(var ExternalObject: TObject); override;
  220. end;
  221. TGLBaseSceneObjectSetTurnAngleMethod = class(TInternalMethod)
  222. public
  223. procedure Execute(var ExternalObject: TObject); override;
  224. end;
  225. TGLBaseSceneObjectGetTurnAngleMethod = class(TInternalMethod)
  226. public
  227. procedure Execute(var ExternalObject: TObject); override;
  228. end;
  229. TGLBaseSceneObjectSetRollAngleMethod = class(TInternalMethod)
  230. public
  231. procedure Execute(var ExternalObject: TObject); override;
  232. end;
  233. TGLBaseSceneObjectGetRollAngleMethod = class(TInternalMethod)
  234. public
  235. procedure Execute(var ExternalObject: TObject); override;
  236. end;
  237. TGLBaseSceneObjectPitchMethod = class(TInternalMethod)
  238. public
  239. procedure Execute(var ExternalObject: TObject); override;
  240. end;
  241. TGLBaseSceneObjectTurnMethod = class(TInternalMethod)
  242. public
  243. procedure Execute(var ExternalObject: TObject); override;
  244. end;
  245. TGLBaseSceneObjectRollMethod = class(TInternalMethod)
  246. public
  247. procedure Execute(var ExternalObject: TObject); override;
  248. end;
  249. TGLBaseSceneObjectMoveMethod = class(TInternalMethod)
  250. public
  251. procedure Execute(var ExternalObject: TObject); override;
  252. end;
  253. TGLBaseSceneObjectAddChildMethod = class(TInternalMethod)
  254. public
  255. procedure Execute(var ExternalObject: TObject); override;
  256. end;
  257. // ----------
  258. // ---------- Vector/Matrix to/from IInfo helper functions ----------
  259. // ----------
  260. function GetVectorFromInfo(Info: IInfo): TGLVector;
  261. begin
  262. Result := VectorMake(Info.Element([0]).Value, Info.Element([1]).Value,
  263. Info.Element([2]).Value, Info.Element([3]).Value);
  264. end;
  265. procedure SetInfoFromVector(Info: IInfo; vec: TGLVector);
  266. var
  267. i: Integer;
  268. begin
  269. for i := 0 to 3 do
  270. Info.Element([i]).Value := vec[i];
  271. end;
  272. function GetMatrixFromInfo(Info: IInfo): TGLMatrix;
  273. var
  274. i: Integer;
  275. begin
  276. for i := 0 to 3 do
  277. Result[i] := VectorMake(Info.Element([i]).Element([0]).Value,
  278. Info.Element([i]).Element([1]).Value, Info.Element([i]).Element([2])
  279. .Value, Info.Element([i]).Element([3]).Value);
  280. end;
  281. procedure SetInfoFromMatrix(Info: IInfo; mat: TGLMatrix);
  282. var
  283. i, j: Integer;
  284. begin
  285. for i := 0 to 3 do
  286. for j := 0 to 3 do
  287. Info.Element([i]).Element([j]).Value := mat[i][j];
  288. end;
  289. // ----------
  290. // ---------- Internal class method execute procedures ----------
  291. // ----------
  292. // TGLCoordinates internal class methods
  293. // TGLCoordinates.X write access
  294. procedure TGLCoordinatesSetXMethod.Execute(var ExternalObject: TObject);
  295. begin
  296. ValidateExternalObject(ExternalObject, TGLCoordinates);
  297. TGLCoordinates(ExternalObject).X := Info['Value'];
  298. end;
  299. // TGLCoordinates.X read access
  300. procedure TGLCoordinatesGetXMethod.Execute(var ExternalObject: TObject);
  301. begin
  302. ValidateExternalObject(ExternalObject, TGLCoordinates);
  303. Info.Result := TGLCoordinates(ExternalObject).X;
  304. end;
  305. // TGLCoordinates.Y write access
  306. procedure TGLCoordinatesSetYMethod.Execute(var ExternalObject: TObject);
  307. begin
  308. ValidateExternalObject(ExternalObject, TGLCoordinates);
  309. TGLCoordinates(ExternalObject).Y := Info['Value'];
  310. end;
  311. // TGLCoordinates.Y read access
  312. procedure TGLCoordinatesGetYMethod.Execute(var ExternalObject: TObject);
  313. begin
  314. ValidateExternalObject(ExternalObject, TGLCoordinates);
  315. Info.Result := TGLCoordinates(ExternalObject).Y;
  316. end;
  317. // TGLCoordinates.Z write access
  318. procedure TGLCoordinatesSetZMethod.Execute(var ExternalObject: TObject);
  319. begin
  320. ValidateExternalObject(ExternalObject, TGLCoordinates);
  321. TGLCoordinates(ExternalObject).Z := Info['Value'];
  322. end;
  323. // TGLCoordinates.Z read access
  324. procedure TGLCoordinatesGetZMethod.Execute(var ExternalObject: TObject);
  325. begin
  326. ValidateExternalObject(ExternalObject, TGLCoordinates);
  327. Info.Result := TGLCoordinates(ExternalObject).Z;
  328. end;
  329. // TGLCoordinates.W write access
  330. procedure TGLCoordinatesSetWMethod.Execute(var ExternalObject: TObject);
  331. begin
  332. ValidateExternalObject(ExternalObject, TGLCoordinates);
  333. TGLCoordinates(ExternalObject).W := Info['Value'];
  334. end;
  335. // TGLCoordinates.W read access
  336. procedure TGLCoordinatesGetWMethod.Execute(var ExternalObject: TObject);
  337. begin
  338. ValidateExternalObject(ExternalObject, TGLCoordinates);
  339. Info.Result := TGLCoordinates(ExternalObject).W;
  340. end;
  341. // TGLCoordinates.SetVector
  342. procedure TGLCoordinatesSetVectorMethod.Execute(var ExternalObject: TObject);
  343. begin
  344. ValidateExternalObject(ExternalObject, TGLCoordinates);
  345. TGLCoordinates(ExternalObject).SetVector(Info['x'], Info['y'], Info['z'],
  346. Info['w']);
  347. end;
  348. // TGLCoordinates.SetPoint
  349. procedure TGLCoordinatesSetPointMethod.Execute(var ExternalObject: TObject);
  350. begin
  351. ValidateExternalObject(ExternalObject, TGLCoordinates);
  352. TGLCoordinates(ExternalObject).SetPoint(Info['x'], Info['y'], Info['z']);
  353. end;
  354. // TGLCoordinates.AsVector write access
  355. procedure TGLCoordinatesSetAsVectorMethod.Execute(var ExternalObject: TObject);
  356. var
  357. v: TGLVector;
  358. begin
  359. ValidateExternalObject(ExternalObject, TGLCoordinates);
  360. v := GetVectorFromInfo(Info.Vars['Value']);
  361. TGLCoordinates(ExternalObject).AsVector := v;
  362. end;
  363. // TGLCoordinates.AsVector read access
  364. procedure TGLCoordinatesGetAsVectorMethod.Execute(var ExternalObject: TObject);
  365. var
  366. v: TGLVector;
  367. begin
  368. ValidateExternalObject(ExternalObject, TGLCoordinates);
  369. v := TGLCoordinates(ExternalObject).AsVector;
  370. SetInfoFromVector(Info.Vars['Result'], v);
  371. end;
  372. // TGLCoordinates.AsString read access
  373. procedure TGLCoordinatesGetAsStringMethod.Execute(var ExternalObject: TObject);
  374. begin
  375. ValidateExternalObject(ExternalObject, TGLCoordinates);
  376. Info.Result := TGLCoordinates(ExternalObject).AsString;
  377. end;
  378. // TGLCoordinates.Translate
  379. procedure TGLCoordinatesTranslateMethod.Execute(var ExternalObject: TObject);
  380. var
  381. v: TGLVector;
  382. begin
  383. ValidateExternalObject(ExternalObject, TGLCoordinates);
  384. v := GetVectorFromInfo(Info.Vars['translationVector']);
  385. TGLCoordinates(ExternalObject).Translate(v);
  386. end;
  387. // TGLCoordinates.AddScaledVector
  388. procedure TGLCoordinatesAddScaledVectorMethod.Execute(var ExternalObject
  389. : TObject);
  390. var
  391. v: TGLVector;
  392. begin
  393. ValidateExternalObject(ExternalObject, TGLCoordinates);
  394. v := GetVectorFromInfo(Info.Vars['translationVector']);
  395. TGLCoordinates(ExternalObject).AddScaledVector(Info['factor'], v);
  396. end;
  397. // TGLCoordinates.Rotate
  398. procedure TGLCoordinatesRotateMethod.Execute(var ExternalObject: TObject);
  399. var
  400. v: TGLVector;
  401. begin
  402. ValidateExternalObject(ExternalObject, TGLCoordinates);
  403. v := GetVectorFromInfo(Info.Vars['anAxis']);
  404. TGLCoordinates(ExternalObject).Rotate(v, Info['anAngle']);
  405. end;
  406. // TGLCoordinates.Normalize
  407. procedure TGLCoordinatesNormalizeMethod.Execute(var ExternalObject: TObject);
  408. begin
  409. ValidateExternalObject(ExternalObject, TGLCoordinates);
  410. TGLCoordinates(ExternalObject).Normalize;
  411. end;
  412. // TGLCoordinates.Invert
  413. procedure TGLCoordinatesInvertMethod.Execute(var ExternalObject: TObject);
  414. begin
  415. ValidateExternalObject(ExternalObject, TGLCoordinates);
  416. TGLCoordinates(ExternalObject).Invert;
  417. end;
  418. // TGLCoordinates.Scale
  419. procedure TGLCoordinatesScaleMethod.Execute(var ExternalObject: TObject);
  420. begin
  421. ValidateExternalObject(ExternalObject, TGLCoordinates);
  422. TGLCoordinates(ExternalObject).Scale(Info['factor']);
  423. end;
  424. // TGLCoordinates.Equals
  425. procedure TGLCoordinatesEqualsMethod.Execute(var ExternalObject: TObject);
  426. var
  427. v: TGLVector;
  428. begin
  429. ValidateExternalObject(ExternalObject, TGLCoordinates);
  430. v := GetVectorFromInfo(Info.Vars['aVector']);
  431. Info.Result := TGLCoordinates(ExternalObject).Equals(v);
  432. end;
  433. // TGLCoordinates.SetToZero
  434. procedure TGLCoordinatesSetToZeroMethod.Execute(var ExternalObject: TObject);
  435. begin
  436. ValidateExternalObject(ExternalObject, TGLCoordinates);
  437. TGLCoordinates(ExternalObject).SetToZero;
  438. end;
  439. // TGLBaseSceneObject internal class methods
  440. // TGLBaseSceneObject.SetVisible
  441. procedure TGLBaseSceneObjectSetVisibleMethod.Execute(var ExternalObject
  442. : TObject);
  443. begin
  444. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  445. TGLBaseSceneObject(ExternalObject).Visible := Info.Vars['Value'].Value;
  446. end;
  447. // TGLBaseSceneObject.GetVisible
  448. procedure TGLBaseSceneObjectGetVisibleMethod.Execute(var ExternalObject
  449. : TObject);
  450. begin
  451. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  452. Info.Result := TGLBaseSceneObject(ExternalObject).Visible;
  453. end;
  454. // TGLBaseSceneObject.SetMatrix
  455. procedure TGLBaseSceneObjectSetMatrixMethod.Execute(var ExternalObject
  456. : TObject);
  457. begin
  458. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  459. TGLBaseSceneObject(ExternalObject).Matrix :=
  460. GetMatrixFromInfo(Info.Vars['Value']);
  461. end;
  462. // TGLBaseSceneObject.GetMatrix
  463. procedure TGLBaseSceneObjectGetMatrixMethod.Execute(var ExternalObject
  464. : TObject);
  465. begin
  466. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  467. SetInfoFromMatrix(Info.Vars['Result'],
  468. TGLBaseSceneObject(ExternalObject).Matrix);
  469. end;
  470. // TGLBaseSceneObject.AbsoluteMatrix
  471. procedure TGLBaseSceneObjectAbsoluteMatrixMethod.Execute(var ExternalObject
  472. : TObject);
  473. begin
  474. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  475. SetInfoFromMatrix(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
  476. .AbsoluteMatrix);
  477. end;
  478. // TGLBaseSceneObject.InvAbsoluteMatrix
  479. procedure TGLBaseSceneObjectInvAbsoluteMatrixMethod.Execute(var ExternalObject
  480. : TObject);
  481. begin
  482. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  483. SetInfoFromMatrix(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
  484. .InvAbsoluteMatrix);
  485. end;
  486. // TGLBaseSceneObject.SetAbsolutePosition
  487. procedure TGLBaseSceneObjectSetAbsolutePositionMethod.Execute(var ExternalObject
  488. : TObject);
  489. begin
  490. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  491. TGLBaseSceneObject(ExternalObject).AbsolutePosition :=
  492. GetVectorFromInfo(Info.Vars['Value']);
  493. end;
  494. // TGLBaseSceneObject.GetAbsolutePosition
  495. procedure TGLBaseSceneObjectGetAbsolutePositionMethod.Execute(var ExternalObject
  496. : TObject);
  497. begin
  498. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  499. SetInfoFromVector(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
  500. .AbsolutePosition);
  501. end;
  502. // TGLBaseSceneObject.SetAbsoluteUp
  503. procedure TGLBaseSceneObjectSetAbsoluteUpMethod.Execute(var ExternalObject
  504. : TObject);
  505. begin
  506. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  507. TGLBaseSceneObject(ExternalObject).AbsoluteUp :=
  508. GetVectorFromInfo(Info.Vars['Value']);
  509. end;
  510. // TGLBaseSceneObject.GetAbsoluteUp
  511. procedure TGLBaseSceneObjectGetAbsoluteUpMethod.Execute(var ExternalObject
  512. : TObject);
  513. begin
  514. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  515. SetInfoFromVector(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
  516. .AbsoluteUp);
  517. end;
  518. // TGLBaseSceneObject.SetAbsoluteDirection
  519. procedure TGLBaseSceneObjectSetAbsoluteDirectionMethod.Execute
  520. (var ExternalObject: TObject);
  521. begin
  522. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  523. TGLBaseSceneObject(ExternalObject).AbsoluteDirection :=
  524. GetVectorFromInfo(Info.Vars['Value']);
  525. end;
  526. // TGLBaseSceneObject.GetAbsoluteDirection
  527. procedure TGLBaseSceneObjectGetAbsoluteDirectionMethod.Execute
  528. (var ExternalObject: TObject);
  529. begin
  530. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  531. SetInfoFromVector(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
  532. .AbsoluteDirection);
  533. end;
  534. // TGLBaseSceneObject.Position write access
  535. procedure TGLBaseSceneObjectSetPositionMethod.Execute(var ExternalObject
  536. : TObject);
  537. var
  538. Value: TGLCoordinates;
  539. begin
  540. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  541. Value := TGLCoordinates(Info.GetExternalObjForVar('Value'));
  542. TGLBaseSceneObject(ExternalObject).Position := Value;
  543. end;
  544. // TGLBaseSceneObject.Position read access
  545. procedure TGLBaseSceneObjectGetPositionMethod.Execute(var ExternalObject
  546. : TObject);
  547. begin
  548. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  549. Info.Result := Info.RegisterExternalObject(TGLBaseSceneObject(ExternalObject)
  550. .Position);
  551. end;
  552. // TGLBaseSceneObject.Direction write access
  553. procedure TGLBaseSceneObjectSetDirectionMethod.Execute(var ExternalObject
  554. : TObject);
  555. var
  556. Value: TGLCoordinates;
  557. begin
  558. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  559. Value := TGLCoordinates(Info.GetExternalObjForVar('Value'));
  560. TGLBaseSceneObject(ExternalObject).Direction := Value;
  561. end;
  562. // TGLBaseSceneObject.Direction read access
  563. procedure TGLBaseSceneObjectGetDirectionMethod.Execute(var ExternalObject
  564. : TObject);
  565. begin
  566. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  567. Info.Result := Info.RegisterExternalObject(TGLBaseSceneObject(ExternalObject)
  568. .Direction);
  569. end;
  570. // TGLBaseSceneObject.Up write access
  571. procedure TGLBaseSceneObjectSetUpMethod.Execute(var ExternalObject: TObject);
  572. var
  573. Value: TGLCoordinates;
  574. begin
  575. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  576. Value := TGLCoordinates(Info.GetExternalObjForVar('Value'));
  577. TGLBaseSceneObject(ExternalObject).Up := Value;
  578. end;
  579. // TGLBaseSceneObject.Up read access
  580. procedure TGLBaseSceneObjectGetUpMethod.Execute(var ExternalObject: TObject);
  581. begin
  582. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  583. Info.Result := Info.RegisterExternalObject
  584. (TGLBaseSceneObject(ExternalObject).Up);
  585. end;
  586. // TGLBaseSceneObject.Scale write access
  587. procedure TGLBaseSceneObjectSetScaleMethod.Execute(var ExternalObject: TObject);
  588. var
  589. Value: TGLCoordinates;
  590. begin
  591. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  592. Value := TGLCoordinates(Info.GetExternalObjForVar('Value'));
  593. TGLBaseSceneObject(ExternalObject).Scale := Value;
  594. end;
  595. // TGLBaseSceneObject.Scale read access
  596. procedure TGLBaseSceneObjectGetScaleMethod.Execute(var ExternalObject: TObject);
  597. begin
  598. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  599. Info.Result := Info.RegisterExternalObject
  600. (TGLBaseSceneObject(ExternalObject).Scale);
  601. end;
  602. // TGLBaseSceneObject.PitchAngle write access
  603. procedure TGLBaseSceneObjectSetPitchAngleMethod.Execute(var ExternalObject
  604. : TObject);
  605. begin
  606. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  607. TGLBaseSceneObject(ExternalObject).PitchAngle := Info.Vars['Value'].Value;
  608. end;
  609. // TGLBaseSceneObject.PitchAngle read access
  610. procedure TGLBaseSceneObjectGetPitchAngleMethod.Execute(var ExternalObject
  611. : TObject);
  612. begin
  613. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  614. Info.Result := TGLBaseSceneObject(ExternalObject).PitchAngle;
  615. end;
  616. // TGLBaseSceneObject.TurnAngle write access
  617. procedure TGLBaseSceneObjectSetTurnAngleMethod.Execute(var ExternalObject
  618. : TObject);
  619. begin
  620. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  621. TGLBaseSceneObject(ExternalObject).TurnAngle := Info.Vars['Value'].Value;
  622. end;
  623. // TGLBaseSceneObject.TurnAngle read access
  624. procedure TGLBaseSceneObjectGetTurnAngleMethod.Execute(var ExternalObject
  625. : TObject);
  626. begin
  627. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  628. Info.Result := TGLBaseSceneObject(ExternalObject).TurnAngle;
  629. end;
  630. // TGLBaseSceneObject.RollAngle write access
  631. procedure TGLBaseSceneObjectSetRollAngleMethod.Execute(var ExternalObject
  632. : TObject);
  633. begin
  634. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  635. TGLBaseSceneObject(ExternalObject).RollAngle := Info.Vars['Value'].Value;
  636. end;
  637. // TGLBaseSceneObject.RollAngle read access
  638. procedure TGLBaseSceneObjectGetRollAngleMethod.Execute(var ExternalObject
  639. : TObject);
  640. begin
  641. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  642. Info.Result := TGLBaseSceneObject(ExternalObject).RollAngle;
  643. end;
  644. // TGLBaseSceneObject.Pitch
  645. procedure TGLBaseSceneObjectPitchMethod.Execute(var ExternalObject: TObject);
  646. begin
  647. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  648. TGLBaseSceneObject(ExternalObject).Pitch(Info['angle']);
  649. end;
  650. // TGLBaseSceneObject.Turn
  651. procedure TGLBaseSceneObjectTurnMethod.Execute(var ExternalObject: TObject);
  652. begin
  653. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  654. TGLBaseSceneObject(ExternalObject).Turn(Info['angle']);
  655. end;
  656. // TGLBaseSceneObject.Roll
  657. procedure TGLBaseSceneObjectRollMethod.Execute(var ExternalObject: TObject);
  658. begin
  659. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  660. TGLBaseSceneObject(ExternalObject).Roll(Info['angle']);
  661. end;
  662. // TGLBaseSceneObject.Move
  663. procedure TGLBaseSceneObjectMoveMethod.Execute(var ExternalObject: TObject);
  664. begin
  665. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  666. TGLBaseSceneObject(ExternalObject).Move(Info['ADistance']);
  667. end;
  668. // TGLBaseSceneObject.AddChild
  669. procedure TGLBaseSceneObjectAddChildMethod.Execute(var ExternalObject: TObject);
  670. var
  671. AChild: TObject;
  672. begin
  673. ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
  674. AChild := Info.GetExternalObjForVar('AChild');
  675. if not Assigned(AChild) then
  676. raise Exception.Create('AChild parameter is unassigned.');
  677. if not(AChild is TGLBaseSceneObject) then
  678. Exception.Create
  679. ('AChild parameter is not inheriting from TGLBaseSceneObject.');
  680. TGLBaseSceneObject(ExternalObject).AddChild(TGLBaseSceneObject(AChild));
  681. end;
  682. // ----------
  683. // ---------- Global procedures/functions ----------
  684. // ----------
  685. procedure Register;
  686. begin
  687. RegisterComponents('GLScene DWS2', [Tdws2GLSceneUnit]);
  688. end;
  689. // ----------
  690. // ---------- TdwsGLSceneUnit ----------
  691. // ----------
  692. constructor TdwsGLSceneUnit.Create(AOwner: TComponent);
  693. begin
  694. inherited;
  695. FUnitName := 'GLScene';
  696. with FDependencies do
  697. begin
  698. Add('Classes');
  699. Add('GLS.VectorGeometry');
  700. end;
  701. end;
  702. procedure TdwsGLSceneUnit.AddClassTGLCoordinates(SymbolTable: TSymbolTable);
  703. var
  704. ClassSym: TClassSymbol;
  705. begin
  706. ClassSym := TClassSymbol(AddClassSymbol(SymbolTable, 'TGLCoordinates',
  707. 'TPersistent'));
  708. // Methods
  709. if not Assigned(ClassSym.Members.FindLocal('SetX')) then
  710. TGLCoordinatesSetXMethod.Create(mkProcedure, [], 0, 'SetX',
  711. ['Value', 'Float'], '', ClassSym, SymbolTable);
  712. if not Assigned(ClassSym.Members.FindLocal('GetX')) then
  713. TGLCoordinatesGetXMethod.Create(mkFunction, [], 0, 'GetX', [], 'Float',
  714. ClassSym, SymbolTable);
  715. if not Assigned(ClassSym.Members.FindLocal('SetY')) then
  716. TGLCoordinatesSetYMethod.Create(mkProcedure, [], 0, 'SetY',
  717. ['Value', 'Float'], '', ClassSym, SymbolTable);
  718. if not Assigned(ClassSym.Members.FindLocal('GetY')) then
  719. TGLCoordinatesGetYMethod.Create(mkFunction, [], 0, 'GetY', [], 'Float',
  720. ClassSym, SymbolTable);
  721. if not Assigned(ClassSym.Members.FindLocal('SetZ')) then
  722. TGLCoordinatesSetZMethod.Create(mkProcedure, [], 0, 'SetZ',
  723. ['Value', 'Float'], '', ClassSym, SymbolTable);
  724. if not Assigned(ClassSym.Members.FindLocal('GetZ')) then
  725. TGLCoordinatesGetZMethod.Create(mkFunction, [], 0, 'GetZ', [], 'Float',
  726. ClassSym, SymbolTable);
  727. if not Assigned(ClassSym.Members.FindLocal('SetW')) then
  728. TGLCoordinatesSetWMethod.Create(mkProcedure, [], 0, 'SetW',
  729. ['Value', 'Float'], '', ClassSym, SymbolTable);
  730. if not Assigned(ClassSym.Members.FindLocal('GetW')) then
  731. TGLCoordinatesGetWMethod.Create(mkFunction, [], 0, 'GetW', [], 'Float',
  732. ClassSym, SymbolTable);
  733. if not Assigned(ClassSym.Members.FindLocal('SetVector')) then
  734. TGLCoordinatesSetVectorMethod.Create(mkProcedure, [], 0, 'SetVector',
  735. ['x', 'Float', 'y', 'Float', 'z', 'Float', 'w', 'Float'], '', ClassSym,
  736. SymbolTable);
  737. if not Assigned(ClassSym.Members.FindLocal('SetPoint')) then
  738. TGLCoordinatesSetPointMethod.Create(mkProcedure, [], 0, 'SetPoint',
  739. ['x', 'Float', 'y', 'Float', 'z', 'Float'], '', ClassSym, SymbolTable);
  740. if not Assigned(ClassSym.Members.FindLocal('SetToZero')) then
  741. TGLCoordinatesSetToZeroMethod.Create(mkProcedure, [], 0, 'SetToZero', [],
  742. '', ClassSym, SymbolTable);
  743. if not Assigned(ClassSym.Members.FindLocal('SetAsVector')) then
  744. TGLCoordinatesSetAsVectorMethod.Create(mkProcedure, [], 0, 'SetAsVector',
  745. ['Value', 'TGLVector'], '', ClassSym, SymbolTable);
  746. if not Assigned(ClassSym.Members.FindLocal('GetAsVector')) then
  747. TGLCoordinatesGetAsVectorMethod.Create(mkFunction, [], 0, 'GetAsVector', [],
  748. 'TGLVector', ClassSym, SymbolTable);
  749. if not Assigned(ClassSym.Members.FindLocal('GetAsString')) then
  750. TGLCoordinatesGetAsStringMethod.Create(mkFunction, [], 0, 'GetAsString', [],
  751. 'String', ClassSym, SymbolTable);
  752. if not Assigned(ClassSym.Members.FindLocal('Translate')) then
  753. TGLCoordinatesTranslateMethod.Create(mkProcedure, [], 0, 'Translate',
  754. ['translationVector', 'TGLVector'], '', ClassSym, SymbolTable);
  755. if not Assigned(ClassSym.Members.FindLocal('AddScaledVector')) then
  756. TGLCoordinatesAddScaledVectorMethod.Create(mkProcedure, [], 0,
  757. 'AddScaledVector', ['factor', 'Float', 'translationVector', 'TGLVector'],
  758. '', ClassSym, SymbolTable);
  759. if not Assigned(ClassSym.Members.FindLocal('Rotate')) then
  760. TGLCoordinatesRotateMethod.Create(mkProcedure, [], 0, 'Rotate',
  761. ['anAxis', 'TGLVector', 'anAngle', 'Float'], '', ClassSym, SymbolTable);
  762. if not Assigned(ClassSym.Members.FindLocal('Normalize')) then
  763. TGLCoordinatesNormalizeMethod.Create(mkProcedure, [], 0, 'Normalize', [],
  764. '', ClassSym, SymbolTable);
  765. if not Assigned(ClassSym.Members.FindLocal('Invert')) then
  766. TGLCoordinatesInvertMethod.Create(mkProcedure, [], 0, 'Invert', [], '',
  767. ClassSym, SymbolTable);
  768. if not Assigned(ClassSym.Members.FindLocal('Scale')) then
  769. TGLCoordinatesScaleMethod.Create(mkProcedure, [], 0, 'Scale',
  770. ['factor', 'Float'], '', ClassSym, SymbolTable);
  771. if not Assigned(ClassSym.Members.FindLocal('Equals')) then
  772. TGLCoordinatesEqualsMethod.Create(mkFunction, [], 0, 'Equals',
  773. ['aVector', 'TGLVector'], 'Boolean', ClassSym, SymbolTable);
  774. // Properties
  775. AddPropertyToClass('X', 'Float', 'GetX', 'SetX', '', False, ClassSym,
  776. SymbolTable);
  777. AddPropertyToClass('Y', 'Float', 'GetY', 'SetY', '', False, ClassSym,
  778. SymbolTable);
  779. AddPropertyToClass('Z', 'Float', 'GetZ', 'SetZ', '', False, ClassSym,
  780. SymbolTable);
  781. AddPropertyToClass('AsVector', 'TGLVector', 'GetAsVector', 'SetAsVector', '',
  782. False, ClassSym, SymbolTable);
  783. AddPropertyToClass('AsString', 'String', 'GetAsString', '', '', False,
  784. ClassSym, SymbolTable);
  785. end;
  786. procedure TdwsGLSceneUnit.AddClassTGLBaseSceneObject(SymbolTable: TSymbolTable);
  787. var
  788. ClassSym: TClassSymbol;
  789. begin
  790. ClassSym := TClassSymbol(AddClassSymbol(SymbolTable, 'TGLBaseSceneObject',
  791. 'TComponent'));
  792. // Methods
  793. if not Assigned(ClassSym.Members.FindLocal('SetVisible')) then
  794. TGLBaseSceneObjectSetVisibleMethod.Create(mkProcedure, [], 0, 'SetVisible',
  795. ['Value', 'Boolean'], '', ClassSym, SymbolTable);
  796. if not Assigned(ClassSym.Members.FindLocal('GetVisible')) then
  797. TGLBaseSceneObjectGetVisibleMethod.Create(mkFunction, [], 0, 'GetVisible',
  798. [], 'Boolean', ClassSym, SymbolTable);
  799. if not Assigned(ClassSym.Members.FindLocal('SetMatrix')) then
  800. TGLBaseSceneObjectSetMatrixMethod.Create(mkProcedure, [], 0, 'SetMatrix',
  801. ['Value', 'TGLMatrix'], '', ClassSym, SymbolTable);
  802. if not Assigned(ClassSym.Members.FindLocal('GetMatrix')) then
  803. TGLBaseSceneObjectGetMatrixMethod.Create(mkFunction, [], 0, 'GetMatrix', [],
  804. 'TGLMatrix', ClassSym, SymbolTable);
  805. if not Assigned(ClassSym.Members.FindLocal('AbsoluteMatrix')) then
  806. TGLBaseSceneObjectAbsoluteMatrixMethod.Create(mkFunction, [], 0,
  807. 'AbsoluteMatrix', [], 'TGLMatrix', ClassSym, SymbolTable);
  808. if not Assigned(ClassSym.Members.FindLocal('InvAbsoluteMatrix')) then
  809. TGLBaseSceneObjectInvAbsoluteMatrixMethod.Create(mkFunction, [], 0,
  810. 'InvAbsoluteMatrix', [], 'TGLMatrix', ClassSym, SymbolTable);
  811. if not Assigned(ClassSym.Members.FindLocal('SetAbsolutePosition')) then
  812. TGLBaseSceneObjectSetAbsolutePositionMethod.Create(mkProcedure, [], 0,
  813. 'SetAbsolutePosition', ['Value', 'TGLVector'], '', ClassSym, SymbolTable);
  814. if not Assigned(ClassSym.Members.FindLocal('GetAbsolutePosition')) then
  815. TGLBaseSceneObjectGetAbsolutePositionMethod.Create(mkFunction, [], 0,
  816. 'GetAbsolutePosition', [], 'TGLVector', ClassSym, SymbolTable);
  817. if not Assigned(ClassSym.Members.FindLocal('SetAbsoluteUp')) then
  818. TGLBaseSceneObjectSetAbsoluteUpMethod.Create(mkProcedure, [], 0,
  819. 'SetAbsoluteUp', ['Value', 'TGLVector'], '', ClassSym, SymbolTable);
  820. if not Assigned(ClassSym.Members.FindLocal('GetAbsoluteUp')) then
  821. TGLBaseSceneObjectGetAbsoluteUpMethod.Create(mkFunction, [], 0,
  822. 'GetAbsoluteUp', [], 'TGLVector', ClassSym, SymbolTable);
  823. if not Assigned(ClassSym.Members.FindLocal('SetAbsoluteDirection')) then
  824. TGLBaseSceneObjectSetAbsoluteDirectionMethod.Create(mkProcedure, [], 0,
  825. 'SetAbsoluteDirection', ['Value', 'TGLVector'], '', ClassSym, SymbolTable);
  826. if not Assigned(ClassSym.Members.FindLocal('GetAbsoluteDirection')) then
  827. TGLBaseSceneObjectGetAbsoluteDirectionMethod.Create(mkFunction, [], 0,
  828. 'GetAbsoluteDirection', [], 'TGLVector', ClassSym, SymbolTable);
  829. if not Assigned(ClassSym.Members.FindLocal('SetPosition')) then
  830. TGLBaseSceneObjectSetPositionMethod.Create(mkProcedure, [], 0,
  831. 'SetPosition', ['Value', 'TGLCoordinates'], '', ClassSym, SymbolTable);
  832. if not Assigned(ClassSym.Members.FindLocal('GetPosition')) then
  833. TGLBaseSceneObjectGetPositionMethod.Create(mkFunction, [], 0, 'GetPosition',
  834. [], 'TGLCoordinates', ClassSym, SymbolTable);
  835. if not Assigned(ClassSym.Members.FindLocal('SetDirection')) then
  836. TGLBaseSceneObjectSetDirectionMethod.Create(mkProcedure, [], 0,
  837. 'SetDirection', ['Value', 'TGLCoordinates'], '', ClassSym, SymbolTable);
  838. if not Assigned(ClassSym.Members.FindLocal('GetDirection')) then
  839. TGLBaseSceneObjectGetDirectionMethod.Create(mkFunction, [], 0,
  840. 'GetDirection', [], 'TGLCoordinates', ClassSym, SymbolTable);
  841. if not Assigned(ClassSym.Members.FindLocal('SetUp')) then
  842. TGLBaseSceneObjectSetUpMethod.Create(mkProcedure, [], 0, 'SetUp',
  843. ['Value', 'TGLCoordinates'], '', ClassSym, SymbolTable);
  844. if not Assigned(ClassSym.Members.FindLocal('GetUp')) then
  845. TGLBaseSceneObjectGetUpMethod.Create(mkFunction, [], 0, 'GetUp', [],
  846. 'TGLCoordinates', ClassSym, SymbolTable);
  847. if not Assigned(ClassSym.Members.FindLocal('SetScale')) then
  848. TGLBaseSceneObjectSetScaleMethod.Create(mkProcedure, [], 0, 'SetScale',
  849. ['Value', 'TGLCoordinates'], '', ClassSym, SymbolTable);
  850. if not Assigned(ClassSym.Members.FindLocal('GetScale')) then
  851. TGLBaseSceneObjectGetScaleMethod.Create(mkFunction, [], 0, 'GetScale', [],
  852. 'TGLCoordinates', ClassSym, SymbolTable);
  853. if not Assigned(ClassSym.Members.FindLocal('SetPitchAngle')) then
  854. TGLBaseSceneObjectSetPitchAngleMethod.Create(mkProcedure, [], 0,
  855. 'SetPitchAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
  856. if not Assigned(ClassSym.Members.FindLocal('GetPitchAngle')) then
  857. TGLBaseSceneObjectGetPitchAngleMethod.Create(mkFunction, [], 0,
  858. 'GetPitchAngle', [], 'Float', ClassSym, SymbolTable);
  859. if not Assigned(ClassSym.Members.FindLocal('SetTurnAngle')) then
  860. TGLBaseSceneObjectSetTurnAngleMethod.Create(mkProcedure, [], 0,
  861. 'SetTurnAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
  862. if not Assigned(ClassSym.Members.FindLocal('GetTurnAngle')) then
  863. TGLBaseSceneObjectGetTurnAngleMethod.Create(mkFunction, [], 0,
  864. 'GetTurnAngle', [], 'Float', ClassSym, SymbolTable);
  865. if not Assigned(ClassSym.Members.FindLocal('SetRollAngle')) then
  866. TGLBaseSceneObjectSetRollAngleMethod.Create(mkProcedure, [], 0,
  867. 'SetRollAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
  868. if not Assigned(ClassSym.Members.FindLocal('GetRollAngle')) then
  869. TGLBaseSceneObjectGetRollAngleMethod.Create(mkFunction, [], 0,
  870. 'GetRollAngle', [], 'Float', ClassSym, SymbolTable);
  871. if not Assigned(ClassSym.Members.FindLocal('Pitch')) then
  872. TGLBaseSceneObjectPitchMethod.Create(mkProcedure, [], 0, 'Pitch',
  873. ['angle', 'Float'], '', ClassSym, SymbolTable);
  874. if not Assigned(ClassSym.Members.FindLocal('Turn')) then
  875. TGLBaseSceneObjectTurnMethod.Create(mkProcedure, [], 0, 'Turn',
  876. ['angle', 'Float'], '', ClassSym, SymbolTable);
  877. if not Assigned(ClassSym.Members.FindLocal('Roll')) then
  878. TGLBaseSceneObjectRollMethod.Create(mkProcedure, [], 0, 'Roll',
  879. ['angle', 'Float'], '', ClassSym, SymbolTable);
  880. if not Assigned(ClassSym.Members.FindLocal('Move')) then
  881. TGLBaseSceneObjectMoveMethod.Create(mkProcedure, [], 0, 'Move',
  882. ['ADistance', 'Float'], '', ClassSym, SymbolTable);
  883. if not Assigned(ClassSym.Members.FindLocal('AddChild')) then
  884. TGLBaseSceneObjectAddChildMethod.Create(mkProcedure, [], 0, 'AddChild',
  885. ['AChild', 'TGLBaseSceneObject'], '', ClassSym, SymbolTable);
  886. // Properties
  887. AddPropertyToClass('Visible', 'Boolean', 'GetVisible', 'SetVisible', '',
  888. False, ClassSym, SymbolTable);
  889. AddPropertyToClass('Matrix', 'TGLMatrix', 'GetMatrix', 'SetMatrix', '', False,
  890. ClassSym, SymbolTable);
  891. AddPropertyToClass('AbsolutePosition', 'TGLVector', 'GetAbsolutePosition',
  892. 'SetAbsolutePosition', '', False, ClassSym, SymbolTable);
  893. AddPropertyToClass('AbsoluteUp', 'TGLVector', 'GetAbsoluteUp', 'SetAbsoluteUp',
  894. '', False, ClassSym, SymbolTable);
  895. AddPropertyToClass('AbsoluteDirection', 'TGLVector', 'GetAbsoluteDirection',
  896. 'SetAbsoluteDirection', '', False, ClassSym, SymbolTable);
  897. AddPropertyToClass('Position', 'TGLBaseSceneObject', 'GetPosition',
  898. 'SetPosition', '', False, ClassSym, SymbolTable);
  899. AddPropertyToClass('Direction', 'TGLBaseSceneObject', 'GetDirection',
  900. 'SetDirection', '', False, ClassSym, SymbolTable);
  901. AddPropertyToClass('Up', 'TGLBaseSceneObject', 'GetUp', 'SetUp', '', False,
  902. ClassSym, SymbolTable);
  903. AddPropertyToClass('Scale', 'TGLBaseSceneObject', 'GetScale', 'SetScale', '',
  904. False, ClassSym, SymbolTable);
  905. AddPropertyToClass('PitchAngle', 'Float', 'GetPitchAngle', 'SetPitchAngle',
  906. '', False, ClassSym, SymbolTable);
  907. AddPropertyToClass('TurnAngle', 'Float', 'GetTurnAngle', 'SetTurnAngle', '',
  908. False, ClassSym, SymbolTable);
  909. AddPropertyToClass('RollAngle', 'Float', 'GetRollAngle', 'SetRollAngle', '',
  910. False, ClassSym, SymbolTable);
  911. end;
  912. procedure TdwsGLSceneUnit.AddUnitSymbols(SymbolTable: TSymbolTable);
  913. begin
  914. // Forward class declaration
  915. AddForwardDeclaration('TGLCoordinates', SymbolTable);
  916. AddForwardDeclaration('TGLBaseSceneObject', SymbolTable);
  917. // Class types
  918. AddClassTGLCoordinates(SymbolTable);
  919. AddClassTGLBaseSceneObject(SymbolTable);
  920. end;
  921. end.