Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

679 lines
17 KiB

  1. /*
  2. File: QD3DPick.h
  3. Contains: Q3Pick methods
  4. Version: Technology: Quickdraw 3D 1.6
  5. Release: QuickTime 7.3
  6. Copyright: (c) 2007 (c) 1995-1998 by Apple Computer, Inc., all rights reserved.
  7. Bugs?: For bug reports, consult the following page on
  8. the World Wide Web:
  9. http://developer.apple.com/bugreporter/
  10. */
  11. #ifndef __QD3DPICK__
  12. #define __QD3DPICK__
  13. #ifndef __QD3D__
  14. #include <QD3D.h>
  15. #endif
  16. #ifndef __QD3DSTYLE__
  17. #include <QD3DStyle.h>
  18. #endif
  19. #ifndef __QD3DGEOMETRY__
  20. #include <QD3DGeometry.h>
  21. #endif
  22. #if PRAGMA_ONCE
  23. #pragma once
  24. #endif
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. #if PRAGMA_IMPORT
  29. #pragma import on
  30. #endif
  31. #if PRAGMA_STRUCT_ALIGN
  32. #pragma options align=power
  33. #elif PRAGMA_STRUCT_PACKPUSH
  34. #pragma pack(push, 2)
  35. #elif PRAGMA_STRUCT_PACK
  36. #pragma pack(2)
  37. #endif
  38. #if PRAGMA_ENUM_ALWAYSINT
  39. #if defined(__fourbyteints__) && !__fourbyteints__
  40. #define __QD3DPICK__RESTORE_TWOBYTEINTS
  41. #pragma fourbyteints on
  42. #endif
  43. #pragma enumsalwaysint on
  44. #elif PRAGMA_ENUM_OPTIONS
  45. #pragma option enum=int
  46. #elif PRAGMA_ENUM_PACK
  47. #if __option(pack_enums)
  48. #define __QD3DPICK__RESTORE_PACKED_ENUMS
  49. #pragma options(!pack_enums)
  50. #endif
  51. #endif
  52. /*****************************************************************************
  53. ** **
  54. ** Mask bits for hit information **
  55. ** **
  56. *****************************************************************************/
  57. enum TQ3PickDetailMasks {
  58. kQ3PickDetailNone = 0,
  59. kQ3PickDetailMaskPickID = 1 << 0,
  60. kQ3PickDetailMaskPath = 1 << 1,
  61. kQ3PickDetailMaskObject = 1 << 2,
  62. kQ3PickDetailMaskLocalToWorldMatrix = 1 << 3,
  63. kQ3PickDetailMaskXYZ = 1 << 4,
  64. kQ3PickDetailMaskDistance = 1 << 5,
  65. kQ3PickDetailMaskNormal = 1 << 6,
  66. kQ3PickDetailMaskShapePart = 1 << 7,
  67. kQ3PickDetailMaskPickPart = 1 << 8,
  68. kQ3PickDetailMaskUV = 1 << 9
  69. };
  70. typedef enum TQ3PickDetailMasks TQ3PickDetailMasks;
  71. typedef unsigned long TQ3PickDetail;
  72. /******************************************************************************
  73. ** **
  74. ** Hitlist sorting **
  75. ** **
  76. *****************************************************************************/
  77. enum TQ3PickSort {
  78. kQ3PickSortNone = 0,
  79. kQ3PickSortNearToFar = 1,
  80. kQ3PickSortFarToNear = 2
  81. };
  82. typedef enum TQ3PickSort TQ3PickSort;
  83. /******************************************************************************
  84. ** **
  85. ** Data structures to set up the pick object **
  86. ** **
  87. *****************************************************************************/
  88. #define kQ3ReturnAllHits 0
  89. struct TQ3PickData {
  90. TQ3PickSort sort;
  91. TQ3PickDetail mask;
  92. unsigned long numHitsToReturn;
  93. };
  94. typedef struct TQ3PickData TQ3PickData;
  95. struct TQ3WindowPointPickData {
  96. TQ3PickData data;
  97. TQ3Point2D point;
  98. float vertexTolerance;
  99. float edgeTolerance;
  100. };
  101. typedef struct TQ3WindowPointPickData TQ3WindowPointPickData;
  102. struct TQ3WindowRectPickData {
  103. TQ3PickData data;
  104. TQ3Area rect;
  105. };
  106. typedef struct TQ3WindowRectPickData TQ3WindowRectPickData;
  107. struct TQ3WorldRayPickData {
  108. TQ3PickData data;
  109. TQ3Ray3D ray;
  110. float vertexTolerance;
  111. float edgeTolerance;
  112. };
  113. typedef struct TQ3WorldRayPickData TQ3WorldRayPickData;
  114. /******************************************************************************
  115. ** **
  116. ** Hit data **
  117. ** **
  118. *****************************************************************************/
  119. struct TQ3HitPath {
  120. TQ3GroupObject rootGroup;
  121. unsigned long depth;
  122. TQ3GroupPosition * positions;
  123. };
  124. typedef struct TQ3HitPath TQ3HitPath;
  125. /******************************************************************************
  126. ** **
  127. ** Pick class methods **
  128. ** **
  129. *****************************************************************************/
  130. #if CALL_NOT_IN_CARBON
  131. /*
  132. * Q3Pick_GetType()
  133. *
  134. * Availability:
  135. * Non-Carbon CFM: not available
  136. * CarbonLib: not available
  137. * Mac OS X: not available
  138. */
  139. EXTERN_API_C( TQ3ObjectType )
  140. Q3Pick_GetType(TQ3PickObject pick);
  141. /*
  142. * Q3Pick_GetData()
  143. *
  144. * Availability:
  145. * Non-Carbon CFM: not available
  146. * CarbonLib: not available
  147. * Mac OS X: not available
  148. */
  149. EXTERN_API_C( TQ3Status )
  150. Q3Pick_GetData(
  151. TQ3PickObject pick,
  152. TQ3PickData * data);
  153. /*
  154. * Q3Pick_SetData()
  155. *
  156. * Availability:
  157. * Non-Carbon CFM: not available
  158. * CarbonLib: not available
  159. * Mac OS X: not available
  160. */
  161. EXTERN_API_C( TQ3Status )
  162. Q3Pick_SetData(
  163. TQ3PickObject pick,
  164. const TQ3PickData * data);
  165. /*
  166. * Q3Pick_GetVertexTolerance()
  167. *
  168. * Availability:
  169. * Non-Carbon CFM: not available
  170. * CarbonLib: not available
  171. * Mac OS X: not available
  172. */
  173. EXTERN_API_C( TQ3Status )
  174. Q3Pick_GetVertexTolerance(
  175. TQ3PickObject pick,
  176. float * vertexTolerance);
  177. /*
  178. * Q3Pick_GetEdgeTolerance()
  179. *
  180. * Availability:
  181. * Non-Carbon CFM: not available
  182. * CarbonLib: not available
  183. * Mac OS X: not available
  184. */
  185. EXTERN_API_C( TQ3Status )
  186. Q3Pick_GetEdgeTolerance(
  187. TQ3PickObject pick,
  188. float * edgeTolerance);
  189. /*
  190. * Q3Pick_SetVertexTolerance()
  191. *
  192. * Availability:
  193. * Non-Carbon CFM: not available
  194. * CarbonLib: not available
  195. * Mac OS X: not available
  196. */
  197. EXTERN_API_C( TQ3Status )
  198. Q3Pick_SetVertexTolerance(
  199. TQ3PickObject pick,
  200. float vertexTolerance);
  201. /*
  202. * Q3Pick_SetEdgeTolerance()
  203. *
  204. * Availability:
  205. * Non-Carbon CFM: not available
  206. * CarbonLib: not available
  207. * Mac OS X: not available
  208. */
  209. EXTERN_API_C( TQ3Status )
  210. Q3Pick_SetEdgeTolerance(
  211. TQ3PickObject pick,
  212. float edgeTolerance);
  213. /*
  214. * Q3Pick_GetNumHits()
  215. *
  216. * Availability:
  217. * Non-Carbon CFM: not available
  218. * CarbonLib: not available
  219. * Mac OS X: not available
  220. */
  221. EXTERN_API_C( TQ3Status )
  222. Q3Pick_GetNumHits(
  223. TQ3PickObject pick,
  224. unsigned long * numHits);
  225. /*
  226. * Q3Pick_EmptyHitList()
  227. *
  228. * Availability:
  229. * Non-Carbon CFM: not available
  230. * CarbonLib: not available
  231. * Mac OS X: not available
  232. */
  233. EXTERN_API_C( TQ3Status )
  234. Q3Pick_EmptyHitList(TQ3PickObject pick);
  235. /*
  236. * Q3Pick_GetPickDetailValidMask()
  237. *
  238. * Availability:
  239. * Non-Carbon CFM: not available
  240. * CarbonLib: not available
  241. * Mac OS X: not available
  242. */
  243. EXTERN_API_C( TQ3Status )
  244. Q3Pick_GetPickDetailValidMask(
  245. TQ3PickObject pick,
  246. unsigned long index,
  247. TQ3PickDetail * pickDetailValidMask);
  248. /*
  249. * Q3Pick_GetPickDetailData()
  250. *
  251. * Availability:
  252. * Non-Carbon CFM: not available
  253. * CarbonLib: not available
  254. * Mac OS X: not available
  255. */
  256. EXTERN_API_C( TQ3Status )
  257. Q3Pick_GetPickDetailData(
  258. TQ3PickObject pick,
  259. unsigned long index,
  260. TQ3PickDetail pickDetailValue,
  261. void * detailData);
  262. /*
  263. * Q3HitPath_EmptyData()
  264. *
  265. * Availability:
  266. * Non-Carbon CFM: not available
  267. * CarbonLib: not available
  268. * Mac OS X: not available
  269. */
  270. EXTERN_API_C( TQ3Status )
  271. Q3HitPath_EmptyData(TQ3HitPath * hitPath);
  272. #endif /* CALL_NOT_IN_CARBON */
  273. /******************************************************************************
  274. ** **
  275. ** Window point pick methods **
  276. ** **
  277. *****************************************************************************/
  278. #if CALL_NOT_IN_CARBON
  279. /*
  280. * Q3WindowPointPick_New()
  281. *
  282. * Availability:
  283. * Non-Carbon CFM: not available
  284. * CarbonLib: not available
  285. * Mac OS X: not available
  286. */
  287. EXTERN_API_C( TQ3PickObject )
  288. Q3WindowPointPick_New(const TQ3WindowPointPickData * data);
  289. /*
  290. * Q3WindowPointPick_GetPoint()
  291. *
  292. * Availability:
  293. * Non-Carbon CFM: not available
  294. * CarbonLib: not available
  295. * Mac OS X: not available
  296. */
  297. EXTERN_API_C( TQ3Status )
  298. Q3WindowPointPick_GetPoint(
  299. TQ3PickObject pick,
  300. TQ3Point2D * point);
  301. /*
  302. * Q3WindowPointPick_SetPoint()
  303. *
  304. * Availability:
  305. * Non-Carbon CFM: not available
  306. * CarbonLib: not available
  307. * Mac OS X: not available
  308. */
  309. EXTERN_API_C( TQ3Status )
  310. Q3WindowPointPick_SetPoint(
  311. TQ3PickObject pick,
  312. const TQ3Point2D * point);
  313. /*
  314. * Q3WindowPointPick_GetData()
  315. *
  316. * Availability:
  317. * Non-Carbon CFM: not available
  318. * CarbonLib: not available
  319. * Mac OS X: not available
  320. */
  321. EXTERN_API_C( TQ3Status )
  322. Q3WindowPointPick_GetData(
  323. TQ3PickObject pick,
  324. TQ3WindowPointPickData * data);
  325. /*
  326. * Q3WindowPointPick_SetData()
  327. *
  328. * Availability:
  329. * Non-Carbon CFM: not available
  330. * CarbonLib: not available
  331. * Mac OS X: not available
  332. */
  333. EXTERN_API_C( TQ3Status )
  334. Q3WindowPointPick_SetData(
  335. TQ3PickObject pick,
  336. const TQ3WindowPointPickData * data);
  337. /******************************************************************************
  338. ** **
  339. ** Window rect pick methods **
  340. ** **
  341. *****************************************************************************/
  342. /*
  343. * Q3WindowRectPick_New()
  344. *
  345. * Availability:
  346. * Non-Carbon CFM: not available
  347. * CarbonLib: not available
  348. * Mac OS X: not available
  349. */
  350. EXTERN_API_C( TQ3PickObject )
  351. Q3WindowRectPick_New(const TQ3WindowRectPickData * data);
  352. /*
  353. * Q3WindowRectPick_GetRect()
  354. *
  355. * Availability:
  356. * Non-Carbon CFM: not available
  357. * CarbonLib: not available
  358. * Mac OS X: not available
  359. */
  360. EXTERN_API_C( TQ3Status )
  361. Q3WindowRectPick_GetRect(
  362. TQ3PickObject pick,
  363. TQ3Area * rect);
  364. /*
  365. * Q3WindowRectPick_SetRect()
  366. *
  367. * Availability:
  368. * Non-Carbon CFM: not available
  369. * CarbonLib: not available
  370. * Mac OS X: not available
  371. */
  372. EXTERN_API_C( TQ3Status )
  373. Q3WindowRectPick_SetRect(
  374. TQ3PickObject pick,
  375. const TQ3Area * rect);
  376. /*
  377. * Q3WindowRectPick_GetData()
  378. *
  379. * Availability:
  380. * Non-Carbon CFM: not available
  381. * CarbonLib: not available
  382. * Mac OS X: not available
  383. */
  384. EXTERN_API_C( TQ3Status )
  385. Q3WindowRectPick_GetData(
  386. TQ3PickObject pick,
  387. TQ3WindowRectPickData * data);
  388. /*
  389. * Q3WindowRectPick_SetData()
  390. *
  391. * Availability:
  392. * Non-Carbon CFM: not available
  393. * CarbonLib: not available
  394. * Mac OS X: not available
  395. */
  396. EXTERN_API_C( TQ3Status )
  397. Q3WindowRectPick_SetData(
  398. TQ3PickObject pick,
  399. const TQ3WindowRectPickData * data);
  400. /******************************************************************************
  401. ** **
  402. ** World ray pick methods **
  403. ** **
  404. *****************************************************************************/
  405. /*
  406. * Q3WorldRayPick_New()
  407. *
  408. * Availability:
  409. * Non-Carbon CFM: not available
  410. * CarbonLib: not available
  411. * Mac OS X: not available
  412. */
  413. EXTERN_API_C( TQ3PickObject )
  414. Q3WorldRayPick_New(const TQ3WorldRayPickData * data);
  415. /*
  416. * Q3WorldRayPick_GetRay()
  417. *
  418. * Availability:
  419. * Non-Carbon CFM: not available
  420. * CarbonLib: not available
  421. * Mac OS X: not available
  422. */
  423. EXTERN_API_C( TQ3Status )
  424. Q3WorldRayPick_GetRay(
  425. TQ3PickObject pick,
  426. TQ3Ray3D * ray);
  427. /*
  428. * Q3WorldRayPick_SetRay()
  429. *
  430. * Availability:
  431. * Non-Carbon CFM: not available
  432. * CarbonLib: not available
  433. * Mac OS X: not available
  434. */
  435. EXTERN_API_C( TQ3Status )
  436. Q3WorldRayPick_SetRay(
  437. TQ3PickObject pick,
  438. const TQ3Ray3D * ray);
  439. /*
  440. * Q3WorldRayPick_GetData()
  441. *
  442. * Availability:
  443. * Non-Carbon CFM: not available
  444. * CarbonLib: not available
  445. * Mac OS X: not available
  446. */
  447. EXTERN_API_C( TQ3Status )
  448. Q3WorldRayPick_GetData(
  449. TQ3PickObject pick,
  450. TQ3WorldRayPickData * data);
  451. /*
  452. * Q3WorldRayPick_SetData()
  453. *
  454. * Availability:
  455. * Non-Carbon CFM: not available
  456. * CarbonLib: not available
  457. * Mac OS X: not available
  458. */
  459. EXTERN_API_C( TQ3Status )
  460. Q3WorldRayPick_SetData(
  461. TQ3PickObject pick,
  462. const TQ3WorldRayPickData * data);
  463. /******************************************************************************
  464. ** **
  465. ** Shape Part methods **
  466. ** **
  467. *****************************************************************************/
  468. /*
  469. * Q3ShapePart_GetType()
  470. *
  471. * Availability:
  472. * Non-Carbon CFM: not available
  473. * CarbonLib: not available
  474. * Mac OS X: not available
  475. */
  476. EXTERN_API_C( TQ3ObjectType )
  477. Q3ShapePart_GetType(TQ3ShapePartObject shapePartObject);
  478. /*
  479. * Q3MeshPart_GetType()
  480. *
  481. * Availability:
  482. * Non-Carbon CFM: not available
  483. * CarbonLib: not available
  484. * Mac OS X: not available
  485. */
  486. EXTERN_API_C( TQ3ObjectType )
  487. Q3MeshPart_GetType(TQ3MeshPartObject meshPartObject);
  488. /*
  489. * Q3ShapePart_GetShape()
  490. *
  491. * Availability:
  492. * Non-Carbon CFM: not available
  493. * CarbonLib: not available
  494. * Mac OS X: not available
  495. */
  496. EXTERN_API_C( TQ3Status )
  497. Q3ShapePart_GetShape(
  498. TQ3ShapePartObject shapePartObject,
  499. TQ3ShapeObject * shapeObject);
  500. /*
  501. * Q3MeshPart_GetComponent()
  502. *
  503. * Availability:
  504. * Non-Carbon CFM: not available
  505. * CarbonLib: not available
  506. * Mac OS X: not available
  507. */
  508. EXTERN_API_C( TQ3Status )
  509. Q3MeshPart_GetComponent(
  510. TQ3MeshPartObject meshPartObject,
  511. TQ3MeshComponent * component);
  512. /*
  513. * Q3MeshFacePart_GetFace()
  514. *
  515. * Availability:
  516. * Non-Carbon CFM: not available
  517. * CarbonLib: not available
  518. * Mac OS X: not available
  519. */
  520. EXTERN_API_C( TQ3Status )
  521. Q3MeshFacePart_GetFace(
  522. TQ3MeshFacePartObject meshFacePartObject,
  523. TQ3MeshFace * face);
  524. /*
  525. * Q3MeshEdgePart_GetEdge()
  526. *
  527. * Availability:
  528. * Non-Carbon CFM: not available
  529. * CarbonLib: not available
  530. * Mac OS X: not available
  531. */
  532. EXTERN_API_C( TQ3Status )
  533. Q3MeshEdgePart_GetEdge(
  534. TQ3MeshEdgePartObject meshEdgePartObject,
  535. TQ3MeshEdge * edge);
  536. /*
  537. * Q3MeshVertexPart_GetVertex()
  538. *
  539. * Availability:
  540. * Non-Carbon CFM: not available
  541. * CarbonLib: not available
  542. * Mac OS X: not available
  543. */
  544. EXTERN_API_C( TQ3Status )
  545. Q3MeshVertexPart_GetVertex(
  546. TQ3MeshVertexPartObject meshVertexPartObject,
  547. TQ3MeshVertex * vertex);
  548. #endif /* CALL_NOT_IN_CARBON */
  549. #if PRAGMA_ENUM_ALWAYSINT
  550. #pragma enumsalwaysint reset
  551. #ifdef __QD3DPICK__RESTORE_TWOBYTEINTS
  552. #pragma fourbyteints off
  553. #endif
  554. #elif PRAGMA_ENUM_OPTIONS
  555. #pragma option enum=reset
  556. #elif defined(__QD3DPICK__RESTORE_PACKED_ENUMS)
  557. #pragma options(pack_enums)
  558. #endif
  559. #if PRAGMA_STRUCT_ALIGN
  560. #pragma options align=reset
  561. #elif PRAGMA_STRUCT_PACKPUSH
  562. #pragma pack(pop)
  563. #elif PRAGMA_STRUCT_PACK
  564. #pragma pack()
  565. #endif
  566. #ifdef PRAGMA_IMPORT_OFF
  567. #pragma import off
  568. #elif PRAGMA_IMPORT
  569. #pragma import reset
  570. #endif
  571. #ifdef __cplusplus
  572. }
  573. #endif
  574. #endif /* __QD3DPICK__ */