GXS.DWSScene.pas 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950
  1. //
  2. // Graphic Scene Engine, http://glscene.org
  3. //
  4. {
  5. DelphiWebScript symbol creation for base GLScene classes.
  6. This unit is dependent on DwsClasses and DwsVectorGeometry.
  7. These components must be associated with the same compiler
  8. for the GLScene classes to inherit from.
  9. }
  10. unit VXS.DWSScene;
  11. interface
  12. uses
  13. System.Classes,
  14. System.SysUtils,
  15. DwsExprs,
  16. DwsSymbols,
  17. DwsComp,
  18. DwsCompStrings,
  19. DwsStack,
  20. DwsFunctions,
  21. DwsHelperFunc,
  22. GXS.Scene,
  23. Stage.VectorGeometry,
  24. GXS.Coordinates;
  25. type
  26. TDwsGLXceneUnit = class(TDwsUnitComponent)
  27. private
  28. procedure AddClassTgxCoordinates(SymbolTable : TSymbolTable);
  29. procedure AddClassTgxBaseSceneObject(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. TgxCoordinatesSetXMethod = class(TInternalMethod)
  44. public
  45. procedure Execute(var ExternalObject: TObject); override;
  46. end;
  47. TgxCoordinatesGetXMethod = class(TInternalMethod)
  48. public
  49. procedure Execute(var ExternalObject: TObject); override;
  50. end;
  51. TgxCoordinatesSetYMethod = class(TInternalMethod)
  52. public
  53. procedure Execute(var ExternalObject: TObject); override;
  54. end;
  55. TgxCoordinatesGetYMethod = class(TInternalMethod)
  56. public
  57. procedure Execute(var ExternalObject: TObject); override;
  58. end;
  59. TgxCoordinatesSetZMethod = class(TInternalMethod)
  60. public
  61. procedure Execute(var ExternalObject: TObject); override;
  62. end;
  63. TgxCoordinatesGetZMethod = class(TInternalMethod)
  64. public
  65. procedure Execute(var ExternalObject: TObject); override;
  66. end;
  67. TgxCoordinatesSetWMethod = class(TInternalMethod)
  68. public
  69. procedure Execute(var ExternalObject: TObject); override;
  70. end;
  71. TgxCoordinatesGetWMethod = class(TInternalMethod)
  72. public
  73. procedure Execute(var ExternalObject: TObject); override;
  74. end;
  75. TgxCoordinatesSetVectorMethod = class(TInternalMethod)
  76. public
  77. procedure Execute(var ExternalObject: TObject); override;
  78. end;
  79. TgxCoordinatesSetPointMethod = class(TInternalMethod)
  80. public
  81. procedure Execute(var ExternalObject: TObject); override;
  82. end;
  83. TgxCoordinatesSetToZeroMethod = class(TInternalMethod)
  84. public
  85. procedure Execute(var ExternalObject: TObject); override;
  86. end;
  87. TgxCoordinatesSetAsVectorMethod = class(TInternalMethod)
  88. public
  89. procedure Execute(var ExternalObject: TObject); override;
  90. end;
  91. TgxCoordinatesGetAsVectorMethod = class(TInternalMethod)
  92. public
  93. procedure Execute(var ExternalObject: TObject); override;
  94. end;
  95. TgxCoordinatesGetAsStringMethod = class(TInternalMethod)
  96. public
  97. procedure Execute(var ExternalObject: TObject); override;
  98. end;
  99. TgxCoordinatesTranslateMethod = class(TInternalMethod)
  100. public
  101. procedure Execute(var ExternalObject: TObject); override;
  102. end;
  103. TgxCoordinatesAddScaledVectorMethod = class(TInternalMethod)
  104. public
  105. procedure Execute(var ExternalObject: TObject); override;
  106. end;
  107. TgxCoordinatesRotateMethod = class(TInternalMethod)
  108. public
  109. procedure Execute(var ExternalObject: TObject); override;
  110. end;
  111. TgxCoordinatesNormalizeMethod = class(TInternalMethod)
  112. public
  113. procedure Execute(var ExternalObject: TObject); override;
  114. end;
  115. TgxCoordinatesInvertMethod = class(TInternalMethod)
  116. public
  117. procedure Execute(var ExternalObject: TObject); override;
  118. end;
  119. TgxCoordinatesScaleMethod = class(TInternalMethod)
  120. public
  121. procedure Execute(var ExternalObject: TObject); override;
  122. end;
  123. TgxCoordinatesEqualsMethod = class(TInternalMethod)
  124. public
  125. procedure Execute(var ExternalObject: TObject); override;
  126. end;
  127. // TgxBaseSceneObject
  128. TgxBaseSceneObjectSetVisibleMethod = class(TInternalMethod)
  129. public
  130. procedure Execute(var ExternalObject: TObject); override;
  131. end;
  132. TgxBaseSceneObjectGetVisibleMethod = class(TInternalMethod)
  133. public
  134. procedure Execute(var ExternalObject: TObject); override;
  135. end;
  136. TgxBaseSceneObjectSetMatrixMethod = class(TInternalMethod)
  137. public
  138. procedure Execute(var ExternalObject: TObject); override;
  139. end;
  140. TgxBaseSceneObjectGetMatrixMethod = class(TInternalMethod)
  141. public
  142. procedure Execute(var ExternalObject: TObject); override;
  143. end;
  144. TgxBaseSceneObjectAbsoluteMatrixMethod = class(TInternalMethod)
  145. public
  146. procedure Execute(var ExternalObject: TObject); override;
  147. end;
  148. TgxBaseSceneObjectInvAbsoluteMatrixMethod = class(TInternalMethod)
  149. public
  150. procedure Execute(var ExternalObject: TObject); override;
  151. end;
  152. TgxBaseSceneObjectSetAbsolutePositionMethod = class(TInternalMethod)
  153. public
  154. procedure Execute(var ExternalObject: TObject); override;
  155. end;
  156. TgxBaseSceneObjectGetAbsolutePositionMethod = class(TInternalMethod)
  157. public
  158. procedure Execute(var ExternalObject: TObject); override;
  159. end;
  160. TgxBaseSceneObjectSetAbsoluteUpMethod = class(TInternalMethod)
  161. public
  162. procedure Execute(var ExternalObject: TObject); override;
  163. end;
  164. TgxBaseSceneObjectGetAbsoluteUpMethod = class(TInternalMethod)
  165. public
  166. procedure Execute(var ExternalObject: TObject); override;
  167. end;
  168. TgxBaseSceneObjectSetAbsoluteDirectionMethod = class(TInternalMethod)
  169. public
  170. procedure Execute(var ExternalObject: TObject); override;
  171. end;
  172. TgxBaseSceneObjectGetAbsoluteDirectionMethod = class(TInternalMethod)
  173. public
  174. procedure Execute(var ExternalObject: TObject); override;
  175. end;
  176. TgxBaseSceneObjectSetPositionMethod = class(TInternalMethod)
  177. public
  178. procedure Execute(var ExternalObject: TObject); override;
  179. end;
  180. TgxBaseSceneObjectGetPositionMethod = class(TInternalMethod)
  181. public
  182. procedure Execute(var ExternalObject: TObject); override;
  183. end;
  184. TgxBaseSceneObjectSetDirectionMethod = class(TInternalMethod)
  185. public
  186. procedure Execute(var ExternalObject: TObject); override;
  187. end;
  188. TgxBaseSceneObjectGetDirectionMethod = class(TInternalMethod)
  189. public
  190. procedure Execute(var ExternalObject: TObject); override;
  191. end;
  192. TgxBaseSceneObjectSetUpMethod = class(TInternalMethod)
  193. public
  194. procedure Execute(var ExternalObject: TObject); override;
  195. end;
  196. TgxBaseSceneObjectGetUpMethod = class(TInternalMethod)
  197. public
  198. procedure Execute(var ExternalObject: TObject); override;
  199. end;
  200. TgxBaseSceneObjectSetScaleMethod = class(TInternalMethod)
  201. public
  202. procedure Execute(var ExternalObject: TObject); override;
  203. end;
  204. TgxBaseSceneObjectGetScaleMethod = class(TInternalMethod)
  205. public
  206. procedure Execute(var ExternalObject: TObject); override;
  207. end;
  208. TgxBaseSceneObjectSetPitchAngleMethod = class(TInternalMethod)
  209. public
  210. procedure Execute(var ExternalObject: TObject); override;
  211. end;
  212. TgxBaseSceneObjectGetPitchAngleMethod = class(TInternalMethod)
  213. public
  214. procedure Execute(var ExternalObject: TObject); override;
  215. end;
  216. TgxBaseSceneObjectSetTurnAngleMethod = class(TInternalMethod)
  217. public
  218. procedure Execute(var ExternalObject: TObject); override;
  219. end;
  220. TgxBaseSceneObjectGetTurnAngleMethod = class(TInternalMethod)
  221. public
  222. procedure Execute(var ExternalObject: TObject); override;
  223. end;
  224. TgxBaseSceneObjectSetRollAngleMethod = class(TInternalMethod)
  225. public
  226. procedure Execute(var ExternalObject: TObject); override;
  227. end;
  228. TgxBaseSceneObjectGetRollAngleMethod = class(TInternalMethod)
  229. public
  230. procedure Execute(var ExternalObject: TObject); override;
  231. end;
  232. TgxBaseSceneObjectPitchMethod = class(TInternalMethod)
  233. public
  234. procedure Execute(var ExternalObject: TObject); override;
  235. end;
  236. TgxBaseSceneObjectTurnMethod = class(TInternalMethod)
  237. public
  238. procedure Execute(var ExternalObject: TObject); override;
  239. end;
  240. TgxBaseSceneObjectRollMethod = class(TInternalMethod)
  241. public
  242. procedure Execute(var ExternalObject: TObject); override;
  243. end;
  244. TgxBaseSceneObjectMoveMethod = class(TInternalMethod)
  245. public
  246. procedure Execute(var ExternalObject: TObject); override;
  247. end;
  248. TgxBaseSceneObjectAddChildMethod = class(TInternalMethod)
  249. public
  250. procedure Execute(var ExternalObject: TObject); override;
  251. end;
  252. // ----------
  253. // ---------- Vector/Matrix to/from IInfo helper functions ----------
  254. // ----------
  255. // GetVectorFromInfo
  256. //
  257. function GetVectorFromInfo(Info : IInfo) : TVector4f;
  258. begin
  259. Result:=VectorMake(Info.Element([0]).Value,
  260. Info.Element([1]).Value,
  261. Info.Element([2]).Value,
  262. Info.Element([3]).Value);
  263. end;
  264. procedure SetInfoFromVector(Info : IInfo; vec : TVector4f);
  265. var
  266. i : Integer;
  267. begin
  268. for i:=0 to 3 do
  269. Info.Element([i]).Value:=vec[i];
  270. end;
  271. function GetMatrixFromInfo(Info : IInfo) : TMatrix4f;
  272. var
  273. i : Integer;
  274. begin
  275. for i:=0 to 3 do
  276. Result[i]:=VectorMake(Info.Element([i]).Element([0]).Value,
  277. Info.Element([i]).Element([1]).Value,
  278. Info.Element([i]).Element([2]).Value,
  279. Info.Element([i]).Element([3]).Value);
  280. end;
  281. procedure SetInfoFromMatrix(Info : IInfo; mat : TMatrix4f);
  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. procedure TgxCoordinatesSetXMethod.Execute(var ExternalObject: TObject);
  293. begin
  294. ValidateExternalObject(ExternalObject, TgxCoordinates);
  295. TgxCoordinates(ExternalObject).X:=Info['Value'];
  296. end;
  297. procedure TgxCoordinatesGetXMethod.Execute(var ExternalObject: TObject);
  298. begin
  299. ValidateExternalObject(ExternalObject, TgxCoordinates);
  300. Info.Result:=TgxCoordinates(ExternalObject).X;
  301. end;
  302. // TgxCoordinates.Y write access
  303. procedure TgxCoordinatesSetYMethod.Execute(var ExternalObject: TObject);
  304. begin
  305. ValidateExternalObject(ExternalObject, TgxCoordinates);
  306. TgxCoordinates(ExternalObject).Y:=Info['Value'];
  307. end;
  308. // TgxCoordinates.Y read access
  309. procedure TgxCoordinatesGetYMethod.Execute(var ExternalObject: TObject);
  310. begin
  311. ValidateExternalObject(ExternalObject, TgxCoordinates);
  312. Info.Result:=TgxCoordinates(ExternalObject).Y;
  313. end;
  314. // TgxCoordinates.Z write access
  315. procedure TgxCoordinatesSetZMethod.Execute(var ExternalObject: TObject);
  316. begin
  317. ValidateExternalObject(ExternalObject, TgxCoordinates);
  318. TgxCoordinates(ExternalObject).Z:=Info['Value'];
  319. end;
  320. // TgxCoordinates.Z read access
  321. procedure TgxCoordinatesGetZMethod.Execute(var ExternalObject: TObject);
  322. begin
  323. ValidateExternalObject(ExternalObject, TgxCoordinates);
  324. Info.Result:=TgxCoordinates(ExternalObject).Z;
  325. end;
  326. // TgxCoordinates.W write access
  327. procedure TgxCoordinatesSetWMethod.Execute(var ExternalObject: TObject);
  328. begin
  329. ValidateExternalObject(ExternalObject, TgxCoordinates);
  330. TgxCoordinates(ExternalObject).W:=Info['Value'];
  331. end;
  332. // TgxCoordinates.W read access
  333. procedure TgxCoordinatesGetWMethod.Execute(var ExternalObject: TObject);
  334. begin
  335. ValidateExternalObject(ExternalObject, TgxCoordinates);
  336. Info.Result:=TgxCoordinates(ExternalObject).W;
  337. end;
  338. // TgxCoordinates.SetVector
  339. procedure TgxCoordinatesSetVectorMethod.Execute(var ExternalObject: TObject);
  340. begin
  341. ValidateExternalObject(ExternalObject, TgxCoordinates);
  342. TgxCoordinates(ExternalObject).SetVector(Info['x'],Info['y'],Info['z'],Info['w']);
  343. end;
  344. // TgxCoordinates.SetPoint
  345. procedure TgxCoordinatesSetPointMethod.Execute(var ExternalObject: TObject);
  346. begin
  347. ValidateExternalObject(ExternalObject, TgxCoordinates);
  348. TgxCoordinates(ExternalObject).SetPoint(Info['x'],Info['y'],Info['z']);
  349. end;
  350. // TgxCoordinates.AsVector write access
  351. procedure TgxCoordinatesSetAsVectorMethod.Execute(var ExternalObject: TObject);
  352. var
  353. v : TVector4f;
  354. begin
  355. ValidateExternalObject(ExternalObject, TgxCoordinates);
  356. v:=GetVectorFromInfo(Info.Vars['Value']);
  357. TgxCoordinates(ExternalObject).AsVector:=v;
  358. end;
  359. // TgxCoordinates.AsVector read access
  360. procedure TgxCoordinatesGetAsVectorMethod.Execute(var ExternalObject: TObject);
  361. var
  362. v : TVector4f;
  363. begin
  364. ValidateExternalObject(ExternalObject, TgxCoordinates);
  365. v:=TgxCoordinates(ExternalObject).AsVector;
  366. SetInfoFromVector(Info.Vars['Result'], v);
  367. end;
  368. // TgxCoordinates.AsString read access
  369. procedure TgxCoordinatesGetAsStringMethod.Execute(var ExternalObject: TObject);
  370. begin
  371. ValidateExternalObject(ExternalObject, TgxCoordinates);
  372. Info.Result:=TgxCoordinates(ExternalObject).AsString;
  373. end;
  374. // TgxCoordinates.Translate
  375. procedure TgxCoordinatesTranslateMethod.Execute(var ExternalObject: TObject);
  376. var
  377. v : TVector4f;
  378. begin
  379. ValidateExternalObject(ExternalObject, TgxCoordinates);
  380. v:=GetVectorFromInfo(Info.Vars['translationVector']);
  381. TgxCoordinates(ExternalObject).Translate(v);
  382. end;
  383. // TgxCoordinates.AddScaledVector
  384. procedure TgxCoordinatesAddScaledVectorMethod.Execute(var ExternalObject: TObject);
  385. var
  386. v : TVector4f;
  387. begin
  388. ValidateExternalObject(ExternalObject, TgxCoordinates);
  389. v:=GetVectorFromInfo(Info.Vars['translationVector']);
  390. TgxCoordinates(ExternalObject).AddScaledVector(Info['factor'],v);
  391. end;
  392. // TgxCoordinates.Rotate
  393. procedure TgxCoordinatesRotateMethod.Execute(var ExternalObject: TObject);
  394. var
  395. v : TVector4f;
  396. begin
  397. ValidateExternalObject(ExternalObject, TgxCoordinates);
  398. v:=GetVectorFromInfo(Info.Vars['anAxis']);
  399. TgxCoordinates(ExternalObject).Rotate(v, Info['anAngle']);
  400. end;
  401. // TgxCoordinates.Normalize
  402. procedure TgxCoordinatesNormalizeMethod.Execute(var ExternalObject: TObject);
  403. begin
  404. ValidateExternalObject(ExternalObject, TgxCoordinates);
  405. TgxCoordinates(ExternalObject).Normalize;
  406. end;
  407. // TgxCoordinates.Invert
  408. procedure TgxCoordinatesInvertMethod.Execute(var ExternalObject: TObject);
  409. begin
  410. ValidateExternalObject(ExternalObject, TgxCoordinates);
  411. TgxCoordinates(ExternalObject).Invert;
  412. end;
  413. // TgxCoordinates.Scale
  414. procedure TgxCoordinatesScaleMethod.Execute(var ExternalObject: TObject);
  415. begin
  416. ValidateExternalObject(ExternalObject, TgxCoordinates);
  417. TgxCoordinates(ExternalObject).Scale(Info['factor']);
  418. end;
  419. // TgxCoordinates.Equals
  420. procedure TgxCoordinatesEqualsMethod.Execute(var ExternalObject: TObject);
  421. var
  422. v : TVector4f;
  423. begin
  424. ValidateExternalObject(ExternalObject, TgxCoordinates);
  425. v:=GetVectorFromInfo(Info.Vars['aVector']);
  426. Info.Result:=TgxCoordinates(ExternalObject).Equals(v);
  427. end;
  428. // TgxCoordinates.SetToZero
  429. procedure TgxCoordinatesSetToZeroMethod.Execute(var ExternalObject: TObject);
  430. begin
  431. ValidateExternalObject(ExternalObject, TgxCoordinates);
  432. TgxCoordinates(ExternalObject).SetToZero;
  433. end;
  434. // TgxBaseSceneObject internal class methods
  435. procedure TgxBaseSceneObjectSetVisibleMethod.Execute(var ExternalObject: TObject);
  436. begin
  437. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  438. TgxBaseSceneObject(ExternalObject).Visible:=Info.Vars['Value'].Value;
  439. end;
  440. // TgxBaseSceneObject.GetVisible
  441. procedure TgxBaseSceneObjectGetVisibleMethod.Execute(var ExternalObject: TObject);
  442. begin
  443. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  444. Info.Result:=TgxBaseSceneObject(ExternalObject).Visible;
  445. end;
  446. // TgxBaseSceneObject.SetMatrix
  447. procedure TgxBaseSceneObjectSetMatrixMethod.Execute(var ExternalObject: TObject);
  448. begin
  449. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  450. TgxBaseSceneObject(ExternalObject).Matrix:=GetMatrixFromInfo(Info.Vars['Value']);
  451. end;
  452. // TgxBaseSceneObject.GetMatrix
  453. procedure TgxBaseSceneObjectGetMatrixMethod.Execute(var ExternalObject: TObject);
  454. begin
  455. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  456. SetInfoFromMatrix(Info.Vars['Result'], TgxBaseSceneObject(ExternalObject).Matrix);
  457. end;
  458. // TgxBaseSceneObject.AbsoluteMatrix
  459. procedure TgxBaseSceneObjectAbsoluteMatrixMethod.Execute(var ExternalObject: TObject);
  460. begin
  461. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  462. SetInfoFromMatrix(Info.Vars['Result'], TgxBaseSceneObject(ExternalObject).AbsoluteMatrix);
  463. end;
  464. // TgxBaseSceneObject.InvAbsoluteMatrix
  465. procedure TgxBaseSceneObjectInvAbsoluteMatrixMethod.Execute(var ExternalObject: TObject);
  466. begin
  467. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  468. SetInfoFromMatrix(Info.Vars['Result'], TgxBaseSceneObject(ExternalObject).InvAbsoluteMatrix);
  469. end;
  470. // TgxBaseSceneObject.SetAbsolutePosition
  471. procedure TgxBaseSceneObjectSetAbsolutePositionMethod.Execute(var ExternalObject: TObject);
  472. begin
  473. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  474. TgxBaseSceneObject(ExternalObject).AbsolutePosition:=GetVectorFromInfo(Info.Vars['Value']);
  475. end;
  476. // TgxBaseSceneObject.GetAbsolutePosition
  477. procedure TgxBaseSceneObjectGetAbsolutePositionMethod.Execute(var ExternalObject: TObject);
  478. begin
  479. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  480. SetInfoFromVector(Info.Vars['Result'], TgxBaseSceneObject(ExternalObject).AbsolutePosition);
  481. end;
  482. // TgxBaseSceneObject.SetAbsoluteUp
  483. procedure TgxBaseSceneObjectSetAbsoluteUpMethod.Execute(var ExternalObject: TObject);
  484. begin
  485. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  486. TgxBaseSceneObject(ExternalObject).AbsoluteUp:=GetVectorFromInfo(Info.Vars['Value']);
  487. end;
  488. // TgxBaseSceneObject.GetAbsoluteUp
  489. procedure TgxBaseSceneObjectGetAbsoluteUpMethod.Execute(var ExternalObject: TObject);
  490. begin
  491. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  492. SetInfoFromVector(Info.Vars['Result'], TgxBaseSceneObject(ExternalObject).AbsoluteUp);
  493. end;
  494. // TgxBaseSceneObject.SetAbsoluteDirection
  495. procedure TgxBaseSceneObjectSetAbsoluteDirectionMethod.Execute(var ExternalObject: TObject);
  496. begin
  497. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  498. TgxBaseSceneObject(ExternalObject).AbsoluteDirection:=GetVectorFromInfo(Info.Vars['Value']);
  499. end;
  500. // TgxBaseSceneObject.GetAbsoluteDirection
  501. procedure TgxBaseSceneObjectGetAbsoluteDirectionMethod.Execute(var ExternalObject: TObject);
  502. begin
  503. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  504. SetInfoFromVector(Info.Vars['Result'], TgxBaseSceneObject(ExternalObject).AbsoluteDirection);
  505. end;
  506. // TgxBaseSceneObject.Position write access
  507. procedure TgxBaseSceneObjectSetPositionMethod.Execute(var ExternalObject: TObject);
  508. var
  509. Value : TgxCoordinates;
  510. begin
  511. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  512. Value:=TgxCoordinates(Info.GetExternalObjForVar('Value'));
  513. TgxBaseSceneObject(ExternalObject).Position:=Value;
  514. end;
  515. // TgxBaseSceneObject.Position read access
  516. procedure TgxBaseSceneObjectGetPositionMethod.Execute(var ExternalObject: TObject);
  517. begin
  518. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  519. Info.Result:=Info.RegisterExternalObject(TgxBaseSceneObject(ExternalObject).Position);
  520. end;
  521. // TgxBaseSceneObject.Direction write access
  522. procedure TgxBaseSceneObjectSetDirectionMethod.Execute(var ExternalObject: TObject);
  523. var
  524. Value : TgxCoordinates;
  525. begin
  526. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  527. Value:=TgxCoordinates(Info.GetExternalObjForVar('Value'));
  528. TgxBaseSceneObject(ExternalObject).Direction:=Value;
  529. end;
  530. // TgxBaseSceneObject.Direction read access
  531. procedure TgxBaseSceneObjectGetDirectionMethod.Execute(var ExternalObject: TObject);
  532. begin
  533. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  534. Info.Result:=Info.RegisterExternalObject(TgxBaseSceneObject(ExternalObject).Direction);
  535. end;
  536. // TgxBaseSceneObject.Up write access
  537. procedure TgxBaseSceneObjectSetUpMethod.Execute(var ExternalObject: TObject);
  538. var
  539. Value : TgxCoordinates;
  540. begin
  541. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  542. Value:=TgxCoordinates(Info.GetExternalObjForVar('Value'));
  543. TgxBaseSceneObject(ExternalObject).Up:=Value;
  544. end;
  545. // TgxBaseSceneObject.Up read access
  546. procedure TgxBaseSceneObjectGetUpMethod.Execute(var ExternalObject: TObject);
  547. begin
  548. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  549. Info.Result:=Info.RegisterExternalObject(TgxBaseSceneObject(ExternalObject).Up);
  550. end;
  551. // TgxBaseSceneObject.Scale write access
  552. procedure TgxBaseSceneObjectSetScaleMethod.Execute(var ExternalObject: TObject);
  553. var
  554. Value : TgxCoordinates;
  555. begin
  556. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  557. Value:=TgxCoordinates(Info.GetExternalObjForVar('Value'));
  558. TgxBaseSceneObject(ExternalObject).Scale:=Value;
  559. end;
  560. // TgxBaseSceneObject.Scale read access
  561. procedure TgxBaseSceneObjectGetScaleMethod.Execute(var ExternalObject: TObject);
  562. begin
  563. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  564. Info.Result:=Info.RegisterExternalObject(TgxBaseSceneObject(ExternalObject).Scale);
  565. end;
  566. // TgxBaseSceneObject.PitchAngle write access
  567. procedure TgxBaseSceneObjectSetPitchAngleMethod.Execute(var ExternalObject: TObject);
  568. begin
  569. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  570. TgxBaseSceneObject(ExternalObject).PitchAngle:=Info.Vars['Value'].Value;
  571. end;
  572. // TgxBaseSceneObject.PitchAngle read access
  573. procedure TgxBaseSceneObjectGetPitchAngleMethod.Execute(var ExternalObject: TObject);
  574. begin
  575. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  576. Info.Result:=TgxBaseSceneObject(ExternalObject).PitchAngle;
  577. end;
  578. // TgxBaseSceneObject.TurnAngle write access
  579. procedure TgxBaseSceneObjectSetTurnAngleMethod.Execute(var ExternalObject: TObject);
  580. begin
  581. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  582. TgxBaseSceneObject(ExternalObject).TurnAngle:=Info.Vars['Value'].Value;
  583. end;
  584. // TgxBaseSceneObject.TurnAngle read access
  585. procedure TgxBaseSceneObjectGetTurnAngleMethod.Execute(var ExternalObject: TObject);
  586. begin
  587. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  588. Info.Result:=TgxBaseSceneObject(ExternalObject).TurnAngle;
  589. end;
  590. // TgxBaseSceneObject.RollAngle write access
  591. procedure TgxBaseSceneObjectSetRollAngleMethod.Execute(var ExternalObject: TObject);
  592. begin
  593. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  594. TgxBaseSceneObject(ExternalObject).RollAngle:=Info.Vars['Value'].Value;
  595. end;
  596. // TgxBaseSceneObject.RollAngle read access
  597. procedure TgxBaseSceneObjectGetRollAngleMethod.Execute(var ExternalObject: TObject);
  598. begin
  599. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  600. Info.Result:=TgxBaseSceneObject(ExternalObject).RollAngle;
  601. end;
  602. // TgxBaseSceneObject.Pitch
  603. procedure TgxBaseSceneObjectPitchMethod.Execute(var ExternalObject: TObject);
  604. begin
  605. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  606. TgxBaseSceneObject(ExternalObject).Pitch(Info['angle']);
  607. end;
  608. // TgxBaseSceneObject.Turn
  609. procedure TgxBaseSceneObjectTurnMethod.Execute(var ExternalObject: TObject);
  610. begin
  611. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  612. TgxBaseSceneObject(ExternalObject).Turn(Info['angle']);
  613. end;
  614. // TgxBaseSceneObject.Roll
  615. procedure TgxBaseSceneObjectRollMethod.Execute(var ExternalObject: TObject);
  616. begin
  617. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  618. TgxBaseSceneObject(ExternalObject).Roll(Info['angle']);
  619. end;
  620. // TgxBaseSceneObject.Move
  621. procedure TgxBaseSceneObjectMoveMethod.Execute(var ExternalObject: TObject);
  622. begin
  623. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  624. TgxBaseSceneObject(ExternalObject).Move(Info['ADistance']);
  625. end;
  626. // TgxBaseSceneObject.AddChild
  627. procedure TgxBaseSceneObjectAddChildMethod.Execute(var ExternalObject: TObject);
  628. var
  629. AChild : TObject;
  630. begin
  631. ValidateExternalObject(ExternalObject, TgxBaseSceneObject);
  632. AChild:=Info.GetExternalObjForVar('AChild');
  633. if not Assigned(AChild) then raise Exception.Create('AChild parameter is unassigned.');
  634. if not (AChild is TgxBaseSceneObject) then Exception.Create('AChild parameter is not inheriting from TgxBaseSceneObject.');
  635. TgxBaseSceneObject(ExternalObject).AddChild(TgxBaseSceneObject(AChild));
  636. end;
  637. // ----------
  638. // ---------- Global procedures/functions ----------
  639. // ----------
  640. procedure Register;
  641. begin
  642. RegisterComponents('GXScene Dws', [TDwsGLXceneUnit]);
  643. end;
  644. // ----------
  645. // ---------- TDwsGLXceneUnit ----------
  646. // ----------
  647. constructor TDwsGLXceneUnit.Create(AOwner: TComponent);
  648. begin
  649. inherited;
  650. FUnitName:='GXScene';
  651. with FDependencies do begin
  652. Add('Classes');
  653. Add('Stage.VectorGeometry');
  654. end;
  655. end;
  656. procedure TDwsGLXceneUnit.AddClassTgxCoordinates(
  657. SymbolTable: TSymbolTable);
  658. var
  659. ClassSym : TClassSymbol;
  660. begin
  661. ClassSym:=TClassSymbol(AddClassSymbol(SymbolTable, 'TgxCoordinates', 'TPersistent'));
  662. // Methods
  663. if not Assigned(ClassSym.Members.FindLocal('SetX')) then
  664. TgxCoordinatesSetXMethod.Create(mkProcedure, [], 0, 'SetX', ['Value', 'Float'], '', ClassSym, SymbolTable);
  665. if not Assigned(ClassSym.Members.FindLocal('GetX')) then
  666. TgxCoordinatesGetXMethod.Create(mkFunction, [], 0, 'GetX', [], 'Float', ClassSym, SymbolTable);
  667. if not Assigned(ClassSym.Members.FindLocal('SetY')) then
  668. TgxCoordinatesSetYMethod.Create(mkProcedure, [], 0, 'SetY', ['Value', 'Float'], '', ClassSym, SymbolTable);
  669. if not Assigned(ClassSym.Members.FindLocal('GetY')) then
  670. TgxCoordinatesGetYMethod.Create(mkFunction, [], 0, 'GetY', [], 'Float', ClassSym, SymbolTable);
  671. if not Assigned(ClassSym.Members.FindLocal('SetZ')) then
  672. TgxCoordinatesSetZMethod.Create(mkProcedure, [], 0, 'SetZ', ['Value', 'Float'], '', ClassSym, SymbolTable);
  673. if not Assigned(ClassSym.Members.FindLocal('GetZ')) then
  674. TgxCoordinatesGetZMethod.Create(mkFunction, [], 0, 'GetZ', [], 'Float', ClassSym, SymbolTable);
  675. if not Assigned(ClassSym.Members.FindLocal('SetW')) then
  676. TgxCoordinatesSetWMethod.Create(mkProcedure, [], 0, 'SetW', ['Value', 'Float'], '', ClassSym, SymbolTable);
  677. if not Assigned(ClassSym.Members.FindLocal('GetW')) then
  678. TgxCoordinatesGetWMethod.Create(mkFunction, [], 0, 'GetW', [], 'Float', ClassSym, SymbolTable);
  679. if not Assigned(ClassSym.Members.FindLocal('SetVector')) then
  680. TgxCoordinatesSetVectorMethod.Create(mkProcedure, [], 0, 'SetVector', ['x', 'Float', 'y', 'Float', 'z', 'Float', 'w', 'Float'], '', ClassSym, SymbolTable);
  681. if not Assigned(ClassSym.Members.FindLocal('SetPoint')) then
  682. TgxCoordinatesSetPointMethod.Create(mkProcedure, [], 0, 'SetPoint', ['x', 'Float', 'y', 'Float', 'z', 'Float'], '', ClassSym, SymbolTable);
  683. if not Assigned(ClassSym.Members.FindLocal('SetToZero')) then
  684. TgxCoordinatesSetToZeroMethod.Create(mkProcedure, [], 0, 'SetToZero', [], '', ClassSym, SymbolTable);
  685. if not Assigned(ClassSym.Members.FindLocal('SetAsVector')) then
  686. TgxCoordinatesSetAsVectorMethod.Create(mkProcedure, [], 0, 'SetAsVector', ['Value', 'TVector4f'], '', ClassSym, SymbolTable);
  687. if not Assigned(ClassSym.Members.FindLocal('GetAsVector')) then
  688. TgxCoordinatesGetAsVectorMethod.Create(mkFunction, [], 0, 'GetAsVector', [], 'TVector4f', ClassSym, SymbolTable);
  689. if not Assigned(ClassSym.Members.FindLocal('GetAsString')) then
  690. TgxCoordinatesGetAsStringMethod.Create(mkFunction, [], 0, 'GetAsString', [], 'String', ClassSym, SymbolTable);
  691. if not Assigned(ClassSym.Members.FindLocal('Translate')) then
  692. TgxCoordinatesTranslateMethod.Create(mkProcedure, [], 0, 'Translate', ['translationVector', 'TVector4f'], '', ClassSym, SymbolTable);
  693. if not Assigned(ClassSym.Members.FindLocal('AddScaledVector')) then
  694. TgxCoordinatesAddScaledVectorMethod.Create(mkProcedure, [], 0, 'AddScaledVector', ['factor', 'Float', 'translationVector', 'TVector4f'], '', ClassSym, SymbolTable);
  695. if not Assigned(ClassSym.Members.FindLocal('Rotate')) then
  696. TgxCoordinatesRotateMethod.Create(mkProcedure, [], 0, 'Rotate', ['anAxis', 'TVector4f', 'anAngle', 'Float'], '', ClassSym, SymbolTable);
  697. if not Assigned(ClassSym.Members.FindLocal('Normalize')) then
  698. TgxCoordinatesNormalizeMethod.Create(mkProcedure, [], 0, 'Normalize', [], '', ClassSym, SymbolTable);
  699. if not Assigned(ClassSym.Members.FindLocal('Invert')) then
  700. TgxCoordinatesInvertMethod.Create(mkProcedure, [], 0, 'Invert', [], '', ClassSym, SymbolTable);
  701. if not Assigned(ClassSym.Members.FindLocal('Scale')) then
  702. TgxCoordinatesScaleMethod.Create(mkProcedure, [], 0, 'Scale', ['factor', 'Float'], '', ClassSym, SymbolTable);
  703. if not Assigned(ClassSym.Members.FindLocal('Equals')) then
  704. TgxCoordinatesEqualsMethod.Create(mkFunction, [], 0, 'Equals', ['aVector', 'TVector4f'], 'Boolean', ClassSym, SymbolTable);
  705. // Properties
  706. AddPropertyToClass('X', 'Float', 'GetX', 'SetX', '', False, ClassSym, SymbolTable);
  707. AddPropertyToClass('Y', 'Float', 'GetY', 'SetY', '', False, ClassSym, SymbolTable);
  708. AddPropertyToClass('Z', 'Float', 'GetZ', 'SetZ', '', False, ClassSym, SymbolTable);
  709. AddPropertyToClass('AsVector', 'TVector4f', 'GetAsVector', 'SetAsVector', '', False, ClassSym, SymbolTable);
  710. AddPropertyToClass('AsString', 'String', 'GetAsString', '', '', False, ClassSym, SymbolTable);
  711. end;
  712. // AddClassTgxBaseSceneObject
  713. //
  714. procedure TDwsGLXceneUnit.AddClassTgxBaseSceneObject(
  715. SymbolTable: TSymbolTable);
  716. var
  717. ClassSym : TClassSymbol;
  718. begin
  719. ClassSym:=TClassSymbol(AddClassSymbol(SymbolTable, 'TgxBaseSceneObject', 'TComponent'));
  720. // Methods
  721. if not Assigned(ClassSym.Members.FindLocal('SetVisible')) then
  722. TgxBaseSceneObjectSetVisibleMethod.Create(mkProcedure, [], 0, 'SetVisible', ['Value', 'Boolean'], '', ClassSym, SymbolTable);
  723. if not Assigned(ClassSym.Members.FindLocal('GetVisible')) then
  724. TgxBaseSceneObjectGetVisibleMethod.Create(mkFunction, [], 0, 'GetVisible', [], 'Boolean', ClassSym, SymbolTable);
  725. if not Assigned(ClassSym.Members.FindLocal('SetMatrix')) then
  726. TgxBaseSceneObjectSetMatrixMethod.Create(mkProcedure, [], 0, 'SetMatrix', ['Value', 'TMatrix4f'], '', ClassSym, SymbolTable);
  727. if not Assigned(ClassSym.Members.FindLocal('GetMatrix')) then
  728. TgxBaseSceneObjectGetMatrixMethod.Create(mkFunction, [], 0, 'GetMatrix', [], 'TMatrix4f', ClassSym, SymbolTable);
  729. if not Assigned(ClassSym.Members.FindLocal('AbsoluteMatrix')) then
  730. TgxBaseSceneObjectAbsoluteMatrixMethod.Create(mkFunction, [], 0, 'AbsoluteMatrix', [], 'TMatrix4f', ClassSym, SymbolTable);
  731. if not Assigned(ClassSym.Members.FindLocal('InvAbsoluteMatrix')) then
  732. TgxBaseSceneObjectInvAbsoluteMatrixMethod.Create(mkFunction, [], 0, 'InvAbsoluteMatrix', [], 'TMatrix4f', ClassSym, SymbolTable);
  733. if not Assigned(ClassSym.Members.FindLocal('SetAbsolutePosition')) then
  734. TgxBaseSceneObjectSetAbsolutePositionMethod.Create(mkProcedure, [], 0, 'SetAbsolutePosition', ['Value', 'TVector4f'], '', ClassSym, SymbolTable);
  735. if not Assigned(ClassSym.Members.FindLocal('GetAbsolutePosition')) then
  736. TgxBaseSceneObjectGetAbsolutePositionMethod.Create(mkFunction, [], 0, 'GetAbsolutePosition', [], 'TVector4f', ClassSym, SymbolTable);
  737. if not Assigned(ClassSym.Members.FindLocal('SetAbsoluteUp')) then
  738. TgxBaseSceneObjectSetAbsoluteUpMethod.Create(mkProcedure, [], 0, 'SetAbsoluteUp', ['Value', 'TVector4f'], '', ClassSym, SymbolTable);
  739. if not Assigned(ClassSym.Members.FindLocal('GetAbsoluteUp')) then
  740. TgxBaseSceneObjectGetAbsoluteUpMethod.Create(mkFunction, [], 0, 'GetAbsoluteUp', [], 'TVector4f', ClassSym, SymbolTable);
  741. if not Assigned(ClassSym.Members.FindLocal('SetAbsoluteDirection')) then
  742. TgxBaseSceneObjectSetAbsoluteDirectionMethod.Create(mkProcedure, [], 0, 'SetAbsoluteDirection', ['Value', 'TVector4f'], '', ClassSym, SymbolTable);
  743. if not Assigned(ClassSym.Members.FindLocal('GetAbsoluteDirection')) then
  744. TgxBaseSceneObjectGetAbsoluteDirectionMethod.Create(mkFunction, [], 0, 'GetAbsoluteDirection', [], 'TVector4f', ClassSym, SymbolTable);
  745. if not Assigned(ClassSym.Members.FindLocal('SetPosition')) then
  746. TgxBaseSceneObjectSetPositionMethod.Create(mkProcedure, [], 0, 'SetPosition', ['Value', 'TgxCoordinates'], '', ClassSym, SymbolTable);
  747. if not Assigned(ClassSym.Members.FindLocal('GetPosition')) then
  748. TgxBaseSceneObjectGetPositionMethod.Create(mkFunction, [], 0, 'GetPosition', [], 'TgxCoordinates', ClassSym, SymbolTable);
  749. if not Assigned(ClassSym.Members.FindLocal('SetDirection')) then
  750. TgxBaseSceneObjectSetDirectionMethod.Create(mkProcedure, [], 0, 'SetDirection', ['Value', 'TgxCoordinates'], '', ClassSym, SymbolTable);
  751. if not Assigned(ClassSym.Members.FindLocal('GetDirection')) then
  752. TgxBaseSceneObjectGetDirectionMethod.Create(mkFunction, [], 0, 'GetDirection', [], 'TgxCoordinates', ClassSym, SymbolTable);
  753. if not Assigned(ClassSym.Members.FindLocal('SetUp')) then
  754. TgxBaseSceneObjectSetUpMethod.Create(mkProcedure, [], 0, 'SetUp', ['Value', 'TgxCoordinates'], '', ClassSym, SymbolTable);
  755. if not Assigned(ClassSym.Members.FindLocal('GetUp')) then
  756. TgxBaseSceneObjectGetUpMethod.Create(mkFunction, [], 0, 'GetUp', [], 'TgxCoordinates', ClassSym, SymbolTable);
  757. if not Assigned(ClassSym.Members.FindLocal('SetScale')) then
  758. TgxBaseSceneObjectSetScaleMethod.Create(mkProcedure, [], 0, 'SetScale', ['Value', 'TgxCoordinates'], '', ClassSym, SymbolTable);
  759. if not Assigned(ClassSym.Members.FindLocal('GetScale')) then
  760. TgxBaseSceneObjectGetScaleMethod.Create(mkFunction, [], 0, 'GetScale', [], 'TgxCoordinates', ClassSym, SymbolTable);
  761. if not Assigned(ClassSym.Members.FindLocal('SetPitchAngle')) then
  762. TgxBaseSceneObjectSetPitchAngleMethod.Create(mkProcedure, [], 0, 'SetPitchAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
  763. if not Assigned(ClassSym.Members.FindLocal('GetPitchAngle')) then
  764. TgxBaseSceneObjectGetPitchAngleMethod.Create(mkFunction, [], 0, 'GetPitchAngle', [], 'Float', ClassSym, SymbolTable);
  765. if not Assigned(ClassSym.Members.FindLocal('SetTurnAngle')) then
  766. TgxBaseSceneObjectSetTurnAngleMethod.Create(mkProcedure, [], 0, 'SetTurnAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
  767. if not Assigned(ClassSym.Members.FindLocal('GetTurnAngle')) then
  768. TgxBaseSceneObjectGetTurnAngleMethod.Create(mkFunction, [], 0, 'GetTurnAngle', [], 'Float', ClassSym, SymbolTable);
  769. if not Assigned(ClassSym.Members.FindLocal('SetRollAngle')) then
  770. TgxBaseSceneObjectSetRollAngleMethod.Create(mkProcedure, [], 0, 'SetRollAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
  771. if not Assigned(ClassSym.Members.FindLocal('GetRollAngle')) then
  772. TgxBaseSceneObjectGetRollAngleMethod.Create(mkFunction, [], 0, 'GetRollAngle', [], 'Float', ClassSym, SymbolTable);
  773. if not Assigned(ClassSym.Members.FindLocal('Pitch')) then
  774. TgxBaseSceneObjectPitchMethod.Create(mkProcedure, [], 0, 'Pitch', ['angle', 'Float'], '', ClassSym, SymbolTable);
  775. if not Assigned(ClassSym.Members.FindLocal('Turn')) then
  776. TgxBaseSceneObjectTurnMethod.Create(mkProcedure, [], 0, 'Turn', ['angle', 'Float'], '', ClassSym, SymbolTable);
  777. if not Assigned(ClassSym.Members.FindLocal('Roll')) then
  778. TgxBaseSceneObjectRollMethod.Create(mkProcedure, [], 0, 'Roll', ['angle', 'Float'], '', ClassSym, SymbolTable);
  779. if not Assigned(ClassSym.Members.FindLocal('Move')) then
  780. TgxBaseSceneObjectMoveMethod.Create(mkProcedure, [], 0, 'Move', ['ADistance', 'Float'], '', ClassSym, SymbolTable);
  781. if not Assigned(ClassSym.Members.FindLocal('AddChild')) then
  782. TgxBaseSceneObjectAddChildMethod.Create(mkProcedure, [], 0, 'AddChild', ['AChild', 'TgxBaseSceneObject'], '', ClassSym, SymbolTable);
  783. // Properties
  784. AddPropertyToClass('Visible', 'Boolean', 'GetVisible', 'SetVisible', '', False, ClassSym, SymbolTable);
  785. AddPropertyToClass('Matrix', 'TMatrix4f', 'GetMatrix', 'SetMatrix', '', False, ClassSym, SymbolTable);
  786. AddPropertyToClass('AbsolutePosition', 'TVector4f', 'GetAbsolutePosition', 'SetAbsolutePosition', '', False, ClassSym, SymbolTable);
  787. AddPropertyToClass('AbsoluteUp', 'TVector4f', 'GetAbsoluteUp', 'SetAbsoluteUp', '', False, ClassSym, SymbolTable);
  788. AddPropertyToClass('AbsoluteDirection', 'TVector4f', 'GetAbsoluteDirection', 'SetAbsoluteDirection', '', False, ClassSym, SymbolTable);
  789. AddPropertyToClass('Position', 'TgxBaseSceneObject', 'GetPosition', 'SetPosition', '', False, ClassSym, SymbolTable);
  790. AddPropertyToClass('Direction', 'TgxBaseSceneObject', 'GetDirection', 'SetDirection', '', False, ClassSym, SymbolTable);
  791. AddPropertyToClass('Up', 'TgxBaseSceneObject', 'GetUp', 'SetUp', '', False, ClassSym, SymbolTable);
  792. AddPropertyToClass('Scale', 'TgxBaseSceneObject', 'GetScale', 'SetScale', '', False, ClassSym, SymbolTable);
  793. AddPropertyToClass('PitchAngle', 'Float', 'GetPitchAngle', 'SetPitchAngle', '', False, ClassSym, SymbolTable);
  794. AddPropertyToClass('TurnAngle', 'Float', 'GetTurnAngle', 'SetTurnAngle', '', False, ClassSym, SymbolTable);
  795. AddPropertyToClass('RollAngle', 'Float', 'GetRollAngle', 'SetRollAngle', '', False, ClassSym, SymbolTable);
  796. end;
  797. // AddUnitSymbols
  798. //
  799. procedure TDwsGLXceneUnit.AddUnitSymbols(SymbolTable: TSymbolTable);
  800. begin
  801. // Forward class declaration
  802. AddForwardDeclaration('TgxCoordinates', SymbolTable);
  803. AddForwardDeclaration('TgxBaseSceneObject', SymbolTable);
  804. // Class types
  805. AddClassTgxCoordinates(SymbolTable);
  806. AddClassTgxBaseSceneObject(SymbolTable);
  807. end;
  808. end.