Houdini Engine 6.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
HAPI.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * COMMENTS:
7  * For parsing help, there is a variable naming convention we maintain:
8  * strings: char * and does not end in "buffer"
9  * binary: char * and is either exactly "buffer" or ends
10  * with "_buffer"
11  * single values: don't end with "_array" or "_buffer"
12  * arrays: <type> * and is either "array" or ends
13  * with "_array". Use "_fixed_array" to skip resize using
14  * tupleSize for the thrift generator.
15  * array length: is either "length", "count", or ends with
16  * "_length" or "_count". Use "_fixed_array" to skip resize
17  * using tupleSize for the thrift generator.
18  */
19 
20 #ifndef __HAPI_h__
21 #define __HAPI_h__
22 
23 #include "HAPI_API.h"
24 #include "HAPI_Common.h"
25 #include "HAPI_Helpers.h"
26 
27 /// @defgroup Sessions
28 /// Functions for creating and inspecting HAPI session state.
29 
30 /// @brief Creates a new in-process session. There can only be
31 /// one such session per host process.
32 ///
33 /// @ingroup Sessions
34 ///
35 /// @param[out] session
36 /// A ::HAPI_Session struct to receive the session id,
37 /// in this case always 0.
38 ///
40 
41 /// @brief Starts a Thrift RPC server process on the local host serving
42 /// clients on a TCP socket and waits for it to start serving.
43 /// It is safe to create an RPC session on local host using the
44 /// specified port after this call succeeds.
45 ///
46 /// @ingroup Sessions
47 /// @param[in] options
48 /// Options to configure the server being started.
49 ///
50 /// @param[in] port
51 /// The TCP socket to create on the server.
52 ///
53 /// @param[out] process_id
54 /// The process id of the server, if started successfully.
55 ///
56 /// @param[in] log_file
57 /// When a filepath is provided for this argument, all logs will
58 /// be appended to the specified file. The specfied path must be
59 /// an absolute path. The server will create any intermediate
60 /// directories in the filepath that do not already exist. When
61 /// this argument is NULL/nullptr, logging will be directed to
62 /// the standard streams.
63 ///
65  const HAPI_ThriftServerOptions * options,
66  int port,
67  HAPI_ProcessId * process_id,
68  const char * log_file );
69 
70 /// @brief Creates a Thrift RPC session using a TCP socket as transport.
71 ///
72 /// @ingroup Sessions
73 /// @param[out] session
74 /// A ::HAPI_Session struct to receive the unique session id
75 /// of the new session.
76 ///
77 /// @param[in] host_name
78 /// The name of the server host.
79 ///
80 /// @param[in] port
81 /// The server port to connect to.
82 ///
84  const char * host_name,
85  int port );
86 
87 /// @brief Starts a Thrift RPC server process on the local host serving
88 /// clients on a Windows named pipe or a Unix domain socket and
89 /// waits for it to start serving. It is safe to create an RPC
90 /// session using the specified pipe or socket after this call
91 /// succeeds.
92 ///
93 /// @ingroup Sessions
94 ///
95 /// @param[in] options
96 /// Options to configure the server being started.
97 ///
98 /// @param[in] pipe_name
99 /// The name of the pipe or socket.
100 ///
101 /// @param[out] process_id
102 /// The process id of the server, if started successfully.
103 ///
104 /// @param[in] log_file
105 /// When a filepath is provided for this argument, all logs will
106 /// be appended to the specified file. The specfied path must be
107 /// an absolute path. The server will create any intermediate
108 /// directories in the filepath that do not already exist. When
109 /// this argument is NULL/nullptr, logging will be directed to
110 /// the standard streams.
111 ///
113  const HAPI_ThriftServerOptions * options,
114  const char * pipe_name,
115  HAPI_ProcessId * process_id,
116  const char * log_file );
117 
118 /// @brief Creates a Thrift RPC session using a Windows named pipe
119 /// or a Unix domain socket as transport.
120 ///
121 /// @ingroup Sessions
122 ///
123 /// @param[out] session
124 /// A ::HAPI_Session struct to receive the unique session id
125 /// of the new session.
126 ///
127 /// @param[in] pipe_name
128 /// The name of the pipe or socket.
129 ///
131  const char * pipe_name );
132 
133 /// @brief Binds a new implementation DLL to one of the custom session
134 /// slots.
135 ///
136 /// @ingroup Sessions
137 ///
138 /// @param[in] session_type
139 /// Which custom implementation slot to bind the
140 /// DLL to. Must be one of ::HAPI_SESSION_CUSTOM1,
141 /// ::HAPI_SESSION_CUSTOM2, or ::HAPI_SESSION_CUSTOM3.
142 ///
143 /// @param[in] dll_path
144 /// The path to the custom implementation DLL.
145 ///
147  const char * dll_path );
148 
149 /// @brief Creates a new session using a custom implementation.
150 /// Note that the implementation DLL must already have
151 /// been bound to the session via calling
152 /// ::HAPI_BindCustomImplementation().
153 ///
154 /// @ingroup Sessions
155 ///
156 /// @param[in] session_type
157 /// session_type indicates which custom session
158 /// slot to create the session on.
159 ///
160 /// @param[in,out] session_info
161 /// Any data required by the custom implementation to
162 /// create its session.
163 ///
164 /// @param[out] session
165 /// A ::HAPI_Session struct to receive the session id,
166 /// The sessionType parameter of the struct should
167 /// also match the session_type parameter passed in.
168 ///
170  void * session_info,
171  HAPI_Session * session );
172 
173 /// @brief Checks whether the session identified by ::HAPI_Session::id is
174 /// a valid session opened in the implementation identified by
175 /// ::HAPI_Session::type.
176 ///
177 /// @ingroup Sessions
178 ///
179 /// @param[in] session
180 /// The ::HAPI_Session to check.
181 ///
182 /// @return ::HAPI_RESULT_SUCCESS if the session is valid.
183 /// Otherwise, the session is invalid and passing it to
184 /// other HAPI calls may result in undefined behavior.
185 ///
186 HAPI_DECL HAPI_IsSessionValid( const HAPI_Session * session );
187 
188 /// @brief Closes a session. If the session has been established using
189 /// RPC, then the RPC connection is closed.
190 ///
191 /// @ingroup Sessions
192 ///
193 /// @param[in] session
194 /// The HAPI_Session to close. After this call, this
195 /// session is invalid and passing it to HAPI calls other
196 /// than ::HAPI_IsSessionValid() may result in undefined
197 /// behavior.
198 ///
199 HAPI_DECL HAPI_CloseSession( const HAPI_Session * session );
200 
201 // INITIALIZATION / CLEANUP -------------------------------------------------
202 
203 /// @brief Check whether the runtime has been initialized yet using
204 /// ::HAPI_Initialize(). Function will return ::HAPI_RESULT_SUCCESS
205 /// if the runtime has been initialized and ::HAPI_RESULT_NOT_INITIALIZED
206 /// otherwise.
207 ///
208 /// @ingroup Sessions
209 ///
210 /// @param[in] session
211 /// The session of Houdini you are interacting with.
212 /// See @ref HAPI_Sessions for more on sessions.
213 /// Pass NULL to just use the default in-process session.
214 /// <!-- default NULL -->
215 ///
216 HAPI_DECL HAPI_IsInitialized( const HAPI_Session * session );
217 
218 /// @brief Create the asset manager, set up environment variables, and
219 /// initialize the main Houdini scene. No license check is done
220 /// during this step. Only when you try to load an asset library
221 /// (OTL) do we actually check for licenses.
222 ///
223 /// @ingroup Sessions
224 ///
225 /// @param[in] session
226 /// The session of Houdini you are interacting with.
227 /// See @ref HAPI_Sessions for more on sessions.
228 /// Pass NULL to just use the default in-process session.
229 /// <!-- default NULL -->
230 ///
231 /// @param[in] cook_options
232 /// Global cook options used by subsequent default cooks.
233 /// This can be overwritten by individual cooks but if
234 /// you choose to instantiate assets with cook_on_load
235 /// set to true then these cook options will be used.
236 ///
237 /// @param[in] use_cooking_thread
238 /// Use a separate thread for cooking of assets. This
239 /// allows for asynchronous cooking and larger stack size.
240 /// <!-- default true -->
241 ///
242 /// @param[in] cooking_thread_stack_size
243 /// Set the stack size of the cooking thread. Use -1 to
244 /// set the stack size to the Houdini default. This
245 /// value is in bytes.
246 /// <!-- default -1 -->
247 ///
248 /// @param[in] houdini_environment_files
249 /// A list of paths, separated by a ";" on Windows and a ":"
250 /// on Linux and Mac, to .env files that follow the same
251 /// syntax as the houdini.env file in Houdini's user prefs
252 /// folder. These will be applied after the default
253 /// houdini.env file and will overwrite the process'
254 /// environment variable values. You an use this to enforce
255 /// a stricter environment when running engine.
256 /// For more info, see:
257 /// http://www.sidefx.com/docs/houdini/basics/config_env
258 /// <!-- default NULL -->
259 ///
260 /// @param[in] otl_search_path
261 /// The directory where OTLs are searched for. You can
262 /// pass NULL here which will only use the default
263 /// Houdini OTL search paths. You can also pass in
264 /// multiple paths separated by a ";" on Windows and a ":"
265 /// on Linux and Mac. If something other than NULL is
266 /// passed the default Houdini search paths will be
267 /// appended to the end of the path string.
268 /// <!-- default NULL -->
269 ///
270 /// @param[in] dso_search_path
271 /// The directory where generic DSOs (custom plugins) are
272 /// searched for. You can pass NULL here which will
273 /// only use the default Houdini DSO search paths. You
274 /// can also pass in multiple paths separated by a ";"
275 /// on Windows and a ":" on Linux and Mac. If something
276 /// other than NULL is passed the default Houdini search
277 /// paths will be appended to the end of the path string.
278 /// <!-- default NULL -->
279 ///
280 /// @param[in] image_dso_search_path
281 /// The directory where image DSOs (custom plugins) are
282 /// searched for. You can pass NULL here which will
283 /// only use the default Houdini DSO search paths. You
284 /// can also pass in multiple paths separated by a ";"
285 /// on Windows and a ":" on Linux and Mac. If something
286 /// other than NULL is passed the default Houdini search
287 /// paths will be appended to the end of the path string.
288 /// <!-- default NULL -->
289 ///
290 /// @param[in] audio_dso_search_path
291 /// The directory where audio DSOs (custom plugins) are
292 /// searched for. You can pass NULL here which will
293 /// only use the default Houdini DSO search paths. You
294 /// can also pass in multiple paths separated by a ";"
295 /// on Windows and a ":" on Linux and Mac. If something
296 /// other than NULL is passed the default Houdini search
297 /// paths will be appended to the end of the path string.
298 /// <!-- default NULL -->
299 ///
300 HAPI_DECL HAPI_Initialize( const HAPI_Session * session,
301  const HAPI_CookOptions * cook_options,
302  HAPI_Bool use_cooking_thread,
303  int cooking_thread_stack_size,
304  const char * houdini_environment_files,
305  const char * otl_search_path,
306  const char * dso_search_path,
307  const char * image_dso_search_path,
308  const char * audio_dso_search_path );
309 
310 /// @brief Clean up memory. This will unload all assets and you will
311 /// need to call ::HAPI_Initialize() again to be able to use any
312 /// HAPI methods again.
313 ///
314 /// @note This does not release any licenses. The license will be returned when
315 /// the process terminates.
316 ///
317 /// @ingroup Sessions
318 ///
319 /// @param[in] session
320 /// The session of Houdini you are interacting with.
321 /// See @ref HAPI_Sessions for more on sessions.
322 /// Pass NULL to just use the default in-process session.
323 /// <!-- default NULL -->
324 ///
325 HAPI_DECL HAPI_Cleanup( const HAPI_Session * session );
326 
327 /// @brief When using an in-process session, this method **must** be called in
328 /// order for the host process to shutdown cleanly. This method should
329 /// be called before ::HAPI_CloseSession().
330 ///
331 /// @note This method should only be called before exiting the program,
332 /// because HAPI can no longer be used by the process once this method
333 /// has been called.
334 ///
335 /// @ingroup Sessions
336 ///
337 /// @param[in] session
338 /// The session of Houdini you are interacting with.
339 /// See @ref HAPI_Sessions for more on sessions.
340 /// Pass NULL to just use the default in-process session.
341 /// <!-- default NULL -->
342 ///
343 HAPI_DECL HAPI_Shutdown( const HAPI_Session * session );
344 
345 /// @defgroup Environment
346 /// Functions for reading and writing to the session environment
347 
348 /// @brief Gives back a certain environment integers like version number.
349 /// Note that you do not need a session for this. These constants
350 /// are hard-coded in all HAPI implementations, including HARC and
351 /// HAPIL. This should be the first API you call to determine if
352 /// any future API calls will mismatch implementation.
353 ///
354 /// @ingroup Environment
355 ///
356 /// @param[in] int_type
357 /// One of ::HAPI_EnvIntType.
358 ///
359 /// @param[out] value
360 /// Int value.
361 ///
362 HAPI_DECL HAPI_GetEnvInt( HAPI_EnvIntType int_type, int * value );
363 
364 /// @brief Gives back a certain session-specific environment integers
365 /// like current license type being used.
366 ///
367 /// @ingroup Environment
368 ///
369 /// @param[in] session
370 /// The session of Houdini you are interacting with.
371 /// See @ref HAPI_Sessions for more on sessions.
372 /// Pass NULL to just use the default in-process session.
373 /// <!-- default NULL -->
374 ///
375 /// @param[in] int_type
376 /// One of ::HAPI_SessionEnvIntType.
377 ///
378 /// @param[out] value
379 /// Int value.
380 ///
382  HAPI_SessionEnvIntType int_type,
383  int * value );
384 
385 /// @brief Get environment variable from the server process as an integer.
386 ///
387 /// @ingroup Environment
388 ///
389 /// @param[in] session
390 /// The session of Houdini you are interacting with.
391 /// See @ref HAPI_Sessions for more on sessions.
392 /// Pass NULL to just use the default in-process session.
393 /// <!-- default NULL -->
394 ///
395 /// @param[in] variable_name
396 /// Name of the environmnet variable.
397 ///
398 /// @param[out] value
399 /// The int pointer to return the value in.
400 ///
402  const char * variable_name,
403  int * value );
404 
405 /// @brief Get environment variable from the server process as a string.
406 ///
407 /// @ingroup Environment
408 ///
409 /// @param[in] session
410 /// The session of Houdini you are interacting with.
411 /// See @ref HAPI_Sessions for more on sessions.
412 /// Pass NULL to just use the default in-process session.
413 /// <!-- default NULL -->
414 ///
415 /// @param[in] variable_name
416 /// Name of the environmnet variable.
417 ///
418 /// @param[out] value
419 /// The HAPI_StringHandle pointer to return the value in.
420 ///
422  const char * variable_name,
423  HAPI_StringHandle * value );
424 
425 /// @brief Provides the number of environment variables that are in
426 /// the server environment's process
427 ///
428 /// Note that ::HAPI_GetServerEnvVarList() should be called directly after
429 /// this method, otherwise there is the possibility that the environment
430 /// variable count of the server will have changed by the time that
431 /// ::HAPI_GetServerEnvVarList() is called.
432 ///
433 /// @ingroup Environment
434 ///
435 /// @param[in] session
436 /// The session of Houdini you are interacting with.
437 /// See @ref HAPI_Sessions for more on sessions.
438 /// Pass NULL to just use the default in-process session.
439 /// <!-- default NULL -->
440 ///
441 /// @param[out] env_count
442 /// A pointer to an int to return the value in
444  int * env_count );
445 
446 /// @brief Provides a list of all of the environment variables
447 /// in the server's process
448 ///
449 /// @ingroup Environment
450 ///
451 /// @param[in] session
452 /// The session of Houdini you are interacting with.
453 /// See @ref HAPI_Sessions for more on sessions.
454 /// Pass NULL to just use the default in-process session.
455 /// <!-- default NULL -->
456 ///
457 /// @param[out] values_array
458 /// An ::HAPI_StringHandle array at least the size of length
459 ///
460 /// @param[in] start
461 /// First index of range. Must be at least @c 0 and at most
462 /// @c env_count - 1 where @c env_count is the count returned by
463 /// ::HAPI_GetServerEnvVarCount()
464 /// <!-- min 0 -->
465 /// <!-- max ::HAPI_GetServerEnvVarCount -->
466 /// <!-- default 0 -->
467 ///
468 /// @param[in] length
469 /// Given @c env_count returned by ::HAPI_GetServerEnvVarCount(),
470 /// length should be at least @c 0 and at most <tt>env_count - start.</tt>
471 /// <!-- default 0 -->
473  HAPI_StringHandle * values_array,
474  int start,
475  int length );
476 
477 /// @brief Set environment variable for the server process as an integer.
478 ///
479 /// Note that this may affect other sessions on the same server
480 /// process. The session parameter is mainly there to identify the
481 /// server process, not the specific session.
482 ///
483 /// For in-process sessions, this will affect the current process's
484 /// environment.
485 ///
486 /// @ingroup Environment
487 ///
488 /// @param[in] session
489 /// The session of Houdini you are interacting with.
490 /// See @ref HAPI_Sessions for more on sessions.
491 /// Pass NULL to just use the default in-process session.
492 /// <!-- default NULL -->
493 ///
494 /// @param[in] variable_name
495 /// Name of the environment variable.
496 ///
497 /// @param[in] value
498 /// The integer value.
499 ///
501  const char * variable_name,
502  int value );
503 
504 /// @brief Set environment variable for the server process as a string.
505 ///
506 /// Note that this may affect other sessions on the same server
507 /// process. The session parameter is mainly there to identify the
508 /// server process, not the specific session.
509 ///
510 /// For in-process sessions, this will affect the current process's
511 /// environment.
512 ///
513 /// @ingroup Environment
514 ///
515 /// @param[in] session
516 /// The session of Houdini you are interacting with.
517 /// See @ref HAPI_Sessions for more on sessions.
518 /// Pass NULL to just use the default in-process session.
519 /// <!-- default NULL -->
520 ///
521 /// @param[in] variable_name
522 /// Name of the environmnet variable.
523 ///
524 /// @param[in] value
525 /// The string value.
526 ///
528  const char * variable_name,
529  const char * value );
530 
531 /// @defgroup Status
532 /// Functions for reading session connection and cook status.
533 
534 /// @brief Gives back the status code for a specific status type.
535 ///
536 /// @ingroup Status
537 ///
538 /// @param[in] session
539 /// The session of Houdini you are interacting with.
540 /// See @ref HAPI_Sessions for more on sessions.
541 /// Pass NULL to just use the default in-process session.
542 /// <!-- default NULL -->
543 ///
544 /// @param[in] status_type
545 /// One of ::HAPI_StatusType.
546 ///
547 /// @param[out] status
548 /// Actual status code for the status type given. That is,
549 /// if you pass in ::HAPI_STATUS_CALL_RESULT as
550 /// status_type, you'll get back a ::HAPI_Result for this
551 /// argument. If you pass in ::HAPI_STATUS_COOK_STATE
552 /// as status_type, you'll get back a ::HAPI_State enum
553 /// for this argument.
554 ///
555 HAPI_DECL HAPI_GetStatus( const HAPI_Session * session,
556  HAPI_StatusType status_type,
557  int * status );
558 
559 /// @brief Return length of string buffer storing status string message.
560 ///
561 /// If called with ::HAPI_STATUS_COOK_RESULT this will actually
562 /// parse the node networks for the previously cooked asset(s)
563 /// and aggregate all node errors, warnings, and messages
564 /// (depending on the @c verbosity level set). Usually this is done
565 /// just for the last cooked single asset but if you load a whole
566 /// Houdini scene using ::HAPI_LoadHIPFile() then you'll have
567 /// multiple "previously cooked assets".
568 ///
569 /// You MUST call ::HAPI_GetStatusStringBufLength() before calling
570 /// ::HAPI_GetStatusString() because ::HAPI_GetStatusString() will
571 /// not return the real status string and instead return a
572 /// cached version of the string that was created inside
573 /// ::HAPI_GetStatusStringBufLength(). The reason for this is that
574 /// the length of the real status string may change between
575 /// the call to ::HAPI_GetStatusStringBufLength() and the call to
576 /// ::HAPI_GetStatusString().
577 ///
578 /// @ingroup Status
579 ///
580 /// @param[in] session
581 /// The session of Houdini you are interacting with.
582 /// See @ref HAPI_Sessions for more on sessions.
583 /// Pass NULL to just use the default in-process session.
584 /// <!-- default NULL -->
585 ///
586 /// @param[in] status_type
587 /// One of ::HAPI_StatusType.
588 ///
589 /// @param[in] verbosity
590 /// Preferred verbosity level.
591 ///
592 /// @param[out] buffer_length
593 /// Length of buffer char array ready to be filled.
594 ///
596  HAPI_StatusType status_type,
597  HAPI_StatusVerbosity verbosity,
598  int * buffer_length );
599 
600 /// @brief Return status string message.
601 ///
602 /// You MUST call ::HAPI_GetStatusStringBufLength() before calling
603 /// ::HAPI_GetStatusString() because ::HAPI_GetStatusString() will
604 /// not return the real status string and instead return a
605 /// cached version of the string that was created inside
606 /// ::HAPI_GetStatusStringBufLength(). The reason for this is that
607 /// the length of the real status string may change between
608 /// the call to ::HAPI_GetStatusStringBufLength() and the call to
609 /// ::HAPI_GetStatusString().
610 ///
611 /// @ingroup Status
612 ///
613 /// @param[in] session
614 /// The session of Houdini you are interacting with.
615 /// See @ref HAPI_Sessions for more on sessions.
616 /// Pass NULL to just use the default in-process session.
617 /// <!-- default NULL -->
618 ///
619 /// @param[in] status_type
620 /// One of ::HAPI_StatusType.
621 ///
622 /// @param[out] string_value
623 /// Buffer char array ready to be filled.
624 ///
625 /// @param[in] length
626 /// Length of the string buffer (must match size of
627 /// @p string_value - so including NULL terminator).
628 /// <!-- source ::HAPI_GetStatusStringBufLength -->
629 ///
631  HAPI_StatusType status_type,
632  char * string_value,
633  int length );
634 
635 /// @brief Compose the cook result string (errors and warnings) of a
636 /// specific node.
637 ///
638 /// This will actually parse the node network inside the given
639 /// node and return ALL errors/warnings/messages of all child nodes,
640 /// combined into a single string. If you'd like a more narrowed
641 /// search, call this function on one of the child nodes.
642 ///
643 /// You MUST call ::HAPI_ComposeNodeCookResult() before calling
644 /// ::HAPI_GetComposedNodeCookResult() because
645 /// ::HAPI_GetComposedNodeCookResult() will
646 /// not return the real result string and instead return a
647 /// cached version of the string that was created inside
648 /// ::HAPI_ComposeNodeCookResult(). The reason for this is that
649 /// the length of the real status string may change between
650 /// the call to ::HAPI_ComposeNodeCookResult() and the call to
651 /// ::HAPI_GetComposedNodeCookResult().
652 ///
653 /// @ingroup Status
654 ///
655 /// @param[in] session
656 /// The session of Houdini you are interacting with.
657 /// See @ref HAPI_Sessions for more on sessions.
658 /// Pass NULL to just use the default in-process session.
659 /// <!-- default NULL -->
660 ///
661 /// @param[in] node_id
662 /// The node id.
663 ///
664 /// @param[in] verbosity
665 /// Preferred verbosity level.
666 ///
667 /// @param[out] buffer_length
668 /// Length of buffer char array ready to be filled.
669 ///
671  HAPI_NodeId node_id,
672  HAPI_StatusVerbosity verbosity,
673  int * buffer_length );
674 
675 /// @brief Return cook result string message on a single node.
676 ///
677 /// You MUST call ::HAPI_ComposeNodeCookResult() before calling
678 /// ::HAPI_GetComposedNodeCookResult() because
679 /// ::HAPI_GetComposedNodeCookResult() will
680 /// not return the real result string and instead return a
681 /// cached version of the string that was created inside
682 /// ::HAPI_ComposeNodeCookResult(). The reason for this is that
683 /// the length of the real status string may change between
684 /// the call to ::HAPI_ComposeNodeCookResult() and the call to
685 /// ::HAPI_GetComposedNodeCookResult().
686 ///
687 /// @ingroup Status
688 ///
689 /// @param[in] session
690 /// The session of Houdini you are interacting with.
691 /// See @ref HAPI_Sessions for more on sessions.
692 /// Pass NULL to just use the default in-process session.
693 /// <!-- default NULL -->
694 ///
695 /// @param[out] string_value
696 /// Buffer char array ready to be filled.
697 ///
698 /// @param[in] length
699 /// Length of the string buffer (must match size of
700 /// @p string_value - so including NULL terminator).
701 /// <!-- source ::HAPI_ComposeNodeCookResult -->
702 ///
704  char * string_value,
705  int length );
706 
707 /// @brief Recursively check for specific errors by error code on a node.
708 ///
709 /// Note that checking for errors can be expensive because it checks
710 /// ALL child nodes within a node and then tries to do a string match
711 /// for the errors being looked for. This is why such error checking
712 /// is part of a standalone function and not done during the cooking
713 /// step.
714 ///
715 /// @ingroup Status
716 ///
717 /// @param[in] session
718 /// The session of Houdini you are interacting with.
719 /// See @ref HAPI_Sessions for more on sessions.
720 /// Pass NULL to just use the default in-process session.
721 /// <!-- default NULL -->
722 ///
723 /// @param[in] node_id
724 /// The node id.
725 ///
726 /// @param[in] errors_to_look_for
727 /// The HAPI_ErrorCode error codes (as a bitfield) to look for.
728 ///
729 /// @param[out] errors_found
730 /// Returned HAPI_ErrorCode bitfield indicating which of the
731 /// looked for errors have been found.
732 ///
734  HAPI_NodeId node_id,
735  HAPI_ErrorCodeBits errors_to_look_for,
736  HAPI_ErrorCodeBits * errors_found );
737 
738 /// @brief Clears the connection error. Should be used before starting
739 /// or creating Thrift server.
740 ///
741 /// Only available when using Thrift connections.
742 ///
743 /// @ingroup Status
744 ///
746 
747 /// @brief Return the length of string buffer storing connection error
748 /// message.
749 ///
750 /// @ingroup Status
751 ///
752 /// Only available when using Thrift connections.
753 ///
754 /// @param[out] buffer_length
755 /// Length of buffer char array ready to be filled.
756 ///
757 HAPI_DECL HAPI_GetConnectionErrorLength( int * buffer_length );
758 
759 /// @brief Return the connection error message.
760 ///
761 /// You MUST call ::HAPI_GetConnectionErrorLength() before calling
762 /// this to get the correct string length.
763 ///
764 /// Only available when using Thrift connections.
765 ///
766 /// @ingroup Status
767 ///
768 /// @param[out] string_value
769 /// Buffer char array ready to be filled.
770 ///
771 /// @param[in] length
772 /// Length of the string buffer (must match size of
773 /// string_value - so including NULL terminator).
774 /// Use ::HAPI_GetConnectionErrorLength to get this length.
775 ///
776 /// @param[in] clear
777 /// If true, will clear the error when HAPI_RESULT_SUCCESS
778 /// is returned.
779 ///
780 HAPI_DECL HAPI_GetConnectionError( char * string_value,
781  int length,
782  HAPI_Bool clear );
783 
784 /// @brief Get total number of nodes that need to cook in the current
785 /// session.
786 ///
787 /// @ingroup Status
788 ///
789 /// @param[in] session
790 /// The session of Houdini you are interacting with.
791 /// See @ref HAPI_Sessions for more on sessions.
792 /// Pass NULL to just use the default in-process session.
793 /// <!-- default NULL -->
794 ///
795 /// @param[out] count
796 /// Total cook count.
797 ///
799  int * count );
800 
801 /// @brief Get current number of nodes that have already cooked in the
802 /// current session. Note that this is a very crude approximation
803 /// of the cooking progress - it may never make it to 100% or it
804 /// might spend another hour at 100%. Use ::HAPI_GetStatusString
805 /// to get a better idea of progress if this number gets stuck.
806 ///
807 /// @ingroup Status
808 ///
809 /// @param[in] session
810 /// The session of Houdini you are interacting with.
811 /// See @ref HAPI_Sessions for more on sessions.
812 /// Pass NULL to just use the default in-process session.
813 /// <!-- default NULL -->
814 ///
815 /// @param[out] count
816 /// Current cook count.
817 ///
819  int * count );
820 
821 /// @brief Interrupt a cook or load operation.
822 ///
823 /// @ingroup Status
824 ///
825 /// @param[in] session
826 /// The session of Houdini you are interacting with.
827 /// See @ref HAPI_Sessions for more on sessions.
828 /// Pass NULL to just use the default in-process session.
829 /// <!-- default NULL -->
830 ///
831 HAPI_DECL HAPI_Interrupt( const HAPI_Session * session );
832 
833 /// @defgroup Utility
834 /// Utility math and other functions
835 
836 /// @brief Converts the transform described by a ::HAPI_TransformEuler
837 /// struct into a different transform and rotation order.
838 ///
839 /// @ingroup Utility
840 ///
841 /// @param[in] session
842 /// The session of Houdini you are interacting with.
843 /// See @ref HAPI_Sessions for more on sessions.
844 /// Pass NULL to just use the default in-process session.
845 /// <!-- default NULL -->
846 ///
847 /// @param[in] transform_in
848 /// The transform to be converted.
849 ///
850 /// @param[in] rst_order
851 /// The desired transform order of the output.
852 ///
853 /// @param[in] rot_order
854 /// The desired rotation order of the output.
855 ///
856 /// @param[out] transform_out
857 /// The converted transform.
858 ///
860  const HAPI_TransformEuler * transform_in,
861  HAPI_RSTOrder rst_order,
862  HAPI_XYZOrder rot_order,
863  HAPI_TransformEuler * transform_out );
864 
865 /// @brief Converts a 4x4 matrix into its TRS form.
866 ///
867 /// @ingroup Utility
868 ///
869 /// @param[in] session
870 /// The session of Houdini you are interacting with.
871 /// See @ref HAPI_Sessions for more on sessions.
872 /// Pass NULL to just use the default in-process session.
873 /// <!-- default NULL -->
874 ///
875 /// @param[in] matrix
876 /// A 4x4 matrix expressed in a 16 element float array.
877 ///
878 /// @param[in] rst_order
879 /// The desired transform order of the output.
880 ///
881 /// @param[out] transform_out
882 /// Used for the output.
883 ///
885  const float * matrix,
886  HAPI_RSTOrder rst_order,
887  HAPI_Transform * transform_out );
888 
889 /// @brief Converts a 4x4 matrix into its TRS form.
890 ///
891 /// @ingroup Utility
892 ///
893 /// @param[in] session
894 /// The session of Houdini you are interacting with.
895 /// See @ref HAPI_Sessions for more on sessions.
896 /// Pass NULL to just use the default in-process session.
897 /// <!-- default NULL -->
898 ///
899 /// @param[in] matrix
900 /// A 4x4 matrix expressed in a 16 element float array.
901 ///
902 /// @param[in] rst_order
903 /// The desired transform order of the output.
904 ///
905 /// @param[in] rot_order
906 /// The desired rotation order of the output.
907 ///
908 /// @param[out] transform_out
909 /// Used for the output.
910 ///
912  const float * matrix,
913  HAPI_RSTOrder rst_order,
914  HAPI_XYZOrder rot_order,
915  HAPI_TransformEuler * transform_out );
916 
917 /// @brief Converts ::HAPI_Transform into a 4x4 transform matrix.
918 ///
919 /// @ingroup Utility
920 ///
921 /// @param[in] session
922 /// The session of Houdini you are interacting with.
923 /// See @ref HAPI_Sessions for more on sessions.
924 /// Pass NULL to just use the default in-process session.
925 /// <!-- default NULL -->
926 ///
927 /// @param[in] transform
928 /// The ::HAPI_Transform you wish to convert.
929 ///
930 /// @param[out] matrix
931 /// A 16 element float array that will contain the result.
932 ///
934  const HAPI_Transform * transform,
935  float * matrix );
936 
937 /// @brief Converts ::HAPI_TransformEuler into a 4x4 transform matrix.
938 ///
939 /// @ingroup Utility
940 ///
941 /// @param[in] session
942 /// The session of Houdini you are interacting with.
943 /// See @ref HAPI_Sessions for more on sessions.
944 /// Pass NULL to just use the default in-process session.
945 /// <!-- default NULL -->
946 ///
947 /// @param[in] transform
948 /// The ::HAPI_TransformEuler you wish to convert.
949 ///
950 /// @param[out] matrix
951 /// A 16 element float array that will contain the result.
952 ///
954  const HAPI_Session * session,
955  const HAPI_TransformEuler * transform,
956  float * matrix );
957 
958 /// @brief Acquires or releases the Python interpreter lock. This is
959 /// needed if HAPI is called from Python and HAPI is in threaded
960 /// mode (see ::HAPI_Initialize()).
961 ///
962 /// The problem arises when async functions like
963 /// ::HAPI_CreateNode() may start a cooking thread that
964 /// may try to run Python code. That is, we would now have
965 /// Python running on two different threads - something not
966 /// allowed by Python by default.
967 ///
968 /// We need to tell Python to explicitly "pause" the Python state
969 /// on the client thread while we run Python in our cooking thread.
970 ///
971 /// You must call this function first with locked == true before
972 /// any async HAPI call. Then, after the async call finished,
973 /// detected via calls to ::HAPI_GetStatus(), call this method
974 /// again to release the lock with locked == false.
975 ///
976 /// @ingroup Utility
977 ///
978 /// @param[in] session
979 /// The session of Houdini you are interacting with.
980 /// See @ref HAPI_Sessions for more on sessions.
981 /// Pass NULL to just use the default in-process session.
982 /// <!-- default NULL -->
983 ///
984 /// @param[in] locked
985 /// True will acquire the interpreter lock to use it for
986 /// the HAPI cooking thread. False will release the lock
987 /// back to the client thread.
988 ///
990  HAPI_Bool locked );
991 
992 /// @defgroup Strings
993 /// Functions for handling strings.
994 
995 /// @brief Gives back the string length of the string with the
996 /// given handle.
997 ///
998 /// @ingroup Strings
999 ///
1000 /// @param[in] session
1001 /// The session of Houdini you are interacting with.
1002 /// See @ref HAPI_Sessions for more on sessions.
1003 /// Pass NULL to just use the default in-process session.
1004 /// <!-- default NULL -->
1005 ///
1006 /// @param[in] string_handle
1007 /// Handle of the string to query.
1008 ///
1009 /// @param[out] buffer_length
1010 /// Buffer length of the queried string (including NULL
1011 /// terminator).
1012 ///
1014  HAPI_StringHandle string_handle,
1015  int * buffer_length );
1016 
1017 /// @brief Gives back the string value of the string with the
1018 /// given handle.
1019 ///
1020 /// @ingroup Strings
1021 ///
1022 /// @param[in] session
1023 /// The session of Houdini you are interacting with.
1024 /// See @ref HAPI_Sessions for more on sessions.
1025 /// Pass NULL to just use the default in-process session.
1026 /// <!-- default NULL -->
1027 ///
1028 /// @param[in] string_handle
1029 /// Handle of the string to query.
1030 ///
1031 /// @param[out] string_value
1032 /// Actual string value (character array).
1033 ///
1034 /// @param[in] length
1035 /// Length of the string buffer (must match size of
1036 /// @p string_value - so including NULL terminator).
1037 ///
1038 HAPI_DECL HAPI_GetString( const HAPI_Session * session,
1039  HAPI_StringHandle string_handle,
1040  char * string_value,
1041  int length );
1042 
1043 /// @brief Adds the given string to the string table and returns
1044 /// the handle. It is the responsibility of the caller to
1045 /// manage access to the string. The intended use for custom strings
1046 /// is to allow structs that reference strings to be passed in to HAPI
1047 ///
1048 /// @ingroup Strings
1049 ///
1050 /// @param[in] session
1051 /// The session of Houdini you are interacting with.
1052 /// See @ref HAPI_Sessions for more on sessions.
1053 /// Pass NULL to just use the default in-process session.
1054 /// <!-- default NULL -->
1055 ///
1056 /// @param[in] string_value
1057 /// Actual string value (character array).
1058 ///
1059 /// @param[out] handle_value
1060 /// Handle of the string that was added
1061 ///
1063  const char * string_value,
1064  HAPI_StringHandle * handle_value );
1065 
1066 /// @brief Removes the specified string from the server
1067 /// and invalidates the handle
1068 ///
1069 /// @ingroup Strings
1070 ///
1071 /// @param[in] session
1072 /// The session of Houdini you are interacting with.
1073 /// See @ref HAPI_Sessions for more on sessions.
1074 /// Pass NULL to just use the default in-process session.
1075 /// <!-- default NULL -->
1076 ///
1077 /// @param[in] string_handle
1078 /// Handle of the string that was added
1079 ///
1081  const HAPI_StringHandle string_handle );
1082 
1083 /// @brief Gives back the length of the buffer needed to hold
1084 /// all the values null-separated for the given string
1085 /// handles. Used with ::HAPI_GetStringBatch().
1086 ///
1087 /// @ingroup Strings
1088 ///
1089 /// @param[in] session
1090 /// The session of Houdini you are interacting with.
1091 /// See @ref HAPI_Sessions for more on sessions.
1092 /// Pass NULL to just use the default in-process session.
1093 /// <!-- default NULL -->
1094 ///
1095 /// @param[in] string_handle_array
1096 /// Array of string handles to be read.
1097 ///
1098 /// @param[in] string_handle_count
1099 /// Length of @p string_handle_array
1100 ///
1101 /// @param[out] string_buffer_size
1102 /// Buffer length required for subsequent call to
1103 /// HAPI_GetStringBatch to hold all the given
1104 /// string values null-terminated
1105 ///
1107  const int * string_handle_array,
1108  int string_handle_count,
1109  int * string_buffer_size );
1110 
1111 /// @brief Gives back the values of the given string handles.
1112 /// The given char array is filled with null-separated
1113 /// values, and the final value is null-terminated.
1114 /// Used with ::HAPI_GetStringBatchSize(). Using this function
1115 /// instead of repeated calls to ::HAPI_GetString() can be more
1116 /// more efficient for a large number of strings.
1117 ///
1118 /// @ingroup Strings
1119 ///
1120 /// @param[in] session
1121 /// The session of Houdini you are interacting with.
1122 /// See @ref HAPI_Sessions for more on sessions.
1123 /// Pass NULL to just use the default in-process session.
1124 /// <!-- default NULL -->
1125 ///
1126 /// @param[out] char_buffer
1127 /// Array of characters to hold string values.
1128 ///
1129 /// @param[in] char_array_length
1130 /// Length of @p char_array. Must be large enough to hold
1131 /// all the string values including null separators.
1132 /// <!-- min ::HAPI_GetStringBatchSize -->
1133 /// <!-- source ::HAPI_GetStringBatchSize -->
1134 ///
1135 HAPI_DECL HAPI_GetStringBatch( const HAPI_Session * session,
1136  char * char_buffer,
1137  int char_array_length );
1138 
1139 
1140 /// @defgroup Time
1141 /// Time related functions
1142 
1143 /// @brief Gets the global time of the scene. All API calls deal with
1144 /// this time to cook.
1145 ///
1146 /// @ingroup Time
1147 ///
1148 /// @param[in] session
1149 /// The session of Houdini you are interacting with.
1150 /// See @ref HAPI_Sessions for more on sessions.
1151 /// Pass NULL to just use the default in-process session.
1152 /// <!-- default NULL -->
1153 ///
1154 /// @param[out] time
1155 /// Time as a float in seconds.
1156 ///
1157 HAPI_DECL HAPI_GetTime( const HAPI_Session * session, float * time );
1158 
1159 /// @brief Sets the global time of the scene. All API calls will deal
1160 /// with this time to cook.
1161 ///
1162 /// @ingroup Time
1163 ///
1164 /// @param[in] session
1165 /// The session of Houdini you are interacting with.
1166 /// See @ref HAPI_Sessions for more on sessions.
1167 /// Pass NULL to just use the default in-process session.
1168 /// <!-- default NULL -->
1169 ///
1170 /// @param[in] time
1171 /// Time as a float in seconds.
1172 ///
1173 HAPI_DECL HAPI_SetTime( const HAPI_Session * session, float time );
1174 
1175 /// @brief Returns whether the Houdini session will use the current time in
1176 /// Houdini when cooking and retrieving data. By default this is
1177 /// disabled and the Houdini session uses time 0 (i.e. frame 1).
1178 /// In SessionSync, it is enabled by default, but can be overridden.
1179 /// Note that this function will ALWAYS return
1180 /// ::HAPI_RESULT_SUCCESS.
1181 ///
1182 /// @ingroup Time
1183 ///
1184 /// @param[in] session
1185 /// The session of Houdini you are interacting with.
1186 /// See @ref HAPI_Sessions for more on sessions.
1187 /// Pass NULL to just use the default in-process session.
1188 /// <!-- default NULL -->
1189 ///
1190 /// @param[out] enabled
1191 /// Whether use Houdini time is enabled or not.
1192 ///
1194  HAPI_Bool * enabled );
1195 
1196 /// @brief Sets whether the Houdini session should use the current time in
1197 /// Houdini when cooking and retrieving data. By default this is
1198 /// disabled and the Houdini session uses time 0 (i.e. frame 1).
1199 /// In SessionSync, it is enabled by default, but can be overridden.
1200 /// Note that this function will ALWAYS return
1201 /// ::HAPI_RESULT_SUCCESS.
1202 ///
1203 /// @ingroup Time
1204 ///
1205 /// @param[in] session
1206 /// The session of Houdini you are interacting with.
1207 /// See @ref HAPI_Sessions for more on sessions.
1208 /// Pass NULL to just use the default in-process session.
1209 /// <!-- default NULL -->
1210 ///
1211 /// @param[in] enabled
1212 /// Set to true to use Houdini time.
1213 ///
1215  HAPI_Bool enabled );
1216 
1217 /// @brief Gets the current global timeline options.
1218 ///
1219 /// @ingroup Time
1220 ///
1221 /// @param[in] session
1222 /// The session of Houdini you are interacting with.
1223 /// See @ref HAPI_Sessions for more on sessions.
1224 /// Pass NULL to just use the default in-process session.
1225 /// <!-- default NULL -->
1226 ///
1227 /// @param[out] timeline_options
1228 /// The global timeline options struct.
1229 ///
1231  HAPI_TimelineOptions * timeline_options );
1232 
1233 /// @brief Sets the global timeline options.
1234 ///
1235 /// @ingroup Time
1236 ///
1237 /// @param[in] session
1238 /// The session of Houdini you are interacting with.
1239 /// See @ref HAPI_Sessions for more on sessions.
1240 /// Pass NULL to just use the default in-process session.
1241 /// <!-- default NULL -->
1242 ///
1243 /// @param[in] timeline_options
1244 /// The global timeline options struct.
1245 ///
1247  const HAPI_Session * session,
1248  const HAPI_TimelineOptions * timeline_options );
1249 
1250 /// @brief Gets the global compositor options.
1251 ///
1252 /// @param[in] session
1253 /// The session of Houdini you are interacting with.
1254 /// See @ref HAPI_Sessions for more on sessions.
1255 /// Pass NULL to just use the default in-process session.
1256 /// <!-- default NULL -->
1257 ///
1258 /// @param[out] compositor_options
1259 /// The compositor options struct.
1260 ///
1262  const HAPI_Session * session,
1263  HAPI_CompositorOptions * compositor_options);
1264 
1265 /// @brief Sets the global compositor options.
1266 ///
1267 /// @param[in] session
1268 /// The session of Houdini you are interacting with.
1269 /// See @ref HAPI_Sessions for more on sessions.
1270 /// Pass NULL to just use the default in-process session.
1271 /// <!-- default NULL -->
1272 ///
1273 /// @param[in] compositor_options
1274 /// The compositor options.
1275 ///
1277  const HAPI_Session * session,
1278  const HAPI_CompositorOptions * compositor_options);
1279 
1280 /// @defgroup Assets
1281 /// Functions for managing asset libraries
1282 
1283 /// @brief Loads a Houdini asset library (OTL) from a .otl file.
1284 /// It does NOT create anything inside the Houdini scene.
1285 ///
1286 /// @note This is when we actually check for valid licenses.
1287 ///
1288 /// The next step is to call ::HAPI_GetAvailableAssetCount()
1289 /// to get the number of assets contained in the library using the
1290 /// returned library_id. Then call ::HAPI_GetAvailableAssets()
1291 /// to get the list of available assets by name. Use the asset
1292 /// names with ::HAPI_CreateNode() to actually create
1293 /// one of these nodes in the Houdini scene and get back
1294 /// an asset_id.
1295 ///
1296 /// @note The HIP file saved using ::HAPI_SaveHIPFile() will only
1297 /// have an absolute path reference to the loaded OTL meaning
1298 /// that if the OTL is moved or renamed the HIP file won't
1299 /// load properly. It also means that if you change the OTL
1300 /// using the saved HIP scene the same OTL file will change
1301 /// as the one used with Houdini Engine.
1302 /// See @ref HAPI_Fundamentals_SavingHIPFile.
1303 ///
1304 /// @ingroup Assets
1305 ///
1306 /// @param[in] session
1307 /// The session of Houdini you are interacting with.
1308 /// See @ref HAPI_Sessions for more on sessions.
1309 /// Pass NULL to just use the default in-process session.
1310 /// <!-- default NULL -->
1311 ///
1312 /// @param[in] file_path
1313 /// Absolute path to the .otl file.
1314 ///
1315 /// @param[in] allow_overwrite
1316 /// With this true, if the library file being loaded
1317 /// contains asset definitions that have already been
1318 /// loaded they will overwrite the existing definitions.
1319 /// Otherwise, a library containing asset definitions that
1320 /// already exist will fail to load, returning a
1321 /// ::HAPI_Result of
1322 /// ::HAPI_RESULT_ASSET_DEF_ALREADY_LOADED.
1323 ///
1324 /// @param[out] library_id
1325 /// Newly loaded otl id to be used with
1326 /// ::HAPI_GetAvailableAssetCount() and
1327 /// ::HAPI_GetAvailableAssets().
1328 ///
1330  const char * file_path,
1331  HAPI_Bool allow_overwrite,
1332  HAPI_AssetLibraryId * library_id );
1333 
1334 /// @brief Loads a Houdini asset library (OTL) from memory.
1335 /// It does NOT create anything inside the Houdini scene.
1336 ///
1337 /// @note This is when we actually check for valid licenses.
1338 ///
1339 /// Please note that the performance benefit of loading a library
1340 /// from memory are negligible at best. Due to limitations of
1341 /// Houdini's library manager, there is still some disk access
1342 /// and file writes because every asset library needs to be
1343 /// saved to a real file. Use this function only as a convenience
1344 /// if you already have the library file in memory and don't wish
1345 /// to have to create your own temporary library file and then
1346 /// call ::HAPI_LoadAssetLibraryFromFile().
1347 ///
1348 /// The next step is to call ::HAPI_GetAvailableAssetCount()
1349 /// to get the number of assets contained in the library using the
1350 /// returned library_id. Then call ::HAPI_GetAvailableAssets()
1351 /// to get the list of available assets by name. Use the asset
1352 /// names with ::HAPI_CreateNode() to actually create
1353 /// one of these nodes in the Houdini scene and get back
1354 /// an asset_id.
1355 ///
1356 /// @note The saved HIP file using ::HAPI_SaveHIPFile() will
1357 /// @a contain the OTL loaded as part of its @b Embedded OTLs.
1358 /// This means that you can safely move or rename the original
1359 /// OTL file and the HIP will continue to work but if you make
1360 /// changes to the OTL while using the saved HIP the changes
1361 /// won't be saved to the original OTL.
1362 /// See @ref HAPI_Fundamentals_SavingHIPFile.
1363 ///
1364 /// @ingroup Assets
1365 ///
1366 /// @param[in] session
1367 /// The session of Houdini you are interacting with.
1368 /// See @ref HAPI_Sessions for more on sessions.
1369 /// Pass NULL to just use the default in-process session.
1370 /// <!-- default NULL -->
1371 ///
1372 /// @param[in] library_buffer
1373 /// The memory buffer containing the asset definitions
1374 /// in the same format as a standard Houdini .otl file.
1375 ///
1376 /// @param[in] library_buffer_length
1377 /// The size of the OTL memory buffer.
1378 ///
1379 /// @param[in] allow_overwrite
1380 /// With this true, if the library file being loaded
1381 /// contains asset definitions that have already been
1382 /// loaded they will overwrite the existing definitions.
1383 /// Otherwise, a library containing asset definitions that
1384 /// already exist will fail to load, returning a
1385 /// ::HAPI_Result of
1386 /// ::HAPI_RESULT_ASSET_DEF_ALREADY_LOADED.
1387 ///
1388 /// @param[out] library_id
1389 /// Newly loaded otl id to be used with
1390 /// ::HAPI_GetAvailableAssetCount() and
1391 /// ::HAPI_GetAvailableAssets().
1392 ///
1394  const char * library_buffer,
1395  int library_buffer_length,
1396  HAPI_Bool allow_overwrite,
1397  HAPI_AssetLibraryId * library_id );
1398 
1399 /// @brief Get the number of assets contained in an asset library.
1400 /// You should call ::HAPI_LoadAssetLibraryFromFile() prior to
1401 /// get a library_id.
1402 ///
1403 /// @ingroup Assets
1404 ///
1405 /// @param[in] session
1406 /// The session of Houdini you are interacting with.
1407 /// See @ref HAPI_Sessions for more on sessions.
1408 /// Pass NULL to just use the default in-process session.
1409 /// <!-- default NULL -->
1410 ///
1411 /// @param[in] library_id
1412 /// Returned by ::HAPI_LoadAssetLibraryFromFile().
1413 /// <!-- source ::HAPI_LoadAssetLibraryFromFile -->
1414 ///
1415 /// @param[out] asset_count
1416 /// The number of assets contained in this asset library.
1417 ///
1419  HAPI_AssetLibraryId library_id,
1420  int * asset_count );
1421 
1422 /// @brief Get the names of the assets contained in an asset library.
1423 ///
1424 /// The asset names will contain additional information about
1425 /// the type of asset, namespace, and version, along with the
1426 /// actual asset name. For example, if you have an Object type
1427 /// asset, in the "hapi" namespace, of version 2.0, named
1428 /// "foo", the asset name returned here will be:
1429 /// hapi::Object/foo::2.0
1430 ///
1431 /// However, you should not need to worry about this detail. Just
1432 /// pass this string directly to ::HAPI_CreateNode() to
1433 /// create the node. You can then get the pretty name
1434 /// using ::HAPI_GetAssetInfo().
1435 ///
1436 /// You should call ::HAPI_LoadAssetLibraryFromFile() prior to
1437 /// get a library_id. Then, you should call
1438 /// ::HAPI_GetAvailableAssetCount() to get the number of assets to
1439 /// know how large of a string handles array you need to allocate.
1440 ///
1441 /// @ingroup Assets
1442 ///
1443 /// @param[in] session
1444 /// The session of Houdini you are interacting with.
1445 /// See @ref HAPI_Sessions for more on sessions.
1446 /// Pass NULL to just use the default in-process session.
1447 /// <!-- default NULL -->
1448 ///
1449 /// @param[in] library_id
1450 /// Returned by ::HAPI_LoadAssetLibraryFromFile().
1451 /// <!-- source ::HAPI_LoadAssetLibraryFromFile -->
1452 ///
1453 /// @param[out] asset_names_array
1454 /// Array of string handles (integers) that should be
1455 /// at least the size of asset_count.
1456 ///
1457 /// @param[in] asset_count
1458 /// Should be the same or less than the value returned by
1459 /// ::HAPI_GetAvailableAssetCount().
1460 /// <!-- max ::HAPI_GetAvailableAssetCount -->
1461 /// <!-- source ::HAPI_GetAvailableAssetCount -->
1462 ///
1464  HAPI_AssetLibraryId library_id,
1465  HAPI_StringHandle * asset_names_array,
1466  int asset_count );
1467 
1468 /// @brief Fill an asset_info struct from a node.
1469 ///
1470 /// @ingroup Assets
1471 ///
1472 /// @param[in] session
1473 /// The session of Houdini you are interacting with.
1474 /// See @ref HAPI_Sessions for more on sessions.
1475 /// Pass NULL to just use the default in-process session.
1476 /// <!-- default NULL -->
1477 ///
1478 /// @param[in] node_id
1479 /// The node id.
1480 ///
1481 /// @param[out] asset_info
1482 /// Returned ::HAPI_AssetInfo struct.
1483 ///
1484 HAPI_DECL HAPI_GetAssetInfo( const HAPI_Session * session,
1485  HAPI_NodeId node_id,
1486  HAPI_AssetInfo * asset_info );
1487 
1488 /// @brief Get the number of asset parameters contained in an asset
1489 /// library, as well as the number of parameter int, float,
1490 /// string, and choice values.
1491 ///
1492 /// This does not create the asset in the session.
1493 /// Use this for faster querying of asset parameters compared to
1494 /// creating the asset node and querying the node's parameters.
1495 ///
1496 /// This does require ::HAPI_LoadAssetLibraryFromFile() to be
1497 /// called prior, in order to load the asset library and
1498 /// acquire library_id. Then ::HAPI_GetAvailableAssetCount and
1499 /// ::HAPI_GetAvailableAssets should be called to get the
1500 /// asset_name.
1501 ///
1502 /// @ingroup Assets
1503 ///
1504 /// @param[in] session
1505 /// The session of Houdini you are interacting with.
1506 /// See @ref HAPI_Sessions for more on sessions.
1507 /// Pass NULL to just use the default in-process session.
1508 /// <!-- default NULL -->
1509 ///
1510 /// @param[in] library_id
1511 /// Returned by ::HAPI_LoadAssetLibraryFromFile().
1512 /// <!-- source ::HAPI_LoadAssetLibraryFromFile -->
1513 ///
1514 /// @param[in] asset_name
1515 /// Name of the asset to get the parm counts for.
1516 ///
1517 /// @param[out] parm_count
1518 /// The number of parameters in the asset library.
1519 ///
1520 /// @param[out] int_value_count
1521 /// The number of int values for parameters in the asset
1522 /// library.
1523 ///
1524 /// @param[out] float_value_count
1525 /// The number of float values for parameters in the asset
1526 /// library.
1527 ///
1528 /// @param[out] string_value_count
1529 /// The number of string values for parameters in the asset
1530 /// library.
1531 ///
1532 /// @param[out] choice_value_count
1533 /// The number of choice values for parameters in the asset
1534 /// library.
1535 ///
1537  HAPI_AssetLibraryId library_id,
1538  const char * asset_name,
1539  int * parm_count,
1540  int * int_value_count,
1541  int * float_value_count,
1542  int * string_value_count,
1543  int * choice_value_count );
1544 
1545 /// @brief Fill an array of ::HAPI_ParmInfo structs with parameter
1546 /// information for the specified asset in the specified asset
1547 /// library.
1548 ///
1549 /// This does not create the asset in the session.
1550 /// Use this for faster querying of asset parameters compared to
1551 /// creating the asset node and querying the node's parameters.
1552 ///
1553 /// This does require ::HAPI_LoadAssetLibraryFromFile() to be
1554 /// called prior, in order to load the asset library and
1555 /// acquire library_id. ::HAPI_GetAssetDefinitionParmCounts should
1556 /// be called prior to acquire the count for the size of
1557 /// parm_infos_array.
1558 ///
1559 /// @ingroup Assets
1560 ///
1561 /// @param[in] session
1562 /// The session of Houdini you are interacting with.
1563 /// See @ref HAPI_Sessions for more on sessions.
1564 /// Pass NULL to just use the default in-process session.
1565 /// <!-- default NULL -->
1566 ///
1567 /// @param[in] library_id
1568 /// Returned by ::HAPI_LoadAssetLibraryFromFile().
1569 /// <!-- source ::HAPI_LoadAssetLibraryFromFile -->
1570 ///
1571 /// @param[in] asset_name
1572 /// Name of the asset to get the parm counts for.
1573 ///
1574 /// @param[out] parm_infos_array
1575 /// Array of ::HAPI_ParmInfo at least the size of
1576 /// length.
1577 ///
1578 /// @param[in] start
1579 /// First index of range. Must be at least 0 and at
1580 /// most parm_count - 1 acquired from
1581 /// ::HAPI_GetAssetInfo.
1582 /// <!-- min 0 -->
1583 /// <!-- max ::HAPI_GetAssetInfo::parm_count - 1 -->
1584 /// <!-- default 0 -->
1585 ///
1586 /// @param[in] length
1587 /// Must be at least 1 and at most parm_count - start acquired
1588 /// from ::HAPI_GetAssetInfo
1589 /// <!-- min 1 -->
1590 /// <!-- max ::HAPI_GetAssetInfo::parm_count - start -->
1591 /// <!-- source ::HAPI_GetAssetInfo::parm_count -->
1592 ///
1594  HAPI_AssetLibraryId library_id,
1595  const char * asset_name,
1596  HAPI_ParmInfo * parm_infos_array,
1597  int start,
1598  int length );
1599 
1600 /// @brief Fill arrays of parameter int values, float values, string values,
1601 /// and choice values for parameters in the specified asset in the
1602 /// specified asset library.
1603 ///
1604 /// This does not create the asset in the session.
1605 /// Use this for faster querying of asset parameters compared to
1606 /// creating the asset node and querying the node's parameters.
1607 /// Note that only default values are retrieved.
1608 ///
1609 /// This does require ::HAPI_LoadAssetLibraryFromFile() to be
1610 /// called prior, in order to load the asset library and
1611 /// acquire library_id. ::HAPI_GetAssetDefinitionParmCounts should
1612 /// be called prior to acquire the counts for the sizes of
1613 /// the values arrays.
1614 ///
1615 /// @ingroup Assets
1616 ///
1617 /// @param[in] session
1618 /// The session of Houdini you are interacting with.
1619 /// See @ref HAPI_Sessions for more on sessions.
1620 /// Pass NULL to just use the default in-process session.
1621 /// <!-- default NULL -->
1622 ///
1623 /// @param[in] library_id
1624 /// Returned by ::HAPI_LoadAssetLibraryFromFile().
1625 /// <!-- source ::HAPI_LoadAssetLibraryFromFile -->
1626 ///
1627 /// @param[in] asset_name
1628 /// Name of the asset to get the parm counts for.
1629 ///
1630 /// @param[out] int_values_array
1631 /// Array of ints at least the size of int_length.
1632 ///
1633 /// @param[in] int_start
1634 /// First index of range for int_values_array. Must be at
1635 /// least 0 and at most int_value_count - 1 acquired from
1636 /// ::HAPI_GetAssetDefinitionParmCounts.
1637 /// <!-- min 0 -->
1638 /// <!-- max ::HAPI_GetAssetDefinitionParmCounts::int_value_count - 1 -->
1639 /// <!-- default 0 -->
1640 ///
1641 /// @param[in] int_length
1642 /// Must be at least 0 and at most int_value_count - int_start
1643 /// acquired from ::HAPI_GetAssetDefinitionParmCounts.
1644 /// <!-- min 0 -->
1645 /// <!-- max ::HAPI_GetAssetDefinitionParmCounts::int_value_count - int_start -->
1646 /// <!-- source ::HAPI_GetAssetDefinitionParmCounts::int_value_count - int_start -->
1647 ///
1648 /// @param[out] float_values_array
1649 /// Array of floats at least the size of float_length.
1650 ///
1651 /// @param[in] float_start
1652 /// First index of range for float_values_array. Must be at
1653 /// least 0 and at most float_value_count - 1 acquired from
1654 /// ::HAPI_GetAssetDefinitionParmCounts.
1655 /// <!-- min 0 -->
1656 /// <!-- max ::HAPI_GetAssetDefinitionParmCounts::float_value_count - 1 -->
1657 /// <!-- default 0 -->
1658 ///
1659 /// @param[in] float_length
1660 /// Must be at least 0 and at most float_value_count -
1661 /// float_start acquired from
1662 /// ::HAPI_GetAssetDefinitionParmCounts.
1663 /// <!-- min 0 -->
1664 /// <!-- max ::HAPI_GetAssetDefinitionParmCounts::float_value_count - float_start -->
1665 /// <!-- source ::HAPI_GetAssetDefinitionParmCounts::float_value_count - float_start -->
1666 ///
1667 /// @param[in] string_evaluate
1668 /// Whether or not to evaluate the string expressions.
1669 /// For example, the string "$F" would evaluate to the
1670 /// current frame number. So, passing in evaluate = false
1671 /// would give you back the string "$F" and passing
1672 /// in evaluate = true would give you back "1" (assuming
1673 /// the current frame is 1).
1674 /// <!-- default true -->
1675 ///
1676 /// @param[out] string_values_array
1677 /// Array of HAPI_StringHandle at least the size of
1678 /// string_length.
1679 ///
1680 /// @param[in] string_start
1681 /// First index of range for string_values_array. Must be at
1682 /// least 0 and at most string_value_count - 1 acquired from
1683 /// ::HAPI_GetAssetDefinitionParmCounts.
1684 /// <!-- min 0 -->
1685 /// <!-- max ::HAPI_GetAssetDefinitionParmCounts::string_value_count - 1 -->
1686 /// <!-- default 0 -->
1687 ///
1688 /// @param[in] string_length
1689 /// Must be at least 0 and at most string_value_count -
1690 /// string_start acquired from
1691 /// ::HAPI_GetAssetDefinitionParmCounts.
1692 /// <!-- min 0 -->
1693 /// <!-- max ::HAPI_GetAssetDefinitionParmCounts::string_value_count - string_start -->
1694 /// <!-- source ::HAPI_GetAssetDefinitionParmCounts::string_value_count - string_start -->
1695 ///
1696 /// @param[out] choice_values_array
1697 /// Array of ::HAPI_ParmChoiceInfo at least the size of
1698 /// choice_length.
1699 ///
1700 /// @param[in] choice_start
1701 /// First index of range for choice_values_array. Must be at
1702 /// least 0 and at most choice_value_count - 1 acquired from
1703 /// ::HAPI_GetAssetDefinitionParmCounts.
1704 /// <!-- min 0 -->
1705 /// <!-- max ::HAPI_GetAssetDefinitionParmCounts::choice_value_count - 1 -->
1706 /// <!-- default 0 -->
1707 ///
1708 /// @param[in] choice_length
1709 /// Must be at least 0 and at most choice_value_count -
1710 /// choice_start acquired from
1711 /// ::HAPI_GetAssetDefinitionParmCounts.
1712 /// <!-- min 0 -->
1713 /// <!-- max ::HAPI_GetAssetDefinitionParmCounts::choice_value_count - choice_start -->
1714 /// <!-- source ::HAPI_GetAssetDefinitionParmCounts::choice_value_count - choice_start -->
1715 ///
1717  const HAPI_Session * session,
1718  HAPI_AssetLibraryId library_id,
1719  const char * asset_name,
1720  int * int_values_array,
1721  int int_start,
1722  int int_length,
1723  float * float_values_array,
1724  int float_start,
1725  int float_length,
1726  HAPI_Bool string_evaluate,
1727  HAPI_StringHandle * string_values_array,
1728  int string_start,
1729  int string_length,
1730  HAPI_ParmChoiceInfo * choice_values_array,
1731  int choice_start,
1732  int choice_length );
1733 
1734 /// @brief Gets the number of HDAs that have been loaded by Houdini.
1735 ///
1736 /// @note This only includes HDAs that have been loaded from disk.
1737 /// Embedded HDAs will be excluded.
1738 ///
1739 /// @ingroup Assets
1740 ///
1741 /// @param[in] session
1742 /// The session of Houdini you are interacting with.
1743 /// See @ref HAPI_Sessions for more on sessions.
1744 /// Pass NULL to just use the default in-process session.
1745 /// <!-- default NULL -->
1746 ///
1747 /// @param[out] count
1748 /// The returned number of loaded HDAs.
1749 ///
1751  const HAPI_Session * session,
1752  int * count);
1753 
1754 /// @brief Gets the HAPI_AssetLibraryId's for HDAs that are loaded in Houdini.
1755 ///
1756 /// @ingroup Assets
1757 ///
1758 /// @param[in] session
1759 /// The session of Houdini you are interacting with.
1760 /// See @ref HAPI_Sessions for more on sessions.
1761 /// Pass NULL to just use the default in-process session.
1762 /// <!-- default NULL -->
1763 ///
1764 /// @param[out] asset_library_ids_array
1765 /// Array of HAPI_AssetLibraryId's at least the size of length.
1766 ///
1767 /// @param[in] start
1768 /// First index from the list of HAPI_AssetLibraryId's to
1769 /// return. Must be at least 0 and at most count - 1 where count
1770 /// is the value returned by ::HAPI_GetLoadedAssetLibraryCount.
1771 ///
1772 /// @param[in] length
1773 /// The number of HAPI_AssetLibraryId's to return. Must be at
1774 /// least 0 and at most count - start where count is the value
1775 /// returned by HAPI_GetLoadedAssetLibraryCount.
1776 ///
1778  const HAPI_Session * session,
1779  HAPI_AssetLibraryId * asset_library_ids_array,
1780  int start,
1781  int length);
1782 
1783 /// @brief Gets the HAPI_StringHandle for the file path of a loaded asset
1784 /// library.
1785 ///
1786 /// @ingroup Assets
1787 ///
1788 /// @param[in] session
1789 /// The session of Houdini you are interacting with.
1790 /// See @ref HAPI_Sessions for more on sessions.
1791 /// Pass NULL to just use the default in-process session.
1792 ///
1793 /// @param[in] asset_library_id
1794 /// The HAPI_AssetLibraryId of the asset library.
1795 ///
1796 /// @param[out] file_path_sh
1797 /// The returned HAPI_StringHandle of the asset's file path on
1798 /// disk.
1799 ///
1801  const HAPI_Session * session,
1802  HAPI_AssetLibraryId asset_library_id,
1803  HAPI_StringHandle * file_path_sh);
1804 
1805 /// @defgroup HipFiles Hip Files
1806 /// Functions for managing hip files
1807 
1808 /// @brief Loads a .hip file into the main Houdini scene.
1809 ///
1810 /// @note In threaded mode, this is an _async call_!
1811 ///
1812 /// @note This method will load the HIP file into the scene. This means
1813 /// that any registered `hou.hipFile` event callbacks will be triggered
1814 /// with the `hou.hipFileEventType.BeforeMerge` and
1815 /// `hou.hipFileEventType.AfterMerge` events.
1816 ///
1817 /// @note This method loads a HIP file, completely overwriting
1818 /// everything that already exists in the scene. Therefore, any HAPI ids
1819 /// (node ids, part ids, etc.) that were obtained before calling this
1820 /// method will be invalidated.
1821 ///
1822 /// @ingroup HipFiles
1823 ///
1824 /// @param[in] session
1825 /// The session of Houdini you are interacting with.
1826 /// See @ref HAPI_Sessions for more on sessions.
1827 /// Pass NULL to just use the default in-process session.
1828 /// <!-- default NULL -->
1829 ///
1830 /// @param[in] file_name
1831 /// Absolute path to the .hip file to load.
1832 ///
1833 /// @param[in] cook_on_load
1834 /// Set to true if you wish the nodes to cook as soon
1835 /// as they are created. Otherwise, you will have to
1836 /// call ::HAPI_CookNode() explicitly for each after you
1837 /// call this function.
1838 /// <!-- default false -->
1839 ///
1840 HAPI_DECL HAPI_LoadHIPFile( const HAPI_Session * session,
1841  const char * file_name,
1842  HAPI_Bool cook_on_load );
1843 
1844 /// @brief Loads a .hip file into the main Houdini scene.
1845 ///
1846 /// @note In threaded mode, this is an _async call_!
1847 ///
1848 /// @note This method will merge the HIP file into the scene. This means
1849 /// that any registered `hou.hipFile` event callbacks will be triggered
1850 /// with the `hou.hipFileEventType.BeforeMerge` and
1851 /// `hou.hipFileEventType.AfterMerge` events.
1852 ///
1853 /// @ingroup HipFiles
1854 ///
1855 /// @param[in] session
1856 /// The session of Houdini you are interacting with.
1857 /// See @ref HAPI_Sessions for more on sessions.
1858 /// Pass NULL to just use the default in-process session.
1859 ///
1860 /// @param[in] file_name
1861 /// Absolute path to the .hip file to load.
1862 ///
1863 /// @param[in] cook_on_load
1864 /// Set to true if you wish the nodes to cook as soon
1865 /// as they are created. Otherwise, you will have to
1866 /// call ::HAPI_CookNode() explicitly for each after you
1867 /// call this function.
1868 ///
1869 /// @param[out] file_id
1870 /// This parameter will be set to the HAPI_HIPFileId of the
1871 /// loaded HIP file. This can be used to lookup nodes that were
1872 /// created as a result of loading this HIP file.
1873 ///
1874 HAPI_DECL HAPI_MergeHIPFile(const HAPI_Session * session,
1875  const char * file_name,
1876  HAPI_Bool cook_on_load,
1877  HAPI_HIPFileId * file_id);
1878 
1879 /// @brief Saves a .hip file of the current Houdini scene.
1880 ///
1881 /// @ingroup HipFiles
1882 ///
1883 /// @param[in] session
1884 /// The session of Houdini you are interacting with.
1885 /// See @ref HAPI_Sessions for more on sessions.
1886 /// Pass NULL to just use the default in-process session.
1887 /// <!-- default NULL -->
1888 ///
1889 /// @param[in] file_path
1890 /// Absolute path to the .hip file to save to.
1891 ///
1892 /// @param[in] lock_nodes
1893 /// Specify whether to lock all SOP nodes before saving
1894 /// the scene file. This way, when you load the scene
1895 /// file you can see exactly the state of each SOP at
1896 /// the time it was saved instead of relying on the
1897 /// re-cook to accurately reproduce the state. It does,
1898 /// however, take a lot more space and time locking all
1899 /// nodes like this.
1900 /// <!-- default false -->
1901 ///
1902 HAPI_DECL HAPI_SaveHIPFile( const HAPI_Session * session,
1903  const char * file_path,
1904  HAPI_Bool lock_nodes );
1905 
1906 /// @brief Gets the number of nodes that were created as a result of loading a
1907 /// .hip file
1908 ///
1909 /// @ingroup HipFiles
1910 ///
1911 /// @param[in] session
1912 /// The session of Houdini you are interacting with.
1913 /// See @ref HAPI_Sessions for more on sessions.
1914 /// Pass NULL to just use the default in-process session.
1915 ///
1916 /// @param[in] id
1917 /// The HIP file id.
1918 ///
1919 /// @param[out] count
1920 /// Pointer to an int where the HIP file node count will be
1921 /// stored.
1923  HAPI_HIPFileId id,
1924  int * count);
1925 
1926 /// @brief Fills an array of ::HAPI_NodeId of nodes that were created as a
1927 /// result of loading the HIP file specified by the ::HAPI_HIPFileId
1928 ///
1929 /// @ingroup HipFiles
1930 ///
1931 /// @param[in] session
1932 /// The session of Houdini you are interacting with.
1933 /// See @ref HAPI_Sessions for more on sessions.
1934 /// Pass NULL to just use the default in-process session.
1935 ///
1936 /// @param[in] id
1937 /// The HIP file id.
1938 ///
1939 /// @param[out] node_ids
1940 /// Array of ::HAPI_NodeId at least the size of length.
1941 ///
1942 /// @param[in] length
1943 /// The number of ::HAPI_NodeId to be stored. This should be at
1944 /// least 0 and at most the count provided by
1945 /// HAPI_GetHIPFileNodeCount
1947  HAPI_HIPFileId id,
1948  HAPI_NodeId * node_ids,
1949  int length);
1950 
1951 /// @defgroup Nodes
1952 /// Functions for working with nodes
1953 
1954 /// @brief Determine if your instance of the node actually still exists
1955 /// inside the Houdini scene. This is what can be used to
1956 /// determine when the Houdini scene needs to be re-populated
1957 /// using the host application's instances of the nodes.
1958 /// Note that this function will ALWAYS return
1959 /// ::HAPI_RESULT_SUCCESS.
1960 ///
1961 /// @ingroup Nodes
1962 ///
1963 /// @param[in] session
1964 /// The session of Houdini you are interacting with.
1965 /// See @ref HAPI_Sessions for more on sessions.
1966 /// Pass NULL to just use the default in-process session.
1967 /// <!-- default NULL -->
1968 ///
1969 /// @param[in] node_id
1970 /// The node id.
1971 ///
1972 /// @param[in] unique_node_id
1973 /// The unique node id from
1974 /// ::HAPI_NodeInfo::uniqueHoudiniNodeId.
1975 /// <!-- source ::HAPI_NodeInfo::uniqueHoudiniNodeId -->
1976 ///
1977 /// @param[out] answer
1978 /// Answer to the question.
1979 ///
1980 HAPI_DECL HAPI_IsNodeValid( const HAPI_Session * session,
1981  HAPI_NodeId node_id,
1982  int unique_node_id,
1983  HAPI_Bool * answer );
1984 
1985 /// @brief Fill an ::HAPI_NodeInfo struct.
1986 ///
1987 /// @ingroup Nodes
1988 ///
1989 /// @param[in] session
1990 /// The session of Houdini you are interacting with.
1991 /// See @ref HAPI_Sessions for more on sessions.
1992 /// Pass NULL to just use the default in-process session.
1993 /// <!-- default NULL -->
1994 ///
1995 /// @param[in] node_id
1996 /// The node id.
1997 ///
1998 /// @param[out] node_info
1999 /// Return value - contains things like asset id.
2000 ///
2001 HAPI_DECL HAPI_GetNodeInfo( const HAPI_Session * session,
2002  HAPI_NodeId node_id,
2003  HAPI_NodeInfo * node_info );
2004 
2005 /// @brief Get the node absolute path in the Houdini node network or a
2006 /// relative path any other node.
2007 ///
2008 /// @ingroup Nodes
2009 ///
2010 /// @param[in] session
2011 /// The session of Houdini you are interacting with.
2012 /// See @ref HAPI_Sessions for more on sessions.
2013 /// Pass NULL to just use the default in-process session.
2014 /// <!-- default NULL -->
2015 ///
2016 /// @param[in] node_id
2017 /// The node id.
2018 ///
2019 /// @param[in] relative_to_node_id
2020 /// Set this to -1 to get the absolute path of the node_id.
2021 /// Otherwise, the path will be relative to this node id.
2022 ///
2023 /// @param[out] path
2024 /// The returned path string, valid until the next call to
2025 /// this function.
2026 ///
2027 HAPI_DECL HAPI_GetNodePath( const HAPI_Session * session,
2028  HAPI_NodeId node_id,
2029  HAPI_NodeId relative_to_node_id,
2030  HAPI_StringHandle * path );
2031 
2032 /// @brief Get the root node of a particular network type (ie. OBJ).
2033 ///
2034 /// @ingroup Nodes
2035 ///
2036 /// @param[in] session
2037 /// The session of Houdini you are interacting with.
2038 /// See @ref HAPI_Sessions for more on sessions.
2039 /// Pass NULL to just use the default in-process session.
2040 /// <!-- default NULL -->
2041 ///
2042 /// @param[in] node_type
2043 /// The node network type.
2044 ///
2045 /// @param[out] node_id
2046 /// The node id of the root node network.
2047 ///
2049  HAPI_NodeType node_type,
2050  HAPI_NodeId * node_id );
2051 
2052 /// @brief Compose a list of child nodes based on given filters.
2053 ///
2054 /// This function will only compose the list of child nodes. It will
2055 /// not return this list. After your call to this function, call
2056 /// HAPI_GetComposedChildNodeList() to get the list of child node ids.
2057 ///
2058 /// Note: When looking for all Display SOP nodes using this function,
2059 /// and using recursive mode, the recursion will stop as soon as a
2060 /// display SOP is found within each OBJ geometry network. It is
2061 /// almost never useful to get a list of ALL display SOP nodes
2062 /// recursively as they would all containt the same geometry. Even so,
2063 /// this special case only comes up if the display SOP itself is a
2064 /// subnet.
2065 ///
2066 /// @ingroup Nodes
2067 ///
2068 /// @param[in] session
2069 /// The session of Houdini you are interacting with.
2070 /// See @ref HAPI_Sessions for more on sessions.
2071 /// Pass NULL to just use the default in-process session.
2072 /// <!-- default NULL -->
2073 ///
2074 /// @param[in] parent_node_id
2075 /// The node id of the parent node.
2076 ///
2077 /// @param[in] node_type_filter
2078 /// The node type by which to filter the children.
2079 ///
2080 /// @param[in] node_flags_filter
2081 /// The node flags by which to filter the children.
2082 ///
2083 /// @param[in] recursive
2084 /// Whether or not to compose the list recursively.
2085 ///
2086 /// @param[out] count
2087 /// The number of child nodes composed. Use this as the
2088 /// argument to ::HAPI_GetComposedChildNodeList().
2089 ///
2091  HAPI_NodeId parent_node_id,
2092  HAPI_NodeTypeBits node_type_filter,
2093  HAPI_NodeFlagsBits node_flags_filter,
2094  HAPI_Bool recursive,
2095  int * count );
2096 
2097 /// @brief Get the composed list of child node ids from the previous call
2098 /// to HAPI_ComposeChildNodeList().
2099 ///
2100 /// @ingroup Nodes
2101 ///
2102 /// @param[in] session
2103 /// The session of Houdini you are interacting with.
2104 /// See @ref HAPI_Sessions for more on sessions.
2105 /// Pass NULL to just use the default in-process session.
2106 /// <!-- default NULL -->
2107 ///
2108 /// @param[in] parent_node_id
2109 /// The node id of the parent node.
2110 ///
2111 /// @param[out] child_node_ids_array
2112 /// The array of ::HAPI_NodeId for the child nodes.
2113 ///
2114 /// @param[in] count
2115 /// The number of children in the composed list. MUST match
2116 /// the count returned by HAPI_ComposeChildNodeList().
2117 /// <!-- source ::HAPI_ComposeChildNodeList -->
2118 /// <!-- min ::HAPI_ComposeChildNodeList -->
2119 /// <!-- max ::HAPI_ComposeChildNodeList -->
2120 ///
2122  HAPI_NodeId parent_node_id,
2123  HAPI_NodeId * child_node_ids_array,
2124  int count );
2125 
2126 /// @brief Create a node inside a node network. Nodes created this way
2127 /// will have their ::HAPI_NodeInfo::createdPostAssetLoad set
2128 /// to true.
2129 ///
2130 /// @note In threaded mode, this is an _async call_!
2131 ///
2132 /// @note This is also when we actually check for valid licenses.
2133 ///
2134 /// This API will invoke the cooking thread if threading is
2135 /// enabled. This means it will return immediately with a call
2136 /// result of ::HAPI_RESULT_SUCCESS, even if fed garbage. Use
2137 /// the status and cooking count APIs under DIAGNOSTICS to get
2138 /// a sense of the progress. All other API calls will block
2139 /// until the creation (and, optionally, the first cook)
2140 /// of the node has finished.
2141 ///
2142 /// Also note that the cook result won't be of type
2143 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
2144 /// Whenever the threading cook is done it will fill the
2145 /// @a cook result which is queried using
2146 /// ::HAPI_STATUS_COOK_RESULT.
2147 ///
2148 /// @ingroup Nodes
2149 ///
2150 /// @param[in] session
2151 /// The session of Houdini you are interacting with.
2152 /// See @ref HAPI_Sessions for more on sessions.
2153 /// Pass NULL to just use the default in-process session.
2154 /// <!-- default NULL -->
2155 ///
2156 /// @param[in] parent_node_id
2157 /// The parent node network's node id or -1 if the parent
2158 /// network is the manager (top-level) node. In that case,
2159 /// the manager must be identified by the table name in the
2160 /// operator_name.
2161 /// <!-- min -1 -->
2162 /// <!-- default -1 -->
2163 ///
2164 /// @param[in] operator_name
2165 /// The name of the node operator type.
2166 ///
2167 /// If you passed parent_node_id == -1, then the operator_name
2168 /// has to include the table name (ie. Object/ or Sop/).
2169 /// This is the common case for when creating asset nodes
2170 /// from a loaded asset library. In that case, just pass
2171 /// whatever ::HAPI_GetAvailableAssets() returns.
2172 ///
2173 /// If you have a parent_node_id then you should
2174 /// include only the namespace, name, and version.
2175 ///
2176 /// For example, lets say you have an Object type asset, in
2177 /// the "hapi" namespace, of version 2.0, named "foo". If
2178 /// you pass parent_node_id == -1, then set the operator_name
2179 /// as "Object/hapi::foo::2.0". Otherwise, if you have a valid
2180 /// parent_node_id, then just pass operator_name as
2181 /// "hapi::foo::2.0".
2182 ///
2183 /// @param[in] node_label
2184 /// (Optional) The label of the newly created node.
2185 /// <!-- default NULL -->
2186 ///
2187 /// @param[in] cook_on_creation
2188 /// Set whether the node should cook once created or not.
2189 /// <!-- default false -->
2190 ///
2191 /// @param[out] new_node_id
2192 /// The returned node id of the just-created node.
2193 ///
2194 HAPI_DECL HAPI_CreateNode( const HAPI_Session * session,
2195  HAPI_NodeId parent_node_id,
2196  const char * operator_name,
2197  const char * node_label,
2198  HAPI_Bool cook_on_creation,
2199  HAPI_NodeId * new_node_id );
2200 
2201 /// @brief Creates a simple geometry SOP node that can accept geometry input.
2202 /// This will create a dummy OBJ node with a Null SOP inside that
2203 /// you can set the geometry of using the geometry SET APIs.
2204 /// You can then connect this node to any other node as a geometry
2205 /// input.
2206 ///
2207 /// Note that when saving the Houdini scene using
2208 /// ::HAPI_SaveHIPFile() the nodes created with this
2209 /// method will be green and will start with the name "input".
2210 ///
2211 /// @ingroup Nodes
2212 ///
2213 /// @param[in] session
2214 /// The session of Houdini you are interacting with.
2215 /// See @ref HAPI_Sessions for more on sessions.
2216 /// Pass NULL to just use the default in-process session.
2217 /// <!-- default NULL -->
2218 ///
2219 /// @param[out] node_id
2220 /// Newly created node's id. Use ::HAPI_GetNodeInfo()
2221 /// to get more information about the node.
2222 ///
2223 /// @param[in] name
2224 /// Give this input node a name for easy debugging.
2225 /// The node's parent OBJ node and the Null SOP node will both
2226 /// get this given name with "input_" prepended.
2227 /// You can also pass NULL in which case the name will
2228 /// be "input#" where # is some number.
2229 /// <!-- default NULL -->
2230 ///
2232  HAPI_NodeId * node_id,
2233  const char * name );
2234 
2235 /// @brief Helper for creating specifically creating a curve input geometry SOP.
2236 /// This will create a dummy OBJ node with a Null SOP inside that
2237 /// contains the the HAPI_ATTRIB_INPUT_CURVE_COORDS attribute.
2238 /// It will setup the node as a curve part with no points.
2239 /// In addition to creating the input node, it will also commit and cook
2240 /// the geometry.
2241 ///
2242 /// Note that when saving the Houdini scene using
2243 /// ::HAPI_SaveHIPFile() the nodes created with this
2244 /// method will be green and will start with the name "input".
2245 ///
2246 /// @ingroup InputCurves
2247 ///
2248 /// @param[in] session
2249 /// The session of Houdini you are interacting with.
2250 /// See @ref HAPI_Sessions for more on sessions.
2251 /// Pass NULL to just use the default in-process session.
2252 /// <!-- default NULL -->
2253 ///
2254 /// @param[out] node_id
2255 /// Newly created node's id. Use ::HAPI_GetNodeInfo()
2256 /// to get more information about the node.
2257 ///
2258 /// @param[in] name
2259 /// Give this input node a name for easy debugging.
2260 /// The node's parent OBJ node and the Null SOP node will both
2261 /// get this given name with "input_" prepended.
2262 /// You can also pass NULL in which case the name will
2263 /// be "input#" where # is some number.
2264 /// <!-- default NULL -->
2265 ///
2267  HAPI_NodeId * node_id,
2268  const char * name );
2269 
2270 
2271 /// @defgroup HeightFields Height Fields
2272 /// Functions for creating and inspecting HAPI session state.
2273 
2274 /// @brief Creates the required node hierarchy needed for heightfield inputs.
2275 ///
2276 /// Note that when saving the Houdini scene using
2277 /// ::HAPI_SaveHIPFile() the nodes created with this
2278 /// method will be green and will start with the name "input".
2279 ///
2280 /// @ingroup HeightFields
2281 ///
2282 /// @param[in] session
2283 /// The session of Houdini you are interacting with.
2284 /// See @ref HAPI_Sessions for more on sessions.
2285 /// Pass NULL to just use the default in-process session.
2286 /// <!-- default NULL -->
2287 ///
2288 /// @param[in] parent_node_id
2289 /// The parent node network's node id or -1 if the parent
2290 /// network is the manager (top-level) node. In that case,
2291 /// the manager must be identified by the table name in the
2292 /// operator_name.
2293 /// <!-- min -1 -->
2294 /// <!-- default -1 -->
2295 ///
2296 /// @param[in] name
2297 /// Give this input node a name for easy debugging.
2298 /// The node's parent OBJ node and the Null SOP node will both
2299 /// get this given name with "input_" prepended.
2300 /// You can also pass NULL in which case the name will
2301 /// be "input#" where # is some number.
2302 /// <!-- default NULL -->
2303 ///
2304 /// @param[in] xsize
2305 /// size of the heightfield in X
2306 ///
2307 /// @param[in] ysize
2308 /// size of the heightfield in y
2309 ///
2310 /// @param[in] voxelsize
2311 /// Size of the voxel
2312 ///
2313 /// @param[in] sampling
2314 /// Type of sampling which should be either center or corner.
2315 ///
2316 /// @param[out] heightfield_node_id
2317 /// Newly created node id for the heightfield node.
2318 /// Use ::HAPI_GetNodeInfo() to get more information about
2319 /// the node.
2320 ///
2321 /// @param[out] height_node_id
2322 /// Newly created node id for the height volume.
2323 /// Use ::HAPI_GetNodeInfo() to get more information about the node.
2324 ///
2325 /// @param[out] mask_node_id
2326 /// Newly created node id for the mask volume.
2327 /// Use ::HAPI_GetNodeInfo() to get more information about the
2328 /// node.
2329 ///
2330 /// @param[out] merge_node_id
2331 /// Newly created merge node id.
2332 /// The merge node can be used to connect additional input masks.
2333 /// Use ::HAPI_GetNodeInfo() to get more information about the node.
2334 ///
2336  HAPI_NodeId parent_node_id,
2337  const char * name,
2338  int xsize,
2339  int ysize,
2340  float voxelsize,
2341  HAPI_HeightFieldSampling sampling,
2342  HAPI_NodeId * heightfield_node_id,
2343  HAPI_NodeId * height_node_id,
2344  HAPI_NodeId * mask_node_id,
2345  HAPI_NodeId * merge_node_id );
2346 
2347 /// @brief Creates a volume input node that can be used with Heightfields
2348 ///
2349 /// Note that when saving the Houdini scene using
2350 /// ::HAPI_SaveHIPFile() the nodes created with this
2351 /// method will be green and will start with the name "input".
2352 ///
2353 /// @ingroup HeightFields
2354 ///
2355 /// @param[in] session
2356 /// The session of Houdini you are interacting with.
2357 /// See @ref HAPI_Sessions for more on sessions.
2358 /// Pass NULL to just use the default in-process session.
2359 /// <!-- default NULL -->
2360 ///
2361 /// @param[in] parent_node_id
2362 /// The parent node network's node id or -1 if the parent
2363 /// network is the manager (top-level) node. In that case,
2364 /// the manager must be identified by the table name in the
2365 /// operator_name.
2366 /// <!-- min -1 -->
2367 /// <!-- default -1 -->
2368 ///
2369 /// @param[out] new_node_id
2370 /// Newly created node id for the volume.
2371 /// Use ::HAPI_GetNodeInfo() to get more information about the
2372 /// node.
2373 ///
2374 /// @param[in] name
2375 /// The name of the volume to create.
2376 /// You can also pass NULL in which case the name will
2377 /// be "input#" where # is some number.
2378 /// <!-- default NULL -->
2379 ///
2380 /// @param[in] xsize
2381 /// size of the heightfield in X
2382 ///
2383 /// @param[in] ysize
2384 /// size of the heightfield in y
2385 ///
2386 /// @param[in] voxelsize
2387 /// Size of the voxel
2388 ///
2390  HAPI_NodeId parent_node_id,
2391  HAPI_NodeId * new_node_id,
2392  const char * name,
2393  int xsize,
2394  int ysize,
2395  float voxelsize );
2396 
2397 /// @brief Initiate a cook on this node. Note that this may trigger
2398 /// cooks on other nodes if they are connected.
2399 ///
2400 /// @note In threaded mode, this is an _async call_!
2401 ///
2402 /// This API will invoke the cooking thread if threading is
2403 /// enabled. This means it will return immediately. Use
2404 /// the status and cooking count APIs under DIAGNOSTICS to get
2405 /// a sense of the progress. All other API calls will block
2406 /// until the cook operation has finished.
2407 ///
2408 /// Also note that the cook result won't be of type
2409 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
2410 /// Whenever the threading cook is done it will fill the
2411 /// @a cook result which is queried using
2412 /// ::HAPI_STATUS_COOK_RESULT.
2413 ///
2414 /// @ingroup Nodes
2415 ///
2416 /// @param[in] session
2417 /// The session of Houdini you are interacting with.
2418 /// See @ref HAPI_Sessions for more on sessions.
2419 /// Pass NULL to just use the default in-process session.
2420 /// <!-- default NULL -->
2421 ///
2422 /// @param[in] node_id
2423 /// The node id.
2424 ///
2425 /// @param[in] cook_options
2426 /// The cook options. Pass in NULL to use the global
2427 /// cook options that you specified when calling
2428 /// ::HAPI_Initialize().
2429 ///
2430 HAPI_DECL HAPI_CookNode( const HAPI_Session * session,
2431  HAPI_NodeId node_id,
2432  const HAPI_CookOptions * cook_options );
2433 
2434 /// @brief Delete a node from a node network. Only nodes with their
2435 /// ::HAPI_NodeInfo::createdPostAssetLoad set to true can be
2436 /// deleted this way.
2437 ///
2438 /// @ingroup Nodes
2439 ///
2440 /// @param[in] session
2441 /// The session of Houdini you are interacting with.
2442 /// See @ref HAPI_Sessions for more on sessions.
2443 /// Pass NULL to just use the default in-process session.
2444 /// <!-- default NULL -->
2445 ///
2446 /// @param[in] node_id
2447 /// The node to delete.
2448 ///
2449 HAPI_DECL HAPI_DeleteNode( const HAPI_Session * session,
2450  HAPI_NodeId node_id );
2451 
2452 /// @brief Rename a node that you created. Only nodes with their
2453 /// ::HAPI_NodeInfo::createdPostAssetLoad set to true can be
2454 /// renamed this way.
2455 ///
2456 /// @ingroup Nodes
2457 ///
2458 /// @param[in] session
2459 /// The session of Houdini you are interacting with.
2460 /// See @ref HAPI_Sessions for more on sessions.
2461 /// Pass NULL to just use the default in-process session.
2462 /// <!-- default NULL -->
2463 ///
2464 /// @param[in] node_id
2465 /// The node to rename.
2466 ///
2467 /// @param[in] new_name
2468 /// The new node name.
2469 ///
2470 HAPI_DECL HAPI_RenameNode( const HAPI_Session * session,
2471  HAPI_NodeId node_id,
2472  const char * new_name );
2473 
2474 /// @brief Connect two nodes together.
2475 ///
2476 /// @param[in] session
2477 /// The session of Houdini you are interacting with.
2478 /// See @ref HAPI_Sessions for more on sessions.
2479 /// Pass NULL to just use the default in-process session.
2480 /// <!-- default NULL -->
2481 ///
2482 /// @ingroup Nodes
2483 ///
2484 /// @param[in] node_id
2485 /// The node whom's input to connect to.
2486 ///
2487 /// @param[in] input_index
2488 /// The input index. Should be between 0 and the
2489 /// to_node's ::HAPI_NodeInfo::inputCount - 1.
2490 /// <!-- min 0 -->
2491 ///
2492 /// @param[in] node_id_to_connect
2493 /// The node to connect to node_id's input.
2494 ///
2495 /// @param[in] output_index
2496 /// The output index. Should be between 0 and the
2497 /// to_node's ::HAPI_NodeInfo::outputCount - 1.
2498 /// <!-- min 0 -->
2499 ///
2501  HAPI_NodeId node_id,
2502  int input_index,
2503  HAPI_NodeId node_id_to_connect,
2504  int output_index );
2505 
2506 /// @brief Disconnect a node input.
2507 ///
2508 /// @param[in] session
2509 /// The session of Houdini you are interacting with.
2510 /// See @ref HAPI_Sessions for more on sessions.
2511 /// Pass NULL to just use the default in-process session.
2512 /// <!-- default NULL -->
2513 ///
2514 /// @ingroup Nodes
2515 ///
2516 /// @param[in] node_id
2517 /// The node whom's input to disconnect.
2518 ///
2519 /// @param[in] input_index
2520 /// The input index. Should be between 0 and the
2521 /// to_node's ::HAPI_NodeInfo::inputCount - 1.
2522 /// <!-- min 0 -->
2523 ///
2525  HAPI_NodeId node_id,
2526  int input_index );
2527 
2528 /// @brief Query which node is connected to another node's input.
2529 ///
2530 /// @param[in] session
2531 /// The session of Houdini you are interacting with.
2532 /// See @ref HAPI_Sessions for more on sessions.
2533 /// Pass NULL to just use the default in-process session.
2534 /// <!-- default NULL -->
2535 ///
2536 /// @ingroup Nodes
2537 ///
2538 /// @param[in] node_to_query
2539 /// The node to query.
2540 ///
2541 /// @param[in] input_index
2542 /// The input index. Should be between 0 and the
2543 /// to_node's ::HAPI_NodeInfo::inputCount - 1.
2544 /// <!-- min 0 -->
2545 ///
2546 /// @param[out] connected_node_id
2547 /// The node id of the connected node to this input. If
2548 /// nothing is connected then -1 will be returned.
2549 ///
2550 HAPI_DECL HAPI_QueryNodeInput( const HAPI_Session * session,
2551  HAPI_NodeId node_to_query,
2552  int input_index,
2553  HAPI_NodeId * connected_node_id );
2554 
2555 /// @brief Get the name of an node's input. This function will return
2556 /// a string handle for the name which will be valid (persist)
2557 /// until the next call to this function.
2558 ///
2559 /// @ingroup Nodes
2560 ///
2561 /// @param[in] session
2562 /// The session of Houdini you are interacting with.
2563 /// See @ref HAPI_Sessions for more on sessions.
2564 /// Pass NULL to just use the default in-process session.
2565 /// <!-- default NULL -->
2566 ///
2567 /// @param[in] node_id
2568 /// The node id.
2569 ///
2570 /// @param[in] input_idx
2571 /// The input index. Should be between 0 and the
2572 /// node_to_query's ::HAPI_NodeInfo::inputCount - 1.
2573 /// <!-- min 0 -->
2574 ///
2575 /// @param[out] name
2576 /// Input name string handle return value - valid until
2577 /// the next call to this function.
2578 ///
2580  HAPI_NodeId node_id,
2581  int input_idx,
2582  HAPI_StringHandle * name );
2583 
2584 /// @brief Disconnect all of the node's output connections at the output index.
2585 ///
2586 /// @ingroup Nodes
2587 ///
2588 /// @param[in] session
2589 /// The session of Houdini you are interacting with.
2590 /// See @ref HAPI_Sessions for more on sessions.
2591 /// Pass NULL to just use the default in-process session.
2592 /// <!-- default NULL -->
2593 ///
2594 /// @param[in] node_id
2595 /// The node whom's outputs to disconnect.
2596 ///
2597 /// @param[in] output_index
2598 /// The output index. Should be between 0 and the
2599 /// to_node's ::HAPI_NodeInfo::outputCount.
2600 /// <!-- min 0 -->
2601 ///
2603  HAPI_NodeId node_id,
2604  int output_index );
2605 
2606 /// @brief Get the number of nodes currently connected to the given node at
2607 /// the output index.
2608 ///
2609 /// @ingroup Nodes
2610 ///
2611 /// Use the @c count returned by this function to get the
2612 /// ::HAPI_NodeId of connected nodes using
2613 /// ::HAPI_QueryNodeOutputConnectedNodes().
2614 ///
2615 /// @param[in] session
2616 /// The session of Houdini you are interacting with.
2617 /// See @ref HAPI_Sessions for more on sessions.
2618 /// Pass NULL to just use the default in-process session.
2619 /// <!-- default NULL -->
2620 ///
2621 /// @param[in] node_id
2622 /// The node id.
2623 ///
2624 /// @param[in] output_idx
2625 /// The output index. Should be between 0 and the
2626 /// to_node's ::HAPI_NodeInfo::outputCount - 1.
2627 /// <!-- min 0 -->
2628 /// <!-- max ::HAPI_NodeInfo::outputCount - 1 -->
2629 ///
2630 /// @param[in] into_subnets
2631 /// Whether to search by diving into subnets.
2632 /// <!-- default true -->
2633 ///
2634 /// @param[in] through_dots
2635 /// Whether to search through dots.
2636 /// <!-- default true -->
2637 ///
2638 /// @param[out] connected_count
2639 /// The number of nodes currently connected to this node at
2640 /// given output index. Use this count with a call to
2641 /// ::HAPI_QueryNodeOutputConnectedNodes() to get list of
2642 /// connected nodes.
2643 ///
2645  HAPI_NodeId node_id,
2646  int output_idx,
2647  HAPI_Bool into_subnets,
2648  HAPI_Bool through_dots,
2649  int * connected_count );
2650 
2651 /// @brief Get the ids of nodes currently connected to the given node
2652 /// at the output index.
2653 ///
2654 /// Use the @c connected_count returned by
2655 /// ::HAPI_QueryNodeOutputConnectedCount().
2656 ///
2657 /// @ingroup Nodes
2658 ///
2659 /// @param[in] session
2660 /// The session of Houdini you are interacting with.
2661 /// See @ref HAPI_Sessions for more on sessions.
2662 /// Pass NULL to just use the default in-process session.
2663 /// <!-- default NULL -->
2664 ///
2665 /// @param[in] node_id
2666 /// The node id.
2667 ///
2668 /// @param[in] output_idx
2669 /// The output index. Should be between 0 and the
2670 /// to_node's ::HAPI_NodeInfo::outputCount - 1.
2671 /// <!-- min 0 -->
2672 /// <!-- max ::HAPI_NodeInfo::outputCount - 1 -->
2673 ///
2674 /// @param[in] into_subnets
2675 /// Whether to search by diving into subnets.
2676 /// <!-- default true -->
2677 ///
2678 /// @param[in] through_dots
2679 /// Whether to search through dots.
2680 /// <!-- default true -->
2681 ///
2682 /// @param[out] connected_node_ids_array
2683 /// Array of ::HAPI_NodeId at least the size of @c length.
2684 ///
2685 /// @param[in] start
2686 /// At least @c 0 and at most @c connected_count returned by
2687 /// ::HAPI_QueryNodeOutputConnectedCount().
2688 /// <!-- min 0 -->
2689 /// <!-- max ::HAPI_QueryNodeOutputConnectedCount -->
2690 /// <!-- default 0 -->
2691 ///
2692 /// @param[in] length
2693 /// Given @c connected_count returned by
2694 /// ::HAPI_QueryNodeOutputConnectedCount(), @c length should
2695 /// be at least @c 1 and at most <tt>connected_count - start</tt>.
2696 /// <!-- min 1 -->
2697 /// <!-- max ::HAPI_QueryNodeOutputConnectedCount - start -->
2698 /// <!-- source ::HAPI_QueryNodeOutputConnectedCount - start -->
2699 ///
2701  HAPI_NodeId node_id,
2702  int output_idx,
2703  HAPI_Bool into_subnets,
2704  HAPI_Bool through_dots,
2705  HAPI_NodeId * connected_node_ids_array,
2706  int start, int length );
2707 
2708 /// @brief Get the name of an node's output. This function will return
2709 /// a string handle for the name which will be valid (persist)
2710 /// until the next call to this function.
2711 ///
2712 /// @ingroup Nodes
2713 ///
2714 /// @param[in] session
2715 /// The session of Houdini you are interacting with.
2716 /// See @ref HAPI_Sessions for more on sessions.
2717 /// Pass NULL to just use the default in-process session.
2718 /// <!-- default NULL -->
2719 ///
2720 /// @param[in] node_id
2721 /// The node id.
2722 ///
2723 /// @param[in] output_idx
2724 /// The output index. Should be between 0 and the
2725 /// to_node's ::HAPI_NodeInfo::outputCount - 1.
2726 /// <!-- min 0 -->
2727 /// <!-- max ::HAPI_NodeInfo::outputCount - 1 -->
2728 ///
2729 /// @param[out] name
2730 /// Output name string handle return value - valid until
2731 /// the next call to this function.
2732 ///
2734  HAPI_NodeId node_id,
2735  int output_idx,
2736  HAPI_StringHandle * name );
2737 
2738 /// @brief Get the id of the node with the specified path.
2739 ///
2740 /// @ingroup Nodes
2741 ///
2742 /// @param[in] session
2743 /// The session of Houdini you are interacting with.
2744 /// See @ref HAPI_Sessions for more on sessions.
2745 /// Pass NULL to just use the default in-process session.
2746 /// <!-- default NULL -->
2747 ///
2748 /// @param[in] parent_node_id
2749 /// If @c path does not start with "/", search for the path
2750 /// relative to this node. Provide -1 if @c path is an absolute
2751 /// path.
2752 ///
2753 /// @param[in] path
2754 /// The path of the node. If the path does not start with "/",
2755 /// it is treated as a relative path from the node specified in
2756 /// @c parent_node_id.
2757 ///
2758 /// @param[out] node_id
2759 /// The id of the found node.
2760 ///
2762  const HAPI_NodeId parent_node_id,
2763  const char * path,
2764  HAPI_NodeId * node_id );
2765 
2766 /// @brief Gets the node id of an output node in a SOP network.
2767 ///
2768 /// @ingroup Nodes
2769 ///
2770 /// @param[in] session
2771 /// The session of Houdini you are interacting with.
2772 /// See @ref HAPI_Sessions for more on sessions.
2773 /// Pass NULL to just use the default in-process session.
2774 /// <!-- default NULL -->
2775 ///
2776 /// @param[in] node_id
2777 /// The node id of a SOP node with at least one output node. The
2778 /// total number of node outputs can be found from the node's
2779 /// ::HAPI_NodeInfo::outputCount
2780 ///
2781 /// @param[in] output
2782 /// The output index. Should be between 0 and the node's
2783 /// ::HAPI_NodeInfo::outputCount - 1.
2784 /// <!-- min 0 -->
2785 /// <!-- max ::HAPI_NodeInfo::outputCount - 1 -->
2786 ///
2787 /// @param[out] output_node_id
2788 /// Pointer to a HAPI_NodeId where the node id of the output
2789 /// node will be stored.
2791  HAPI_NodeId node_id,
2792  int output,
2793  HAPI_NodeId * output_node_id );
2794 
2795 /// @defgroup Parms Parms
2796 /// Functions for wroking with Node parameters (parms)
2797 
2798 /// @brief Fill an array of ::HAPI_ParmInfo structs with parameter
2799 /// information from the asset instance node.
2800 ///
2801 /// @ingroup Parms
2802 ///
2803 /// @param[in] session
2804 /// The session of Houdini you are interacting with.
2805 /// See @ref HAPI_Sessions for more on sessions.
2806 /// Pass NULL to just use the default in-process session.
2807 /// <!-- default NULL -->
2808 ///
2809 /// @param[in] node_id
2810 /// The node id.
2811 ///
2812 /// @param[out] parm_infos_array
2813 /// Array of ::HAPI_ParmInfo at least the size of
2814 /// length.
2815 ///
2816 /// @param[in] start
2817 /// First index of range. Must be at least 0 and at
2818 /// most ::HAPI_NodeInfo::parmCount - 1.
2819 /// <!-- min 0 -->
2820 /// <!-- max ::HAPI_NodeInfo::parmCount - 1 -->
2821 /// <!-- default 0 -->
2822 ///
2823 /// @param[in] length
2824 /// Must be at least 1 and at most
2825 /// ::HAPI_NodeInfo::parmCount - start.
2826 /// <!-- min 1 -->
2827 /// <!-- max ::HAPI_NodeInfo::parmCount - start -->
2828 /// <!-- source ::HAPI_NodeInfo::parmCount - start -->
2829 ///
2830 HAPI_DECL HAPI_GetParameters( const HAPI_Session * session,
2831  HAPI_NodeId node_id,
2832  HAPI_ParmInfo * parm_infos_array,
2833  int start, int length );
2834 
2835 /// @brief Get the parm info of a parameter by parm id.
2836 ///
2837 /// @ingroup Parms
2838 ///
2839 /// @param[in] session
2840 /// The session of Houdini you are interacting with.
2841 /// See @ref HAPI_Sessions for more on sessions.
2842 /// Pass NULL to just use the default in-process session.
2843 /// <!-- default NULL -->
2844 ///
2845 /// @param[in] node_id
2846 /// The node id.
2847 ///
2848 /// @param[in] parm_id
2849 /// The parm id.
2850 ///
2851 /// @param[out] parm_info
2852 /// The returned parm info.
2853 ///
2854 HAPI_DECL HAPI_GetParmInfo( const HAPI_Session * session,
2855  HAPI_NodeId node_id,
2856  HAPI_ParmId parm_id,
2857  HAPI_ParmInfo * parm_info );
2858 
2859 /// @brief All parameter APIs require a ::HAPI_ParmId but if you know the
2860 /// parameter you wish to operate on by name than you can use
2861 /// this function to get its ::HAPI_ParmId. If the parameter with
2862 /// the given name is not found the parameter id returned
2863 /// will be -1.
2864 ///
2865 /// @ingroup Parms
2866 ///
2867 /// @param[in] session
2868 /// The session of Houdini you are interacting with.
2869 /// See @ref HAPI_Sessions for more on sessions.
2870 /// Pass NULL to just use the default in-process session.
2871 /// <!-- default NULL -->
2872 ///
2873 /// @param[in] node_id
2874 /// The node id.
2875 ///
2876 /// @param[in] parm_name
2877 /// The parm name.
2878 ///
2879 /// @param[out] parm_id
2880 /// The return value. The parameter's ::HAPI_ParmId. If
2881 /// the parameter with the given name is not found the
2882 /// parameter id returned will be -1.
2883 ///
2885  HAPI_NodeId node_id,
2886  const char * parm_name,
2887  HAPI_ParmId * parm_id );
2888 
2889 /// @brief Get the parm info of a parameter by name.
2890 ///
2891 /// @ingroup Parms
2892 ///
2893 /// @param[in] session
2894 /// The session of Houdini you are interacting with.
2895 /// See @ref HAPI_Sessions for more on sessions.
2896 /// Pass NULL to just use the default in-process session.
2897 /// <!-- default NULL -->
2898 ///
2899 /// @param[in] node_id
2900 /// The node id.
2901 ///
2902 /// @param[in] parm_name
2903 /// The parm name.
2904 ///
2905 /// @param[out] parm_info
2906 /// The returned parm info.
2907 ///
2909  HAPI_NodeId node_id,
2910  const char * parm_name,
2911  HAPI_ParmInfo * parm_info );
2912 
2913 /// @brief Get the tag name on a parameter given an index.
2914 ///
2915 /// @ingroup Parms
2916 ///
2917 /// @param[in] session
2918 /// The session of Houdini you are interacting with.
2919 /// See @ref HAPI_Sessions for more on sessions.
2920 /// Pass NULL to just use the default in-process session.
2921 /// <!-- default NULL -->
2922 ///
2923 /// @param[in] node_id
2924 /// The node id.
2925 ///
2926 /// @param[in] parm_id
2927 /// The parm id.
2928 ///
2929 /// @param[in] tag_index
2930 /// The tag index, which should be between 0 and
2931 /// ::HAPI_ParmInfo::tagCount - 1.
2932 /// @note These indices are invalidated whenever tags are added
2933 /// to parameters. Do not store these or expect them to be the
2934 /// same if the scene is modified.
2935 /// <!-- min 0 -->
2936 /// <!-- max ::HAPI_ParmInfo::tagCount - 1 -->
2937 ///
2938 /// @param[out] tag_name
2939 /// The returned tag name. This string handle will be valid
2940 /// until another call to ::HAPI_GetParmTagName().
2941 ///
2942 HAPI_DECL HAPI_GetParmTagName( const HAPI_Session * session,
2943  HAPI_NodeId node_id,
2944  HAPI_ParmId parm_id,
2945  int tag_index,
2946  HAPI_StringHandle * tag_name );
2947 
2948 /// @brief Get the tag value on a parameter given the tag name.
2949 ///
2950 /// @ingroup Parms
2951 ///
2952 /// @param[in] session
2953 /// The session of Houdini you are interacting with.
2954 /// See @ref HAPI_Sessions for more on sessions.
2955 /// Pass NULL to just use the default in-process session.
2956 /// <!-- default NULL -->
2957 ///
2958 /// @param[in] node_id
2959 /// The node id.
2960 ///
2961 /// @param[in] parm_id
2962 /// The parm id.
2963 ///
2964 /// @param[in] tag_name
2965 /// The tag name, either known or returned by
2966 /// ::HAPI_GetParmTagName().
2967 ///
2968 /// @param[out] tag_value
2969 /// The returned tag value. This string handle will be valid
2970 /// until another call to ::HAPI_GetParmTagValue().
2971 ///
2973  HAPI_NodeId node_id,
2974  HAPI_ParmId parm_id,
2975  const char * tag_name,
2976  HAPI_StringHandle * tag_value );
2977 
2978 /// @brief See if a parameter has a specific tag.
2979 ///
2980 /// @ingroup Parms
2981 ///
2982 /// @param[in] session
2983 /// The session of Houdini you are interacting with.
2984 /// See @ref HAPI_Sessions for more on sessions.
2985 /// Pass NULL to just use the default in-process session.
2986 /// <!-- default NULL -->
2987 ///
2988 /// @param[in] node_id
2989 /// The node id.
2990 ///
2991 /// @param[in] parm_id
2992 /// The parm id.
2993 ///
2994 /// @param[in] tag_name
2995 /// The tag name to look for.
2996 ///
2997 /// @param[out] has_tag
2998 /// True if the tag exists on the parameter, false otherwise.
2999 ///
3000 HAPI_DECL HAPI_ParmHasTag( const HAPI_Session * session,
3001  HAPI_NodeId node_id,
3002  HAPI_ParmId parm_id,
3003  const char * tag_name,
3004  HAPI_Bool * has_tag );
3005 
3006 /// @brief See if a parameter has an expression
3007 ///
3008 /// @ingroup Parms
3009 ///
3010 /// @param[in] session
3011 /// The session of Houdini you are interacting with.
3012 /// See @ref HAPI_Sessions for more on sessions.
3013 /// Pass NULL to just use the default in-process session.
3014 /// <!-- default NULL -->
3015 ///
3016 /// @param[in] node_id
3017 /// The node id.
3018 ///
3019 /// @param[in] parm_name
3020 /// The parm name.
3021 ///
3022 /// @param[in] index
3023 /// The parm index.
3024 ///
3025 /// @param[out] has_expression
3026 /// True if an expression exists on the parameter, false otherwise.
3027 ///
3029  HAPI_NodeId node_id,
3030  const char * parm_name,
3031  int index,
3032  HAPI_Bool * has_expression );
3033 
3034 /// @brief Get the first parm with a specific, ideally unique, tag on it.
3035 /// This is particularly useful for getting the ogl parameters on a
3036 /// material node.
3037 ///
3038 /// @ingroup Parms
3039 ///
3040 /// @param[in] session
3041 /// The session of Houdini you are interacting with.
3042 /// See @ref HAPI_Sessions for more on sessions.
3043 /// Pass NULL to just use the default in-process session.
3044 /// <!-- default NULL -->
3045 ///
3046 /// @param[in] node_id
3047 /// The node id.
3048 ///
3049 /// @param[in] tag_name
3050 /// The tag name to look for.
3051 ///
3052 /// @param[out] parm_id
3053 /// The returned parm id. This will be -1 if no parm was found
3054 /// with this tag.
3055 ///
3056 HAPI_DECL HAPI_GetParmWithTag( const HAPI_Session * session,
3057  HAPI_NodeId node_id,
3058  const char * tag_name,
3059  HAPI_ParmId * parm_id );
3060 
3061 /// @brief Get single integer or float parm expression by name
3062 /// or Null string if no expression is present
3063 ///
3064 /// @ingroup Parms
3065 ///
3066 /// @param[in] session
3067 /// The session of Houdini you are interacting with.
3068 /// See @ref HAPI_Sessions for more on sessions.
3069 /// Pass NULL to just use the default in-process session.
3070 /// <!-- default NULL -->
3071 ///
3072 /// @param[in] node_id
3073 /// The node id.
3074 ///
3075 /// @param[in] parm_name
3076 /// The parm name.
3077 ///
3078 /// @param[in] index
3079 /// Index within the parameter's values tuple.
3080 ///
3081 /// @param[out] value
3082 /// The returned string value.
3083 ///
3085  HAPI_NodeId node_id,
3086  const char * parm_name,
3087  int index,
3088  HAPI_StringHandle * value );
3089 
3090 /// @brief Revert single parm by name to default
3091 ///
3092 /// @ingroup Parms
3093 ///
3094 /// @param[in] session
3095 /// The session of Houdini you are interacting with.
3096 /// See @ref HAPI_Sessions for more on sessions.
3097 /// Pass NULL to just use the default in-process session.
3098 /// <!-- default NULL -->
3099 ///
3100 /// @param[in] node_id
3101 /// The node id.
3102 ///
3103 /// @param[in] parm_name
3104 /// The parm name.
3105 ///
3106 /// @param[in] index
3107 /// Index within the parameter's values tuple.
3108 ///
3110  HAPI_NodeId node_id,
3111  const char * parm_name,
3112  int index );
3113 
3114 /// @brief Revert all instances of the parm by name to defaults
3115 ///
3116 /// @ingroup Parms
3117 ///
3118 /// @param[in] session
3119 /// The session of Houdini you are interacting with.
3120 /// See @ref HAPI_Sessions for more on sessions.
3121 /// Pass NULL to just use the default in-process session.
3122 /// <!-- default NULL -->
3123 ///
3124 /// @param[in] node_id
3125 /// The node id.
3126 ///
3127 /// @param[in] parm_name
3128 /// The parm name.
3129 ///
3131  HAPI_NodeId node_id,
3132  const char * parm_name );
3133 
3134 /// @brief Set (push) an expression string. We can only set a single value at
3135 /// a time because we want to avoid fixed size string buffers.
3136 ///
3137 /// @note Regardless of the value, when calling this function
3138 /// on a parameter, if that parameter has a callback function
3139 /// attached to it, that callback function will be called. For
3140 /// example, if the parameter is a button the button will be
3141 /// pressed.
3142 ///
3143 /// @note In threaded mode, this is an _async call_!
3144 ///
3145 /// This API will invoke the cooking thread if threading is
3146 /// enabled. This means it will return immediately. Use
3147 /// the status and cooking count APIs under DIAGNOSTICS to get
3148 /// a sense of the progress. All other API calls will block
3149 /// until the cook operation has finished.
3150 ///
3151 /// Also note that the cook result won't be of type
3152 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
3153 /// Whenever the threading cook is done it will fill the
3154 /// @a cook result which is queried using
3155 /// ::HAPI_STATUS_COOK_RESULT.
3156 ///
3157 /// @ingroup Parms
3158 ///
3159 /// @param[in] session
3160 /// The session of Houdini you are interacting with.
3161 /// See @ref HAPI_Sessions for more on sessions.
3162 /// Pass NULL to just use the default in-process session.
3163 /// <!-- default NULL -->
3164 ///
3165 /// @param[in] node_id
3166 /// The node id.
3167 ///
3168 /// @param[in] value
3169 /// The expression string.
3170 ///
3171 /// @param[in] parm_id
3172 /// Parameter id of the parameter being updated.
3173 ///
3174 /// @param[in] index
3175 /// Index within the parameter's values tuple.
3176 ///
3178  HAPI_NodeId node_id,
3179  const char * value,
3180  HAPI_ParmId parm_id, int index );
3181 
3182 /// @brief Remove the expression string, leaving the value of the
3183 /// parm at the current value of the expression
3184 ///
3185 /// @note Regardless of the value, when calling this function
3186 /// on a parameter, if that parameter has a callback function
3187 /// attached to it, that callback function will be called. For
3188 /// example, if the parameter is a button the button will be
3189 /// pressed.
3190 ///
3191 /// @note In threaded mode, this is an _async call_!
3192 ///
3193 /// This API will invoke the cooking thread if threading is
3194 /// enabled. This means it will return immediately. Use
3195 /// the status and cooking count APIs under DIAGNOSTICS to get
3196 /// a sense of the progress. All other API calls will block
3197 /// until the cook operation has finished.
3198 ///
3199 /// Also note that the cook result won't be of type
3200 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
3201 /// Whenever the threading cook is done it will fill the
3202 /// @a cook result which is queried using
3203 /// ::HAPI_STATUS_COOK_RESULT.
3204 ///
3205 /// @ingroup Parms
3206 ///
3207 /// @param[in] session
3208 /// The session of Houdini you are interacting with.
3209 /// See @ref HAPI_Sessions for more on sessions.
3210 /// Pass NULL to just use the default in-process session.
3211 /// <!-- default NULL -->
3212 ///
3213 /// @param[in] node_id
3214 /// The node id.
3215 ///
3216 /// @param[in] parm_id
3217 /// Parameter id of the parameter being updated.
3218 ///
3219 /// @param[in] index
3220 /// Index within the parameter's values tuple.
3221 ///
3223  HAPI_NodeId node_id,
3224  HAPI_ParmId parm_id, int index );
3225 
3226 /// @brief Get single parm int value by name.
3227 ///
3228 /// @ingroup Parms
3229 ///
3230 /// @param[in] session
3231 /// The session of Houdini you are interacting with.
3232 /// See @ref HAPI_Sessions for more on sessions.
3233 /// Pass NULL to just use the default in-process session.
3234 /// <!-- default NULL -->
3235 ///
3236 /// @param[in] node_id
3237 /// The node id.
3238 ///
3239 /// @param[in] parm_name
3240 /// The parm name.
3241 ///
3242 /// @param[in] index
3243 /// Index within the parameter's values tuple.
3244 ///
3245 /// @param[out] value
3246 /// The returned int value.
3247 ///
3249  HAPI_NodeId node_id,
3250  const char * parm_name,
3251  int index,
3252  int * value );
3253 
3254 /// @brief Fill an array of parameter int values. This is more efficient
3255 /// than calling ::HAPI_GetParmIntValue() individually for each
3256 /// parameter value.
3257 ///
3258 /// @ingroup Parms
3259 ///
3260 /// @param[in] session
3261 /// The session of Houdini you are interacting with.
3262 /// See @ref HAPI_Sessions for more on sessions.
3263 /// Pass NULL to just use the default in-process session.
3264 /// <!-- default NULL -->
3265 ///
3266 /// @param[in] node_id
3267 /// The node id.
3268 ///
3269 /// @param[out] values_array
3270 /// Array of ints at least the size of length.
3271 ///
3272 /// @param[in] start
3273 /// First index of range. Must be at least 0 and at
3274 /// most ::HAPI_NodeInfo::parmIntValueCount - 1.
3275 /// <!-- min 0 -->
3276 /// <!-- max ::HAPI_NodeInfo::parmIntValueCount - 1 -->
3277 /// <!-- default 0 -->
3278 ///
3279 /// @param[in] length
3280 /// Must be at least 1 and at most
3281 /// ::HAPI_NodeInfo::parmIntValueCount - start.
3282 /// <!-- min 1 -->
3283 /// <!-- max ::HAPI_NodeInfo::parmIntValueCount - start -->
3284 /// <!-- source ::HAPI_NodeInfo::parmIntValueCount - start -->
3285 ///
3287  HAPI_NodeId node_id,
3288  int * values_array,
3289  int start, int length );
3290 
3291 /// @brief Get single parm float value by name.
3292 ///
3293 /// @ingroup Parms
3294 ///
3295 /// @param[in] session
3296 /// The session of Houdini you are interacting with.
3297 /// See @ref HAPI_Sessions for more on sessions.
3298 /// Pass NULL to just use the default in-process session.
3299 /// <!-- default NULL -->
3300 ///
3301 /// @param[in] node_id
3302 /// The node id.
3303 ///
3304 /// @param[in] parm_name
3305 /// The parm name.
3306 ///
3307 /// @param[in] index
3308 /// Index within the parameter's values tuple.
3309 ///
3310 /// @param[out] value
3311 /// The returned float value.
3312 ///
3314  HAPI_NodeId node_id,
3315  const char * parm_name,
3316  int index,
3317  float * value );
3318 
3319 /// @brief Fill an array of parameter float values. This is more efficient
3320 /// than calling ::HAPI_GetParmFloatValue() individually for each
3321 /// parameter value.
3322 ///
3323 /// @ingroup Parms
3324 ///
3325 /// @param[in] session
3326 /// The session of Houdini you are interacting with.
3327 /// See @ref HAPI_Sessions for more on sessions.
3328 /// Pass NULL to just use the default in-process session.
3329 /// <!-- default NULL -->
3330 ///
3331 /// @param[in] node_id
3332 /// The node id.
3333 ///
3334 /// @param[out] values_array
3335 /// Array of floats at least the size of length.
3336 ///
3337 /// @param[in] start
3338 /// First index of range. Must be at least 0 and at
3339 /// most ::HAPI_NodeInfo::parmFloatValueCount - 1.
3340 /// <!-- min 0 -->
3341 /// <!-- max ::HAPI_NodeInfo::parmFloatValueCount - 1 -->
3342 /// <!-- default 0 -->
3343 ///
3344 /// @param[in] length
3345 /// Must be at least 1 and at most
3346 /// ::HAPI_NodeInfo::parmFloatValueCount - start.
3347 /// <!-- min 1 -->
3348 /// <!-- max ::HAPI_NodeInfo::parmFloatValueCount - start -->
3349 /// <!-- source ::HAPI_NodeInfo::parmFloatValueCount - start -->
3350 ///
3352  HAPI_NodeId node_id,
3353  float * values_array,
3354  int start, int length );
3355 
3356 /// @brief Get single parm string value by name.
3357 ///
3358 /// @ingroup Parms
3359 ///
3360 /// @param[in] session
3361 /// The session of Houdini you are interacting with.
3362 /// See @ref HAPI_Sessions for more on sessions.
3363 /// Pass NULL to just use the default in-process session.
3364 /// <!-- default NULL -->
3365 ///
3366 /// @param[in] node_id
3367 /// The node id.
3368 ///
3369 /// @param[in] parm_name
3370 /// The name of the parameter.
3371 ///
3372 /// @param[in] index
3373 /// Index within the parameter's values tuple.
3374 ///
3375 /// @param[in] evaluate
3376 /// Whether or not to evaluate the string expression.
3377 /// For example, the string "$F" would evaluate to the
3378 /// current frame number. So, passing in evaluate = false
3379 /// would give you back the string "$F" and passing
3380 /// in evaluate = true would give you back "1" (assuming
3381 /// the current frame is 1).
3382 /// <!-- default true -->
3383 ///
3384 /// @param[out] value
3385 /// The returned string value.
3386 ///
3388  HAPI_NodeId node_id,
3389  const char * parm_name,
3390  int index,
3391  HAPI_Bool evaluate,
3392  HAPI_StringHandle * value );
3393 
3394 /// @brief Fill an array of parameter string handles. These handles must
3395 /// be used in conjunction with ::HAPI_GetString() to get the
3396 /// actual string values. This is more efficient than calling
3397 /// ::HAPI_GetParmStringValue() individually for each
3398 /// parameter value.
3399 ///
3400 /// @ingroup Parms
3401 ///
3402 /// @param[in] session
3403 /// The session of Houdini you are interacting with.
3404 /// See @ref HAPI_Sessions for more on sessions.
3405 /// Pass NULL to just use the default in-process session.
3406 /// <!-- default NULL -->
3407 ///
3408 /// @param[in] node_id
3409 /// The node id.
3410 ///
3411 /// @param[in] evaluate
3412 /// Whether or not to evaluate the string expression.
3413 /// For example, the string "$F" would evaluate to the
3414 /// current frame number. So, passing in evaluate = false
3415 /// would give you back the string "$F" and passing
3416 /// in evaluate = true would give you back "1" (assuming
3417 /// the current frame is 1).
3418 ///
3419 /// @param[out] values_array
3420 /// Array of integers at least the size of length.
3421 ///
3422 /// @param[in] start
3423 /// First index of range. Must be at least 0 and at
3424 /// most ::HAPI_NodeInfo::parmStringValueCount - 1.
3425 /// <!-- min 0 -->
3426 /// <!-- max ::HAPI_NodeInfo::parmStringValueCount - 1 -->
3427 /// <!-- default 0 -->
3428 ///
3429 /// @param[in] length
3430 /// Must be at least 1 and at most
3431 /// ::HAPI_NodeInfo::parmStringValueCount - start.
3432 /// <!-- min 1 -->
3433 /// <!-- max ::HAPI_NodeInfo::parmStringValueCount - start -->
3434 /// <!-- source ::HAPI_NodeInfo::parmStringValueCount - start -->
3435 ///
3437  HAPI_NodeId node_id,
3438  HAPI_Bool evaluate,
3439  HAPI_StringHandle * values_array,
3440  int start, int length );
3441 
3442 /// @brief Get a single node id parm value of an Op Path parameter. This is
3443 /// how you see which node is connected as an input for the current
3444 /// node (via parameter).
3445 ///
3446 /// @ingroup Parms
3447 ///
3448 /// @param[in] session
3449 /// The session of Houdini you are interacting with.
3450 /// See @ref HAPI_Sessions for more on sessions.
3451 /// Pass NULL to just use the default in-process session.
3452 /// <!-- default NULL -->
3453 ///
3454 /// @param[in] node_id
3455 /// The node id.
3456 ///
3457 /// @param[in] parm_name
3458 /// The name of the parameter.
3459 ///
3460 /// @param[out] value
3461 /// The node id of the node being pointed to by the parm.
3462 /// If there is no node found, -1 will be returned.
3463 ///
3465  HAPI_NodeId node_id,
3466  const char * parm_name,
3467  HAPI_NodeId * value );
3468 
3469 /// @brief Extract a file specified by path on a parameter. This will copy
3470 /// the file to the destination directory from wherever it might be,
3471 /// inlcuding inside the asset definition or online.
3472 ///
3473 /// @ingroup Parms
3474 ///
3475 /// @param[in] session
3476 /// The session of Houdini you are interacting with.
3477 /// See @ref HAPI_Sessions for more on sessions.
3478 /// Pass NULL to just use the default in-process session.
3479 /// <!-- default NULL -->
3480 ///
3481 /// @param[in] node_id
3482 /// The node id.
3483 ///
3484 /// @param[in] parm_name
3485 /// The name of the parameter.
3486 ///
3487 /// @param[in] destination_directory
3488 /// The destination directory to copy the file to.
3489 ///
3490 /// @param[in] destination_file_name
3491 /// The destination file name.
3492 ///
3493 HAPI_DECL HAPI_GetParmFile( const HAPI_Session * session,
3494  HAPI_NodeId node_id,
3495  const char * parm_name,
3496  const char * destination_directory,
3497  const char * destination_file_name );
3498 
3499 /// @brief Fill an array of ::HAPI_ParmChoiceInfo structs with parameter
3500 /// choice list information from the asset instance node.
3501 ///
3502 /// @ingroup Parms
3503 ///
3504 /// @param[in] session
3505 /// The session of Houdini you are interacting with.
3506 /// See @ref HAPI_Sessions for more on sessions.
3507 /// Pass NULL to just use the default in-process session.
3508 /// <!-- default NULL -->
3509 ///
3510 /// @param[in] node_id
3511 /// The node id.
3512 ///
3513 /// @param[out] parm_choices_array
3514 /// Array of ::HAPI_ParmChoiceInfo exactly the size of
3515 /// length.
3516 ///
3517 /// @param[in] start
3518 /// First index of range. Must be at least 0 and at
3519 /// most ::HAPI_NodeInfo::parmChoiceCount - 1.
3520 /// <!-- min 0 -->
3521 /// <!-- max ::HAPI_NodeInfo::parmChoiceCount - 1 -->
3522 /// <!-- default 0 -->
3523 ///
3524 /// @param[in] length
3525 /// Must be at least 1 and at most
3526 /// ::HAPI_NodeInfo::parmChoiceCount - start.
3527 /// <!-- min 1 -->
3528 /// <!-- max ::HAPI_NodeInfo::parmChoiceCount - start -->
3529 /// <!-- source ::HAPI_NodeInfo::parmChoiceCount - start -->
3530 ///
3532  HAPI_NodeId node_id,
3533  HAPI_ParmChoiceInfo * parm_choices_array,
3534  int start, int length );
3535 
3536 /// @brief Set single parm int value by name.
3537 ///
3538 /// @note Regardless of the value, when calling this function
3539 /// on a parameter, if that parameter has a callback function
3540 /// attached to it, that callback function will be called. For
3541 /// example, if the parameter is a button the button will be
3542 /// pressed.
3543 ///
3544 /// @note In threaded mode, this is an _async call_!
3545 ///
3546 /// This API will invoke the cooking thread if threading is
3547 /// enabled. This means it will return immediately. Use
3548 /// the status and cooking count APIs under DIAGNOSTICS to get
3549 /// a sense of the progress. All other API calls will block
3550 /// until the cook operation has finished.
3551 ///
3552 /// Also note that the cook result won't be of type
3553 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
3554 /// Whenever the threading cook is done it will fill the
3555 /// @a cook result which is queried using
3556 /// ::HAPI_STATUS_COOK_RESULT.
3557 ///
3558 /// @ingroup Parms
3559 ///
3560 /// @param[in] session
3561 /// The session of Houdini you are interacting with.
3562 /// See @ref HAPI_Sessions for more on sessions.
3563 /// Pass NULL to just use the default in-process session.
3564 /// <!-- default NULL -->
3565 ///
3566 /// @param[in] node_id
3567 /// The node id.
3568 ///
3569 /// @param[in] parm_name
3570 /// The parm name.
3571 ///
3572 /// @param[in] index
3573 /// Index within the parameter's values tuple.
3574 ///
3575 /// @param[in] value
3576 /// The int value.
3577 ///
3579  HAPI_NodeId node_id,
3580  const char * parm_name,
3581  int index,
3582  int value );
3583 
3584 /// @brief Set (push) an array of parameter int values.
3585 ///
3586 /// @note Regardless of the values, when calling this function
3587 /// on a set of parameters, if any parameter has a callback
3588 /// function attached to it, that callback function will be called.
3589 /// For example, if the parameter is a button the button will be
3590 /// pressed.
3591 ///
3592 /// @note In threaded mode, this is an _async call_!
3593 ///
3594 /// This API will invoke the cooking thread if threading is
3595 /// enabled. This means it will return immediately. Use
3596 /// the status and cooking count APIs under DIAGNOSTICS to get
3597 /// a sense of the progress. All other API calls will block
3598 /// until the cook operation has finished.
3599 ///
3600 /// Also note that the cook result won't be of type
3601 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
3602 /// Whenever the threading cook is done it will fill the
3603 /// @a cook result which is queried using
3604 /// ::HAPI_STATUS_COOK_RESULT.
3605 ///
3606 /// @ingroup Parms
3607 ///
3608 /// @param[in] session
3609 /// The session of Houdini you are interacting with.
3610 /// See @ref HAPI_Sessions for more on sessions.
3611 /// Pass NULL to just use the default in-process session.
3612 /// <!-- default NULL -->
3613 ///
3614 /// @param[in] node_id
3615 /// The node id.
3616 ///
3617 /// @param[in] values_array
3618 /// Array of integers at least the size of length.
3619 /// <!-- min length -->
3620 ///
3621 /// @param[in] start
3622 /// First index of range. Must be at least 0 and at
3623 /// most ::HAPI_NodeInfo::parmIntValueCount - 1.
3624 /// <!-- min 0 -->
3625 /// <!-- max ::HAPI_NodeInfo::parmIntValueCount - 1 -->
3626 /// <!-- default 0 -->
3627 ///
3628 /// @param[in] length
3629 /// Must be at least 1 and at most
3630 /// ::HAPI_NodeInfo::parmIntValueCount - start.
3631 /// <!-- min 1 -->
3632 /// <!-- max ::HAPI_NodeInfo::parmIntValueCount - start -->
3633 /// <!-- source ::HAPI_NodeInfo::parmIntValueCount - start -->
3634 ///
3636  HAPI_NodeId node_id,
3637  const int * values_array,
3638  int start, int length );
3639 
3640 /// @brief Set single parm float value by name.
3641 ///
3642 /// @note Regardless of the value, when calling this function
3643 /// on a parameter, if that parameter has a callback function
3644 /// attached to it, that callback function will be called. For
3645 /// example, if the parameter is a button the button will be
3646 /// pressed.
3647 ///
3648 /// @note In threaded mode, this is an _async call_!
3649 ///
3650 /// This API will invoke the cooking thread if threading is
3651 /// enabled. This means it will return immediately. Use
3652 /// the status and cooking count APIs under DIAGNOSTICS to get
3653 /// a sense of the progress. All other API calls will block
3654 /// until the cook operation has finished.
3655 ///
3656 /// Also note that the cook result won't be of type
3657 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
3658 /// Whenever the threading cook is done it will fill the
3659 /// @a cook result which is queried using
3660 /// ::HAPI_STATUS_COOK_RESULT.
3661 ///
3662 /// @ingroup Parms
3663 ///
3664 /// @param[in] session
3665 /// The session of Houdini you are interacting with.
3666 /// See @ref HAPI_Sessions for more on sessions.
3667 /// Pass NULL to just use the default in-process session.
3668 /// <!-- default NULL -->
3669 ///
3670 /// @param[in] node_id
3671 /// The node id.
3672 ///
3673 /// @param[in] parm_name
3674 /// The parm name.
3675 ///
3676 /// @param[in] index
3677 /// Index within the parameter's values tuple.
3678 ///
3679 /// @param[in] value
3680 /// The float value.
3681 ///
3683  HAPI_NodeId node_id,
3684  const char * parm_name,
3685  int index,
3686  float value );
3687 
3688 /// @brief Set (push) an array of parameter float values.
3689 ///
3690 /// @note Regardless of the values, when calling this function
3691 /// on a set of parameters, if any parameter has a callback
3692 /// function attached to it, that callback function will be called.
3693 /// For example, if the parameter is a button the button will be
3694 /// pressed.
3695 ///
3696 /// @note In threaded mode, this is an _async call_!
3697 ///
3698 /// This API will invoke the cooking thread if threading is
3699 /// enabled. This means it will return immediately. Use
3700 /// the status and cooking count APIs under DIAGNOSTICS to get
3701 /// a sense of the progress. All other API calls will block
3702 /// until the cook operation has finished.
3703 ///
3704 /// Also note that the cook result won't be of type
3705 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
3706 /// Whenever the threading cook is done it will fill the
3707 /// @a cook result which is queried using
3708 /// ::HAPI_STATUS_COOK_RESULT.
3709 ///
3710 /// @ingroup Parms
3711 ///
3712 /// @param[in] session
3713 /// The session of Houdini you are interacting with.
3714 /// See @ref HAPI_Sessions for more on sessions.
3715 /// Pass NULL to just use the default in-process session.
3716 /// <!-- default NULL -->
3717 ///
3718 /// @param[in] node_id
3719 /// The node id.
3720 ///
3721 /// @param[in] values_array
3722 /// Array of floats at least the size of length.
3723 ///
3724 /// @param[in] start
3725 /// First index of range. Must be at least 0 and at
3726 /// most ::HAPI_NodeInfo::parmFloatValueCount - 1.
3727 ///
3728 /// @param[in] length
3729 /// Must be at least 1 and at most
3730 /// ::HAPI_NodeInfo::parmFloatValueCount - start.
3731 ///
3733  HAPI_NodeId node_id,
3734  const float * values_array,
3735  int start, int length );
3736 
3737 /// @brief Set (push) a string value. We can only set a single value at
3738 /// a time because we want to avoid fixed size string buffers.
3739 ///
3740 /// @note Regardless of the value, when calling this function
3741 /// on a parameter, if that parameter has a callback function
3742 /// attached to it, that callback function will be called. For
3743 /// example, if the parameter is a button the button will be
3744 /// pressed.
3745 ///
3746 /// @note In threaded mode, this is an _async call_!
3747 ///
3748 /// This API will invoke the cooking thread if threading is
3749 /// enabled. This means it will return immediately. Use
3750 /// the status and cooking count APIs under DIAGNOSTICS to get
3751 /// a sense of the progress. All other API calls will block
3752 /// until the cook operation has finished.
3753 ///
3754 /// Also note that the cook result won't be of type
3755 /// ::HAPI_STATUS_CALL_RESULT like all calls (including this one).
3756 /// Whenever the threading cook is done it will fill the
3757 /// @a cook result which is queried using
3758 /// ::HAPI_STATUS_COOK_RESULT.
3759 ///
3760 /// @ingroup Parms
3761 ///
3762 /// @param[in] session
3763 /// The session of Houdini you are interacting with.
3764 /// See @ref HAPI_Sessions for more on sessions.
3765 /// Pass NULL to just use the default in-process session.
3766 /// <!-- default NULL -->
3767 ///
3768 /// @param[in] node_id
3769 /// The node id.
3770 ///
3771 /// @param[in] value
3772 /// The string value.
3773 ///
3774 /// @param[in] parm_id
3775 /// Parameter id of the parameter being updated.
3776 ///
3777 /// @param[in] index
3778 /// Index within the parameter's values tuple.
3779 ///
3781  HAPI_NodeId node_id,
3782  const char * value,
3783  HAPI_ParmId parm_id, int index );
3784 
3785 /// @brief Set a node id parm value of an Op Path parameter. For example,
3786 /// This is how you connect the geometry output of an asset to the
3787 /// geometry input of another asset - whether the input is a parameter
3788 /// or a node input (the top of the node). Node inputs get converted
3789 /// top parameters in HAPI.
3790 ///
3791 /// @ingroup Parms
3792 ///
3793 /// @param[in] session
3794 /// The session of Houdini you are interacting with.
3795 /// See @ref HAPI_Sessions for more on sessions.
3796 /// Pass NULL to just use the default in-process session.
3797 /// <!-- default NULL -->
3798 ///
3799 /// @param[in] node_id
3800 /// The node id.
3801 ///
3802 /// @param[in] parm_name
3803 /// The name of the parameter.
3804 ///
3805 /// @param[in] value
3806 /// The node id of the node being connected. Pass -1 to
3807 /// disconnect.
3808 ///
3810  HAPI_NodeId node_id,
3811  const char * parm_name,
3812  HAPI_NodeId value );
3813 
3814 /// @brief Insert an instance of a multiparm before instance_position.
3815 ///
3816 /// @ingroup Parms
3817 ///
3818 /// @param[in] session
3819 /// The session of Houdini you are interacting with.
3820 /// See @ref HAPI_Sessions for more on sessions.
3821 /// Pass NULL to just use the default in-process session.
3822 /// <!-- default NULL -->
3823 ///
3824 /// @param[in] node_id
3825 /// The node id.
3826 ///
3827 /// @param[in] parm_id
3828 /// A parm id given by a ::HAPI_ParmInfo struct that
3829 /// has type ::HAPI_PARMTYPE_MULTIPARMLIST.
3830 ///
3831 /// @param[in] instance_position
3832 /// The new instance will be inserted at this position
3833 /// index. Do note the multiparms can start at position
3834 /// 1 or 0. Use ::HAPI_ParmInfo::instanceStartOffset to
3835 /// distinguish.
3836 ///
3838  HAPI_NodeId node_id,
3839  HAPI_ParmId parm_id,
3840  int instance_position );
3841 
3842 /// @brief Remove the instance of a multiparm given by instance_position.
3843 ///
3844 /// @ingroup Parms
3845 ///
3846 /// @param[in] session
3847 /// The session of Houdini you are interacting with.
3848 /// See @ref HAPI_Sessions for more on sessions.
3849 /// Pass NULL to just use the default in-process session.
3850 /// <!-- default NULL -->
3851 ///
3852 /// @param[in] node_id
3853 /// The node id.
3854 ///
3855 /// @param[in] parm_id
3856 /// A parm id given by a ::HAPI_ParmInfo struct that
3857 /// has type ::HAPI_PARMTYPE_MULTIPARMLIST.
3858 ///
3859 /// @param[in] instance_position
3860 /// The instance at instance_position will removed.
3861 ///
3863  HAPI_NodeId node_id,
3864  HAPI_ParmId parm_id,
3865  int instance_position );
3866 
3867 // HANDLES ------------------------------------------------------------------
3868 
3869 /// @brief Fill an array of ::HAPI_HandleInfo structs with information
3870 /// about every exposed user manipulation handle on the node.
3871 ///
3872 /// @ingroup Parms
3873 ///
3874 /// @param[in] session
3875 /// The session of Houdini you are interacting with.
3876 /// See @ref HAPI_Sessions for more on sessions.
3877 /// Pass NULL to just use the default in-process session.
3878 /// <!-- default NULL -->
3879 ///
3880 /// @param[in] node_id
3881 /// The node id.
3882 ///
3883 /// @param[out] handle_infos_array
3884 /// Array of ::HAPI_HandleInfo at least the size of length.
3885 ///
3886 /// @param[in] start
3887 /// First index of range. Must be at least 0 and at
3888 /// most ::HAPI_AssetInfo::handleCount - 1.
3889 /// <!-- default 0 -->
3890 ///
3891 /// @param[in] length
3892 /// Must be at least 1 and at most
3893 /// ::HAPI_AssetInfo::handleCount - start.
3894 /// <!-- source ::HAPI_AssetInfo::handleCount - start -->
3895 ///
3896 HAPI_DECL HAPI_GetHandleInfo( const HAPI_Session * session,
3897  HAPI_NodeId node_id,
3898  HAPI_HandleInfo * handle_infos_array,
3899  int start, int length );
3900 
3901 /// @brief Fill an array of ::HAPI_HandleBindingInfo structs with information
3902 /// about the binding of a particular handle on the given node.
3903 ///
3904 /// @ingroup Parms
3905 ///
3906 /// @param[in] session
3907 /// The session of Houdini you are interacting with.
3908 /// See @ref HAPI_Sessions for more on sessions.
3909 /// Pass NULL to just use the default in-process session.
3910 /// <!-- default NULL -->
3911 ///
3912 /// @param[in] node_id
3913 /// The node id.
3914 ///
3915 /// @param[in] handle_index
3916 /// The index of the handle, from 0 to handleCount - 1
3917 /// from the call to ::HAPI_GetAssetInfo().
3918 ///
3919 /// @param[out] handle_binding_infos_array
3920 /// Array of ::HAPI_HandleBindingInfo at least the size
3921 /// of length.
3922 ///
3923 /// @param[in] start
3924 /// First index of range. Must be at least 0 and at
3925 /// most ::HAPI_HandleInfo::bindingsCount - 1.
3926 /// <!-- default 0 -->
3927 ///
3928 /// @param[in] length
3929 /// Must be at least 1 and at most
3930 /// ::HAPI_HandleInfo::bindingsCount - start.
3931 /// <!-- source ::HAPI_AssetInfo::bindingsCount - start -->
3932 ///
3934  const HAPI_Session * session,
3935  HAPI_NodeId node_id,
3936  int handle_index,
3937  HAPI_HandleBindingInfo * handle_binding_infos_array,
3938  int start, int length );
3939 
3940 /// @defgroup Presets Presets
3941 /// Functions for working with Node presets
3942 
3943 /// @brief Generate a preset blob of the current state of all the
3944 /// parameter values, cache it, and return its size in bytes.
3945 ///
3946 /// @ingroup Presets
3947 ///
3948 /// @param[in] session
3949 /// The session of Houdini you are interacting with.
3950 /// See @ref HAPI_Sessions for more on sessions.
3951 /// Pass NULL to just use the default in-process session.
3952 /// <!-- default NULL -->
3953 ///
3954 /// @param[in] node_id
3955 /// The exposed node id.
3956 ///
3957 /// @param[in] preset_type
3958 /// The preset type.
3959 ///
3960 /// @param[in] preset_name
3961 /// Optional. This is only used if the @p preset_type is
3962 /// ::HAPI_PRESETTYPE_IDX. If NULL is given, the preset
3963 /// name will be the same as the name of the node with
3964 /// the given @p node_id.
3965 ///
3966 /// @param[out] buffer_length
3967 /// Size of the buffer.
3968 ///
3970  HAPI_NodeId node_id,
3971  HAPI_PresetType preset_type,
3972  const char * preset_name,
3973  int * buffer_length );
3974 
3975 /// @brief Generates a preset for the given asset.
3976 ///
3977 /// @ingroup Presets
3978 ///
3979 /// @param[in] session
3980 /// The session of Houdini you are interacting with.
3981 /// See @ref HAPI_Sessions for more on sessions.
3982 /// Pass NULL to just use the default in-process session.
3983 /// <!-- default NULL -->
3984 ///
3985 /// @param[in] node_id
3986 /// The exposed node id.
3987 ///
3988 /// @param[out] buffer
3989 /// Buffer to hold the preset data.
3990 ///
3991 /// @param[in] buffer_length
3992 /// Size of the buffer. Should be the same as the length
3993 /// returned by ::HAPI_GetPresetBufLength().
3994 ///
3995 HAPI_DECL HAPI_GetPreset( const HAPI_Session * session,
3996  HAPI_NodeId node_id,
3997  char * buffer,
3998  int buffer_length );
3999 
4000 /// @brief Sets a particular asset to a given preset.
4001 ///
4002 /// @ingroup Presets
4003 ///
4004 /// @param[in] session
4005 /// The session of Houdini you are interacting with.
4006 /// See @ref HAPI_Sessions for more on sessions.
4007 /// Pass NULL to just use the default in-process session.
4008 /// <!-- default NULL -->
4009 ///
4010 /// @param[in] node_id
4011 /// The exposed node id.
4012 ///
4013 /// @param[in] preset_type
4014 /// The preset type.
4015 ///
4016 /// @param[in] preset_name
4017 /// Optional. This is only used if the @p preset_type is
4018 /// ::HAPI_PRESETTYPE_IDX. If NULL is give, the first
4019 /// preset in the IDX file will be chosen.
4020 /// <!-- default NULL -->
4021 ///
4022 /// @param[in] buffer
4023 /// Buffer to hold the preset data.
4024 ///
4025 /// @param[in] buffer_length
4026 /// Size of the buffer.
4027 ///
4028 HAPI_DECL HAPI_SetPreset( const HAPI_Session * session,
4029  HAPI_NodeId node_id,
4030  HAPI_PresetType preset_type,
4031  const char * preset_name,
4032  const char * buffer,
4033  int buffer_length );
4034 
4035 /// @defgroup Objects
4036 /// Functions for working with OBJ Nodes
4037 
4038 /// @brief Get the object info on an OBJ node.
4039 ///
4040 /// @ingroup Objects
4041 ///
4042 /// @param[in] session
4043 /// The session of Houdini you are interacting with.
4044 /// See @ref HAPI_Sessions for more on sessions.
4045 /// Pass NULL to just use the default in-process session.
4046 /// <!-- default NULL -->
4047 ///
4048 /// @param[in] node_id
4049 /// The node id.
4050 ///
4051 /// @param[out] object_info
4052 /// The output ::HAPI_ObjectInfo.
4053 ///
4054 HAPI_DECL HAPI_GetObjectInfo( const HAPI_Session * session,
4055  HAPI_NodeId node_id,
4056  HAPI_ObjectInfo * object_info );
4057 
4058 /// @brief Get the tranform of an OBJ node.
4059 ///
4060 /// @ingroup Objects
4061 ///
4062 /// @param[in] session
4063 /// The session of Houdini you are interacting with.
4064 /// See @ref HAPI_Sessions for more on sessions.
4065 /// Pass NULL to just use the default in-process session.
4066 /// <!-- default NULL -->
4067 ///
4068 /// @param[in] node_id
4069 /// The object node id.
4070 ///
4071 /// @param[in] relative_to_node_id
4072 /// The object node id for the object to which the returned
4073 /// transform will be relative to. Pass -1 or the node_id
4074 /// to just get the object's local transform.
4075 ///
4076 /// @param[in] rst_order
4077 /// The order of application of translation, rotation and
4078 /// scale.
4079 ///
4080 /// @param[out] transform
4081 /// The output ::HAPI_Transform transform.
4082 ///
4084  HAPI_NodeId node_id,
4085  HAPI_NodeId relative_to_node_id,
4086  HAPI_RSTOrder rst_order,
4087  HAPI_Transform * transform );
4088 
4089 /// @brief Compose a list of child object nodes given a parent node id.
4090 ///
4091 /// Use the @c object_count returned by this function to get the
4092 /// ::HAPI_ObjectInfo structs for each child object using
4093 /// ::HAPI_GetComposedObjectList().
4094 ///
4095 /// Note, if not using the @c categories arg, this is equivalent to:
4096 /// @code
4097 /// HAPI_ComposeChildNodeList(
4098 /// session, parent_node_id,
4099 /// HAPI_NODETYPE_OBJ,
4100 /// HAPI_NODEFLAGS_OBJ_GEOMETRY,
4101 /// true, &object_count );
4102 /// @endcode
4103 ///
4104 /// @ingroup Objects
4105 ///
4106 /// @param[in] session
4107 /// The session of Houdini you are interacting with.
4108 /// See @ref HAPI_Sessions for more on sessions.
4109 /// Pass NULL to just use the default in-process session.
4110 /// <!-- default NULL -->
4111 ///
4112 /// @param[in] parent_node_id
4113 /// The parent node id.
4114 ///
4115 /// @param[in] categories
4116 /// (Optional) Lets you filter object nodes by their render
4117 /// categories. This is a standard OBJ parameter, usually
4118 /// under the Render > Shading tab. If an OBJ node does not
4119 /// have this parameter, one can always add it as a spare.
4120 ///
4121 /// The value of this string argument should be NULL if not
4122 /// used or a space-separated list of category names.
4123 /// Multiple category names will be treated as an AND op.
4124 /// <!-- default NULL -->
4125 ///
4126 /// @param[out] object_count
4127 /// The number of object nodes currently under the parent.
4128 /// Use this count with a call to
4129 /// ::HAPI_GetComposedObjectList() to get the object infos.
4130 ///
4132  HAPI_NodeId parent_node_id,
4133  const char * categories,
4134  int * object_count );
4135 
4136 /// @brief Fill an array of ::HAPI_ObjectInfo structs.
4137 ///
4138 /// This is best used with ::HAPI_ComposeObjectList() with.
4139 ///
4140 /// @ingroup Objects
4141 ///
4142 /// @param[in] session
4143 /// The session of Houdini you are interacting with.
4144 /// See @ref HAPI_Sessions for more on sessions.
4145 /// Pass NULL to just use the default in-process session.
4146 /// <!-- default NULL -->
4147 ///
4148 /// @param[in] parent_node_id
4149 /// The parent node id.
4150 ///
4151 /// @param[out] object_infos_array
4152 /// Array of ::HAPI_ObjectInfo at least the size of
4153 /// @c length.
4154 ///
4155 /// @param[in] start
4156 /// At least @c 0 and at most @c object_count returned by
4157 /// ::HAPI_ComposeObjectList().
4158 /// <!-- default 0 -->
4159 ///
4160 /// @param[in] length
4161 /// Given @c object_count returned by
4162 /// ::HAPI_ComposeObjectList(), @c length should be at least
4163 /// @c 0 and at most <tt>object_count - start</tt>.
4164 /// <!-- source ::HAPI_ComposeObjectList - start -->
4165 ///
4167  HAPI_NodeId parent_node_id,
4168  HAPI_ObjectInfo * object_infos_array,
4169  int start, int length );
4170 
4171 /// @brief Fill an array of ::HAPI_Transform structs.
4172 ///
4173 /// This is best used with ::HAPI_ComposeObjectList() with.
4174 ///
4175 /// Note that these transforms will be relative to the
4176 /// @c parent_node_id originally given to ::HAPI_ComposeObjectList()
4177 /// and expected to be the same with this call. If @c parent_node_id
4178 /// is not an OBJ node, the transforms will be given as they are on
4179 /// the object node itself.
4180 ///
4181 /// @ingroup Objects
4182 ///
4183 /// @param[in] session
4184 /// The session of Houdini you are interacting with.
4185 /// See @ref HAPI_Sessions for more on sessions.
4186 /// Pass NULL to just use the default in-process session.
4187 /// <!-- default NULL -->
4188 ///
4189 /// @param[in] parent_node_id
4190 /// The parent node id. The object transforms will be
4191 /// relative to this node unless this node is not an OBJ.
4192 ///
4193 /// @param[in] rst_order
4194 /// The order of application of translation, rotation and
4195 /// scale.
4196 ///
4197 /// @param[out] transform_array
4198 /// Array of ::HAPI_Transform at least the size of
4199 /// length.
4200 ///
4201 /// @param[in] start
4202 /// At least @c 0 and at most @c object_count returned by
4203 /// ::HAPI_ComposeObjectList().
4204 /// <!-- default 0 -->
4205 ///
4206 /// @param[in] length
4207 /// Given @c object_count returned by
4208 /// ::HAPI_ComposeObjectList(), @c length should be at least
4209 /// @c 0 and at most <tt>object_count - start</tt>.
4210 /// <!-- source ::HAPI_ComposeObjectList - start -->
4211 ///
4213  HAPI_NodeId parent_node_id,
4214  HAPI_RSTOrder rst_order,
4215  HAPI_Transform * transform_array,
4216  int start, int length );
4217 
4218 /// @brief Get the node ids for the objects being instanced by an
4219 /// Instance OBJ node.
4220 ///
4221 /// @ingroup Objects
4222 ///
4223 /// @param[in] session
4224 /// The session of Houdini you are interacting with.
4225 /// See @ref HAPI_Sessions for more on sessions.
4226 /// Pass NULL to just use the default in-process session.
4227 /// <!-- default NULL -->
4228 ///
4229 /// @param[in] object_node_id
4230 /// The object node id.
4231 ///
4232 /// @param[out] instanced_node_id_array
4233 /// Array of ::HAPI_NodeId at least the size of length.
4234 ///
4235 /// @param[in] start
4236 /// At least @c 0 and at most @c object_count returned by
4237 /// ::HAPI_ComposeObjectList().
4238 /// <!-- default 0 -->
4239 ///
4240 /// @param[in] length
4241 /// Given @c object_count returned by
4242 /// ::HAPI_ComposeObjectList(), @c length should be at least
4243 /// @c 0 and at most <tt>object_count - start</tt>.
4244 /// <!-- source ::HAPI_ComposeObjectList - start -->
4245 ///
4247  HAPI_NodeId object_node_id,
4248  HAPI_NodeId * instanced_node_id_array,
4249  int start, int length );
4250 
4251 /// @brief Fill an array of ::HAPI_Transform structs with the transforms
4252 /// of each instance of this instancer object for a given part.
4253 ///
4254 /// @ingroup Objects
4255 ///
4256 /// @param[in] session
4257 /// The session of Houdini you are interacting with.
4258 /// See @ref HAPI_Sessions for more on sessions.
4259 /// Pass NULL to just use the default in-process session.
4260 /// <!-- default NULL -->
4261 ///
4262 /// @param[in] node_id
4263 /// The object node id.
4264 ///
4265 /// @param[in] part_id
4266 /// The part id.
4267 ///
4268 /// @param[in] rst_order
4269 /// The order of application of translation, rotation and
4270 /// scale.
4271 ///
4272 /// @param[out] transforms_array
4273 /// Array of ::HAPI_Transform at least the size of length.
4274 ///
4275 /// @param[in] start
4276 /// First index of range. Must be at least 0 and at
4277 /// most ::HAPI_PartInfo::pointCount - 1. This is the 0th
4278 /// part of the display geo of the instancer object node.
4279 /// <!-- default 0 -->
4280 ///
4281 /// @param[in] length
4282 /// Must be at least 0 and at most
4283 /// ::HAPI_PartInfo::pointCount - @p start. This is the 0th
4284 /// part of the display geo of the instancer object node.
4285 /// <!-- source ::HAPI_PartInfo::pointCount - start -->
4286 ///
4288  HAPI_NodeId node_id,
4289  HAPI_PartId part_id,
4290  HAPI_RSTOrder rst_order,
4291  HAPI_Transform * transforms_array,
4292  int start, int length );
4293 
4294 /// @brief Set the transform of an individual object. Note that the object
4295 /// nodes have to either be editable or have their transform
4296 /// parameters exposed at the asset level. This won't work otherwise.
4297 ///
4298 /// @ingroup Objects
4299 ///
4300 /// @param[in] session
4301 /// The session of Houdini you are interacting with.
4302 /// See @ref HAPI_Sessions for more on sessions.
4303 /// Pass NULL to just use the default in-process session.
4304 /// <!-- default NULL -->
4305 ///
4306 /// @param[in] node_id
4307 /// The object node id.
4308 ///
4309 /// @param[in] trans
4310 /// A ::HAPI_TransformEuler that stores the transform.
4311 ///
4313  HAPI_NodeId node_id,
4314  const HAPI_TransformEuler * trans );
4315 
4316 /// @defgroup GeometryGetters Geometry Getters
4317 /// Functions for reading Geometry (SOP) data
4318 
4319 /// @brief Get the display geo (SOP) node inside an Object node. If there
4320 /// there are multiple display SOP nodes, only the first one is
4321 /// returned. If the node is a display SOP itself, even if a network,
4322 /// it will return its own geo info. If the node is a SOP but not
4323 /// a network and not the display SOP, this function will fail.
4324 ///
4325 /// The above implies that you can safely call this function on both
4326 /// OBJ and SOP asset nodes and get the same (equivalent) geometry
4327 /// display node back. SOP asset nodes will simply return themselves.
4328 ///
4329 /// @ingroup GeometryGetters
4330 ///
4331 /// @param[in] session
4332 /// The session of Houdini you are interacting with.
4333 /// See @ref HAPI_Sessions for more on sessions.
4334 /// Pass NULL to just use the default in-process session.
4335 /// <!-- default NULL -->
4336 ///
4337 /// @param[in] object_node_id
4338 /// The object node id.
4339 ///
4340 /// @param[out] geo_info
4341 /// ::HAPI_GeoInfo return value.
4342 ///
4344  HAPI_NodeId object_node_id,
4345  HAPI_GeoInfo * geo_info );
4346 
4347 /// @brief A helper method that gets the number of main geometry outputs inside
4348 /// an Object node or SOP node. If the node is an Object node, this
4349 /// method will return the cumulative number of geometry outputs for all
4350 /// geometry nodes that it contains. When searching for output geometry,
4351 /// this method will only consider subnetworks that have their display
4352 /// flag enabled.
4353 ///
4354 /// This method must be called before HAPI_GetOutputGeoInfos() is
4355 /// called.
4356 ///
4357 /// @ingroup GeometryGetters
4358 ///
4359 /// @param[in] session
4360 /// The session of Houdini you are interacting with.
4361 /// See @ref HAPI_Sessions for more on sessions.
4362 /// Pass NULL to just use the default in-process session.
4363 /// <!-- default NULL -->
4364 ///
4365 /// @param[in] node_id
4366 /// The node id of the Object or SOP node to get the geometry
4367 /// output count of.
4368 ///
4369 /// @param[out] count
4370 /// The number of geometry (SOP) outputs.
4372  HAPI_NodeId node_id,
4373  int* count);
4374 
4375 /// @brief Gets the geometry info structs (::HAPI_GeoInfo) for a node's
4376 /// main geometry outputs. This method can only be called after
4377 /// HAPI_GetOutputGeoCount() has been called with the same node id.
4378 ///
4379 /// @ingroup GeometryGetters
4380 ///
4381 /// @param[in] session
4382 /// The session of Houdini you are interacting with.
4383 /// See @ref HAPI_Sessions for more on sessions.
4384 /// Pass NULL to just use the default in-process session.
4385 /// <!-- default NULL -->
4386 ///
4387 /// @param[in] node_id
4388 /// The node id of the Object or SOP node to get the output
4389 /// geometry info structs (::HAPI_GeoInfo) for.
4390 ///
4391 /// @param[out] geo_infos_array
4392 /// Output array where the output geometry info structs will be
4393 /// stored. The size of the array must match the count argument
4394 /// returned by the HAPI_GetOutputGeoCount() method.
4395 ///
4396 /// @param[in] count
4397 /// Sanity check count. The count must be equal to the count
4398 /// returned by the HAPI_GetOutputGeoCount() method.
4400  HAPI_NodeId node_id,
4401  HAPI_GeoInfo* geo_infos_array,
4402  int count );
4403 
4404 /// @brief Get the geometry info struct (::HAPI_GeoInfo) on a SOP node.
4405 ///
4406 /// @ingroup GeometryGetters
4407 ///
4408 /// @param[in] session
4409 /// The session of Houdini you are interacting with.
4410 /// See @ref HAPI_Sessions for more on sessions.
4411 /// Pass NULL to just use the default in-process session.
4412 /// <!-- default NULL -->
4413 ///
4414 /// @param[in] node_id
4415 /// The node id.
4416 ///
4417 /// @param[out] geo_info
4418 /// ::HAPI_GeoInfo return value.
4419 ///
4420 HAPI_DECL HAPI_GetGeoInfo( const HAPI_Session * session,
4421  HAPI_NodeId node_id,
4422  HAPI_GeoInfo * geo_info );
4423 
4424 /// @brief Get a particular part info struct.
4425 ///
4426 /// @ingroup GeometryGetters
4427 ///
4428 /// @param[in] session
4429 /// The session of Houdini you are interacting with.
4430 /// See @ref HAPI_Sessions for more on sessions.
4431 /// Pass NULL to just use the default in-process session.
4432 /// <!-- default NULL -->
4433 ///
4434 /// @param[in] node_id
4435 /// The SOP node id.
4436 ///
4437 /// @param[in] part_id
4438 /// The part id.
4439 ///
4440 /// @param[out] part_info
4441 /// ::HAPI_PartInfo return value.
4442 ///
4443 HAPI_DECL HAPI_GetPartInfo( const HAPI_Session * session,
4444  HAPI_NodeId node_id,
4445  HAPI_PartId part_id,
4446  HAPI_PartInfo * part_info );
4447 
4448 
4449 /// @brief Gets the number of edges that belong to an edge group on a geometry
4450 /// part.
4451 ///
4452 /// @ingroup GeometryGetters
4453 ///
4454 /// @param[in] session
4455 /// The session of Houdini you are interacting with.
4456 /// See @ref HAPI_Sessions for more on sessions.
4457 /// Pass NULL to just use the default in-process session.
4458 /// <!-- default NULL -->
4459 ///
4460 /// @param[in] node_id
4461 /// The SOP node id.
4462 ///
4463 /// @param[in] part_id
4464 /// The part id.
4465 ///
4466 /// @param[in] group_name
4467 /// The name of the edge group.
4468 ///
4469 /// @param[out] edge_count
4470 /// The number of edges that belong to the group.
4471 ///
4473  HAPI_NodeId node_id,
4474  HAPI_PartId part_id,
4475  const char * group_name,
4476  int * edge_count );
4477 
4478 /// @brief Get the array of faces where the nth integer in the array is
4479 /// the number of vertices the nth face has.
4480 ///
4481 /// @ingroup GeometryGetters
4482 ///
4483 /// @param[in] session
4484 /// The session of Houdini you are interacting with.
4485 /// See @ref HAPI_Sessions for more on sessions.
4486 /// Pass NULL to just use the default in-process session.
4487 /// <!-- default NULL -->
4488 ///
4489 /// @param[in] node_id
4490 /// The node id.
4491 ///
4492 /// @param[in] part_id
4493 /// The part id.
4494 ///
4495 /// @param[out] face_counts_array
4496 /// An integer array at least the size of length.
4497 ///
4498 /// @param[in] start
4499 /// First index of range. Must be at least 0 and at
4500 /// most ::HAPI_PartInfo::faceCount - 1.
4501 /// <!-- default 0 -->
4502 ///
4503 /// @param[in] length
4504 /// Must be at least 0 and at most
4505 /// ::HAPI_PartInfo::faceCount - @p start.
4506 /// <!-- source ::HAPI_PartInfo::faceCount - start -->
4507 ///
4508 HAPI_DECL HAPI_GetFaceCounts( const HAPI_Session * session,
4509  HAPI_NodeId node_id,
4510  HAPI_PartId part_id,
4511  int * face_counts_array,
4512  int start, int length );
4513 
4514 /// @brief Get array containing the vertex-point associations where the
4515 /// ith element in the array is the point index the ith vertex
4516 /// associates with.
4517 ///
4518 /// @ingroup GeometryGetters
4519 ///
4520 /// @param[in] session
4521 /// The session of Houdini you are interacting with.
4522 /// See @ref HAPI_Sessions for more on sessions.
4523 /// Pass NULL to just use the default in-process session.
4524 /// <!-- default NULL -->
4525 ///
4526 /// @param[in] node_id
4527 /// The node id.
4528 ///
4529 /// @param[in] part_id
4530 /// The part id.
4531 ///
4532 /// @param[out] vertex_list_array
4533 /// An integer array at least the size of length.
4534 ///
4535 /// @param[in] start
4536 /// First index of range. Must be at least 0 and at
4537 /// most ::HAPI_PartInfo::vertexCount - 1.
4538 /// <!-- default 0 -->
4539 ///
4540 /// @param[in] length
4541 /// Must be at least 0 and at most
4542 /// ::HAPI_PartInfo::vertexCount - @p start.
4543 /// <!-- source ::HAPI_PartInfo::vertexCount - start -->
4544 ///
4545 HAPI_DECL HAPI_GetVertexList( const HAPI_Session * session,
4546  HAPI_NodeId node_id,
4547  HAPI_PartId part_id,
4548  int * vertex_list_array,
4549  int start, int length );
4550 
4551 /// @defgroup Attributes
4552 /// Functions for working with attributes.
4553 
4554 /// @brief Get the attribute info struct for the attribute specified by name.
4555 ///
4556 /// @ingroup Attributes
4557 ///
4558 /// @param[in] session
4559 /// The session of Houdini you are interacting with.
4560 /// See @ref HAPI_Sessions for more on sessions.
4561 /// Pass NULL to just use the default in-process session.
4562 /// <!-- default NULL -->
4563 ///
4564 /// @param[in] node_id
4565 /// The node id.
4566 ///
4567 /// @param[in] part_id
4568 /// The part id.
4569 ///
4570 /// @param[in] name
4571 /// Attribute name.
4572 ///
4573 /// @param[in] owner
4574 /// Attribute owner.
4575 ///
4576 /// @param[out] attr_info
4577 /// ::HAPI_AttributeInfo to be filled. Check
4578 /// ::HAPI_AttributeInfo::exists to see if this attribute
4579 /// exists.
4580 ///
4582  HAPI_NodeId node_id,
4583  HAPI_PartId part_id,
4584  const char * name,
4585  HAPI_AttributeOwner owner,
4586  HAPI_AttributeInfo * attr_info );
4587 
4588 /// @brief Get list of attribute names by attribute owner. Note that the
4589 /// name string handles are only valid until the next time this
4590 /// function is called.
4591 ///
4592 /// @ingroup Attributes
4593 ///
4594 /// @param[in] session
4595 /// The session of Houdini you are interacting with.
4596 /// See @ref HAPI_Sessions for more on sessions.
4597 /// Pass NULL to just use the default in-process session.
4598 /// <!-- default NULL -->
4599 ///
4600 /// @param[in] node_id
4601 /// The node id.
4602 ///
4603 /// @param[in] part_id
4604 /// The part id.
4605 ///
4606 /// @param[in] owner
4607 /// The ::HAPI_AttributeOwner enum value specifying the
4608 /// owner of the attribute.
4609 ///
4610 /// @param[out] attribute_names_array
4611 /// Array of ints (string handles) to house the
4612 /// attribute names. Should be exactly the size of the
4613 /// appropriate attribute owner type count
4614 /// in ::HAPI_PartInfo.
4615 ///
4616 /// @param[in] count
4617 /// Sanity check count. Must be equal to the appropriate
4618 /// attribute owner type count in ::HAPI_PartInfo.
4619 ///
4621  HAPI_NodeId node_id,
4622  HAPI_PartId part_id,
4623  HAPI_AttributeOwner owner,
4624  HAPI_StringHandle * attribute_names_array,
4625  int count );
4626 
4627 /// @brief Get attribute integer data.
4628 ///
4629 /// @ingroup GeometryGetters Attributes
4630 ///
4631 /// @param[in] session
4632 /// The session of Houdini you are interacting with.
4633 /// See @ref HAPI_Sessions for more on sessions.
4634 /// Pass NULL to just use the default in-process session.
4635 /// <!-- default NULL -->
4636 ///
4637 /// @param[in] node_id
4638 /// The node id.
4639 ///
4640 /// @param[in] part_id
4641 /// The part id.
4642 ///
4643 /// @param[in] name
4644 /// Attribute name.
4645 ///
4646 /// @param[in] attr_info
4647 /// ::HAPI_AttributeInfo used as input for what tuple size.
4648 /// you want. Also contains some sanity checks like
4649 /// data type. Generally should be the same struct
4650 /// returned by ::HAPI_GetAttributeInfo().
4651 ///
4652 /// @param[in] stride
4653 /// Specifies how many items to skip over for each element.
4654 /// With a stride of -1, the stride will be set to
4655 /// @c attr_info->tuple_size. Otherwise, the stride will be
4656 /// set to the maximum of @c attr_info->tuple_size and
4657 /// @c stride.
4658 ///
4659 /// @param[out] data_array
4660 /// An integer array at least the size of
4661 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
4662 ///
4663 /// @param[in] start
4664 /// First index of range. Must be at least 0 and at
4665 /// most ::HAPI_AttributeInfo::count - 1.
4666 /// <!-- default 0 -->
4667 ///
4668 /// @param[in] length
4669 /// Must be at least 0 and at most
4670 /// ::HAPI_AttributeInfo::count - @p start.
4671 /// Note, if 0 is passed for length, the function will just
4672 /// do nothing and return ::HAPI_RESULT_SUCCESS.
4673 /// <!-- source ::HAPI_AttributeInfo::count - start -->
4674 ///
4676  HAPI_NodeId node_id,
4677  HAPI_PartId part_id,
4678  const char * name,
4679  HAPI_AttributeInfo * attr_info,
4680  int stride,
4681  int * data_array,
4682  int start, int length );
4683 
4684 /// @brief Get array attribute integer data.
4685 /// Each entry in an array attribute can have varying array lengths.
4686 /// Therefore the array values are returned as a flat array, with
4687 /// another sizes array containing the lengths of each array entry.
4688 ///
4689 /// @ingroup GeometryGetters Attributes
4690 ///
4691 /// @param[in] session
4692 /// The session of Houdini you are interacting with.
4693 /// See @ref HAPI_Sessions for more on sessions.
4694 /// Pass NULL to just use the default in-process session.
4695 /// <!-- default NULL -->
4696 ///
4697 /// @param[in] node_id
4698 /// The node id.
4699 ///
4700 /// @param[in] part_id
4701 /// The part id.
4702 ///
4703 /// @param[in] name
4704 /// Attribute name.
4705 ///
4706 /// @param[in] attr_info
4707 /// ::HAPI_AttributeInfo used as input for what tuple size.
4708 /// you want. Also contains some sanity checks like
4709 /// data type. Generally should be the same struct
4710 /// returned by ::HAPI_GetAttributeInfo().
4711 ///
4712 /// @param[out] data_fixed_array
4713 /// An integer array at least the size of
4714 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
4715 ///
4716 /// @param[in] data_fixed_length
4717 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
4718 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
4719 ///
4720 /// @param[out] sizes_fixed_array
4721 /// An integer array at least the size of
4722 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
4723 /// <!-- source ::HAPI_AttributeInfo::count -->
4724 ///
4725 /// @param[in] start
4726 /// First index of range. Must be at least 0 and at
4727 /// most ::HAPI_AttributeInfo::count - 1.
4728 /// <!-- default 0 -->
4729 ///
4730 /// @param[in] sizes_fixed_length
4731 /// Must be at least 0 and at most
4732 /// ::HAPI_AttributeInfo::count - @p start.
4733 /// Note, if 0 is passed for length, the function will just
4734 /// do nothing and return ::HAPI_RESULT_SUCCESS.
4735 /// <!-- source ::HAPI_AttributeInfo::count - start -->
4736 ///
4738  HAPI_NodeId node_id,
4739  HAPI_PartId part_id,
4740  const char * name,
4741  HAPI_AttributeInfo * attr_info,
4742  int * data_fixed_array,
4743  int data_fixed_length,
4744  int * sizes_fixed_array,
4745  int start, int sizes_fixed_length );
4746 
4747 /// @brief Get attribute unsigned 8-bit integer data.
4748 ///
4749 /// @ingroup GeometryGetters Attributes
4750 ///
4751 /// @param[in] session
4752 /// The session of Houdini you are interacting with.
4753 /// See @ref HAPI_Sessions for more on sessions.
4754 /// Pass NULL to just use the default in-process session.
4755 /// <!-- default NULL -->
4756 ///
4757 /// @param[in] node_id
4758 /// The node id.
4759 ///
4760 /// @param[in] part_id
4761 /// The part id.
4762 ///
4763 /// @param[in] name
4764 /// Attribute name.
4765 ///
4766 /// @param[in] attr_info
4767 /// ::HAPI_AttributeInfo used as input for what tuple size.
4768 /// you want. Also contains some sanity checks like
4769 /// data type. Generally should be the same struct
4770 /// returned by ::HAPI_GetAttributeInfo().
4771 ///
4772 /// @param[in] stride
4773 /// Specifies how many items to skip over for each element.
4774 /// With a stride of -1, the stride will be set to
4775 /// @c attr_info->tuple_size. Otherwise, the stride will be
4776 /// set to the maximum of @c attr_info->tuple_size and
4777 /// @c stride.
4778 ///
4779 /// @param[out] data_array
4780 /// An unsigned 8-bit integer array at least the size of
4781 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
4782 ///
4783 /// @param[in] start
4784 /// First index of range. Must be at least 0 and at
4785 /// most ::HAPI_AttributeInfo::count - 1.
4786 /// <!-- default 0 -->
4787 ///
4788 /// @param[in] length
4789 /// Must be at least 0 and at most
4790 /// ::HAPI_AttributeInfo::count - @p start.
4791 /// Note, if 0 is passed for length, the function will just
4792 /// do nothing and return ::HAPI_RESULT_SUCCESS.
4793 /// <!-- source ::HAPI_AttributeInfo::count - start -->
4794 ///
4796  HAPI_NodeId node_id,
4797  HAPI_PartId part_id,
4798  const char * name,
4799  HAPI_AttributeInfo * attr_info,
4800  int stride,
4801  HAPI_UInt8 * data_array,
4802  int start, int length );
4803 
4804 /// @brief Get array attribute unsigned 8-bit integer data.
4805 /// Each entry in an array attribute can have varying array lengths.
4806 /// Therefore the array values are returned as a flat array, with
4807 /// another sizes array containing the lengths of each array entry.
4808 ///
4809 /// @ingroup GeometryGetters Attributes
4810 ///
4811 /// @param[in] session
4812 /// The session of Houdini you are interacting with.
4813 /// See @ref HAPI_Sessions for more on sessions.
4814 /// Pass NULL to just use the default in-process session.
4815 /// <!-- default NULL -->
4816 ///
4817 /// @param[in] node_id
4818 /// The node id.
4819 ///
4820 /// @param[in] part_id
4821 /// The part id.
4822 ///
4823 /// @param[in] name
4824 /// Attribute name.
4825 ///
4826 /// @param[in] attr_info
4827 /// ::HAPI_AttributeInfo used as input for what tuple size.
4828 /// you want. Also contains some sanity checks like
4829 /// data type. Generally should be the same struct
4830 /// returned by ::HAPI_GetAttributeInfo().
4831 ///
4832 /// @param[out] data_fixed_array
4833 /// An unsigned 8-bit integer array at least the size of
4834 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
4835 ///
4836 /// @param[in] data_fixed_length
4837 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
4838 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
4839 ///
4840 /// @param[out] sizes_fixed_array
4841 /// An integer array at least the size of
4842 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
4843 ///
4844 /// @param[in] start
4845 /// First index of range. Must be at least 0 and at
4846 /// most ::HAPI_AttributeInfo::count - 1.
4847 /// <!-- default 0 -->
4848 ///
4849 /// @param[in] sizes_fixed_length
4850 /// Must be at least 0 and at most
4851 /// ::HAPI_AttributeInfo::count - @p start.
4852 /// Note, if 0 is passed for length, the function will just
4853 /// do nothing and return ::HAPI_RESULT_SUCCESS.
4854 /// <!-- source ::HAPI_AttributeInfo::count - start -->
4855 ///
4857  HAPI_NodeId node_id,
4858  HAPI_PartId part_id,
4859  const char * name,
4860  HAPI_AttributeInfo * attr_info,
4861  HAPI_UInt8 * data_fixed_array,
4862  int data_fixed_length,
4863  int * sizes_fixed_array,
4864  int start, int sizes_fixed_length );
4865 
4866 /// @brief Get attribute 8-bit integer data.
4867 ///
4868 /// @ingroup GeometryGetters Attributes
4869 ///
4870 /// @param[in] session
4871 /// The session of Houdini you are interacting with.
4872 /// See @ref HAPI_Sessions for more on sessions.
4873 /// Pass NULL to just use the default in-process session.
4874 /// <!-- default NULL -->
4875 ///
4876 /// @param[in] node_id
4877 /// The node id.
4878 ///
4879 /// @param[in] part_id
4880 /// The part id.
4881 ///
4882 /// @param[in] name
4883 /// Attribute name.
4884 ///
4885 /// @param[in] attr_info
4886 /// ::HAPI_AttributeInfo used as input for what tuple size.
4887 /// you want. Also contains some sanity checks like
4888 /// data type. Generally should be the same struct
4889 /// returned by ::HAPI_GetAttributeInfo().
4890 ///
4891 /// @param[in] stride
4892 /// Specifies how many items to skip over for each element.
4893 /// With a stride of -1, the stride will be set to
4894 /// @c attr_info->tuple_size. Otherwise, the stride will be
4895 /// set to the maximum of @c attr_info->tuple_size and
4896 /// @c stride.
4897 ///
4898 /// @param[out] data_array
4899 /// An 8-bit integer array at least the size of
4900 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
4901 ///
4902 /// @param[in] start
4903 /// First index of range. Must be at least 0 and at
4904 /// most ::HAPI_AttributeInfo::count - 1.
4905 /// <!-- default 0 -->
4906 ///
4907 /// @param[in] length
4908 /// Must be at least 0 and at most
4909 /// ::HAPI_AttributeInfo::count - @p start.
4910 /// Note, if 0 is passed for length, the function will just
4911 /// do nothing and return ::HAPI_RESULT_SUCCESS.
4912 /// <!-- source ::HAPI_AttributeInfo::count - start -->
4913 ///
4915  HAPI_NodeId node_id,
4916  HAPI_PartId part_id,
4917  const char * name,
4918  HAPI_AttributeInfo * attr_info,
4919  int stride,
4920  HAPI_Int8 * data_array,
4921  int start, int length );
4922 
4923 /// @brief Get array attribute 8-bit integer data.
4924 /// Each entry in an array attribute can have varying array lengths.
4925 /// Therefore the array values are returned as a flat array, with
4926 /// another sizes array containing the lengths of each array entry.
4927 ///
4928 /// @ingroup GeometryGetters Attributes
4929 ///
4930 /// @param[in] session
4931 /// The session of Houdini you are interacting with.
4932 /// See @ref HAPI_Sessions for more on sessions.
4933 /// Pass NULL to just use the default in-process session.
4934 /// <!-- default NULL -->
4935 ///
4936 /// @param[in] node_id
4937 /// The node id.
4938 ///
4939 /// @param[in] part_id
4940 /// The part id.
4941 ///
4942 /// @param[in] name
4943 /// Attribute name.
4944 ///
4945 /// @param[in] attr_info
4946 /// ::HAPI_AttributeInfo used as input for what tuple size.
4947 /// you want. Also contains some sanity checks like
4948 /// data type. Generally should be the same struct
4949 /// returned by ::HAPI_GetAttributeInfo().
4950 ///
4951 /// @param[out] data_fixed_array
4952 /// An 8-bit integer array at least the size of
4953 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
4954 ///
4955 /// @param[in] data_fixed_length
4956 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
4957 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
4958 ///
4959 /// @param[out] sizes_fixed_array
4960 /// An integer array at least the size of
4961 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
4962 ///
4963 /// @param[in] start
4964 /// First index of range. Must be at least 0 and at
4965 /// most ::HAPI_AttributeInfo::count - 1.
4966 /// <!-- default 0 -->
4967 ///
4968 /// @param[in] sizes_fixed_length
4969 /// Must be at least 0 and at most
4970 /// ::HAPI_AttributeInfo::count - @p start.
4971 /// Note, if 0 is passed for length, the function will just
4972 /// do nothing and return ::HAPI_RESULT_SUCCESS.
4973 /// <!-- source ::HAPI_AttributeInfo::count - start -->
4974 ///
4976  HAPI_NodeId node_id,
4977  HAPI_PartId part_id,
4978  const char * name,
4979  HAPI_AttributeInfo * attr_info,
4980  HAPI_Int8 * data_fixed_array,
4981  int data_fixed_length,
4982  int * sizes_fixed_array,
4983  int start, int sizes_fixed_length );
4984 
4985 /// @brief Get attribute 16-bit integer data.
4986 ///
4987 /// @ingroup GeometryGetters Attributes
4988 ///
4989 /// @param[in] session
4990 /// The session of Houdini you are interacting with.
4991 /// See @ref HAPI_Sessions for more on sessions.
4992 /// Pass NULL to just use the default in-process session.
4993 /// <!-- default NULL -->
4994 ///
4995 /// @param[in] node_id
4996 /// The node id.
4997 ///
4998 /// @param[in] part_id
4999 /// The part id.
5000 ///
5001 /// @param[in] name
5002 /// Attribute name.
5003 ///
5004 /// @param[in] attr_info
5005 /// ::HAPI_AttributeInfo used as input for what tuple size.
5006 /// you want. Also contains some sanity checks like
5007 /// data type. Generally should be the same struct
5008 /// returned by ::HAPI_GetAttributeInfo().
5009 ///
5010 /// @param[in] stride
5011 /// Specifies how many items to skip over for each element.
5012 /// With a stride of -1, the stride will be set to
5013 /// @c attr_info->tuple_size. Otherwise, the stride will be
5014 /// set to the maximum of @c attr_info->tuple_size and
5015 /// @c stride.
5016 ///
5017 /// @param[out] data_array
5018 /// An 16-bit integer array at least the size of
5019 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
5020 ///
5021 /// @param[in] start
5022 /// First index of range. Must be at least 0 and at
5023 /// most ::HAPI_AttributeInfo::count - 1.
5024 /// <!-- default 0 -->
5025 ///
5026 /// @param[in] length
5027 /// Must be at least 0 and at most
5028 /// ::HAPI_AttributeInfo::count - @p start.
5029 /// Note, if 0 is passed for length, the function will just
5030 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5031 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5032 ///
5034  HAPI_NodeId node_id,
5035  HAPI_PartId part_id,
5036  const char * name,
5037  HAPI_AttributeInfo * attr_info,
5038  int stride,
5039  HAPI_Int16 * data_array,
5040  int start, int length );
5041 
5042 /// @brief Get array attribute 16-bit integer data.
5043 /// Each entry in an array attribute can have varying array lengths.
5044 /// Therefore the array values are returned as a flat array, with
5045 /// another sizes array containing the lengths of each array entry.
5046 ///
5047 /// @ingroup GeometryGetters Attributes
5048 ///
5049 /// @param[in] session
5050 /// The session of Houdini you are interacting with.
5051 /// See @ref HAPI_Sessions for more on sessions.
5052 /// Pass NULL to just use the default in-process session.
5053 /// <!-- default NULL -->
5054 ///
5055 /// @param[in] node_id
5056 /// The node id.
5057 ///
5058 /// @param[in] part_id
5059 /// The part id.
5060 ///
5061 /// @param[in] name
5062 /// Attribute name.
5063 ///
5064 /// @param[in] attr_info
5065 /// ::HAPI_AttributeInfo used as input for what tuple size.
5066 /// you want. Also contains some sanity checks like
5067 /// data type. Generally should be the same struct
5068 /// returned by ::HAPI_GetAttributeInfo().
5069 ///
5070 /// @param[out] data_fixed_array
5071 /// An 16-bit integer array at least the size of
5072 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5073 ///
5074 /// @param[in] data_fixed_length
5075 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5076 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
5077 ///
5078 /// @param[out] sizes_fixed_array
5079 /// An integer array at least the size of
5080 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
5081 ///
5082 /// @param[in] start
5083 /// First index of range. Must be at least 0 and at
5084 /// most ::HAPI_AttributeInfo::count - 1.
5085 /// <!-- default 0 -->
5086 ///
5087 /// @param[in] sizes_fixed_length
5088 /// Must be at least 0 and at most
5089 /// ::HAPI_AttributeInfo::count - @p start.
5090 /// Note, if 0 is passed for length, the function will just
5091 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5092 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5093 ///
5095  HAPI_NodeId node_id,
5096  HAPI_PartId part_id,
5097  const char * name,
5098  HAPI_AttributeInfo * attr_info,
5099  HAPI_Int16 * data_fixed_array,
5100  int data_fixed_length,
5101  int * sizes_fixed_array,
5102  int start, int sizes_fixed_length );
5103 
5104 /// @brief Get attribute 64-bit integer data.
5105 ///
5106 /// @ingroup GeometryGetters Attributes
5107 ///
5108 /// @param[in] session
5109 /// The session of Houdini you are interacting with.
5110 /// See @ref HAPI_Sessions for more on sessions.
5111 /// Pass NULL to just use the default in-process session.
5112 /// <!-- default NULL -->
5113 ///
5114 /// @param[in] node_id
5115 /// The node id.
5116 ///
5117 /// @param[in] part_id
5118 /// The part id.
5119 ///
5120 /// @param[in] name
5121 /// Attribute name.
5122 ///
5123 /// @param[in] attr_info
5124 /// ::HAPI_AttributeInfo used as input for what tuple size.
5125 /// you want. Also contains some sanity checks like
5126 /// data type. Generally should be the same struct
5127 /// returned by ::HAPI_GetAttributeInfo().
5128 ///
5129 /// @param[in] stride
5130 /// Specifies how many items to skip over for each element.
5131 /// With a stride of -1, the stride will be set to
5132 /// @c attr_info->tuple_size. Otherwise, the stride will be
5133 /// set to the maximum of @c attr_info->tuple_size and
5134 /// @c stride.
5135 ///
5136 /// @param[out] data_array
5137 /// An 64-bit integer array at least the size of
5138 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
5139 ///
5140 /// @param[in] start
5141 /// First index of range. Must be at least 0 and at
5142 /// most ::HAPI_AttributeInfo::count - 1.
5143 /// <!-- default 0 -->
5144 ///
5145 /// @param[in] length
5146 /// Must be at least 0 and at most
5147 /// ::HAPI_AttributeInfo::count - @p start.
5148 /// Note, if 0 is passed for length, the function will just
5149 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5150 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5151 ///
5153  HAPI_NodeId node_id,
5154  HAPI_PartId part_id,
5155  const char * name,
5156  HAPI_AttributeInfo * attr_info,
5157  int stride,
5158  HAPI_Int64 * data_array,
5159  int start, int length );
5160 
5161 /// @brief Get array attribute 64-bit integer data.
5162 /// Each entry in an array attribute can have varying array lengths.
5163 /// Therefore the array values are returned as a flat array, with
5164 /// another sizes array containing the lengths of each array entry.
5165 ///
5166 /// @ingroup GeometryGetters Attributes
5167 ///
5168 /// @param[in] session
5169 /// The session of Houdini you are interacting with.
5170 /// See @ref HAPI_Sessions for more on sessions.
5171 /// Pass NULL to just use the default in-process session.
5172 /// <!-- default NULL -->
5173 ///
5174 /// @param[in] node_id
5175 /// The node id.
5176 ///
5177 /// @param[in] part_id
5178 /// The part id.
5179 ///
5180 /// @param[in] name
5181 /// Attribute name.
5182 ///
5183 /// @param[in] attr_info
5184 /// ::HAPI_AttributeInfo used as input for what tuple size.
5185 /// you want. Also contains some sanity checks like
5186 /// data type. Generally should be the same struct
5187 /// returned by ::HAPI_GetAttributeInfo().
5188 ///
5189 /// @param[out] data_fixed_array
5190 /// An 64-bit integer array at least the size of
5191 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5192 ///
5193 /// @param[in] data_fixed_length
5194 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5195 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
5196 ///
5197 /// @param[out] sizes_fixed_array
5198 /// An integer array at least the size of
5199 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
5200 ///
5201 /// @param[in] start
5202 /// First index of range. Must be at least 0 and at
5203 /// most ::HAPI_AttributeInfo::count - 1.
5204 /// <!-- default 0 -->
5205 ///
5206 /// @param[in] sizes_fixed_length
5207 /// Must be at least 0 and at most
5208 /// ::HAPI_AttributeInfo::count - @p start.
5209 /// Note, if 0 is passed for length, the function will just
5210 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5211 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5212 ///
5214  HAPI_NodeId node_id,
5215  HAPI_PartId part_id,
5216  const char * name,
5217  HAPI_AttributeInfo * attr_info,
5218  HAPI_Int64 * data_fixed_array,
5219  int data_fixed_length,
5220  int * sizes_fixed_array,
5221  int start, int sizes_fixed_length );
5222 
5223 /// @brief Get attribute float data.
5224 ///
5225 /// @ingroup GeometryGetters Attributes
5226 ///
5227 /// @param[in] session
5228 /// The session of Houdini you are interacting with.
5229 /// See @ref HAPI_Sessions for more on sessions.
5230 /// Pass NULL to just use the default in-process session.
5231 /// <!-- default NULL -->
5232 ///
5233 /// @param[in] node_id
5234 /// The node id.
5235 ///
5236 /// @param[in] part_id
5237 /// The part id.
5238 ///
5239 /// @param[in] name
5240 /// Attribute name.
5241 ///
5242 /// @param[in] attr_info
5243 /// ::HAPI_AttributeInfo used as input for what tuple size.
5244 /// you want. Also contains some sanity checks like
5245 /// data type. Generally should be the same struct
5246 /// returned by ::HAPI_GetAttributeInfo().
5247 ///
5248 /// @param[in] stride
5249 /// Specifies how many items to skip over for each element.
5250 /// With a stride of -1, the stride will be set to
5251 /// @c attr_info->tuple_size. Otherwise, the stride will be
5252 /// set to the maximum of @c attr_info->tuple_size and
5253 /// @c stride.
5254 ///
5255 /// @param[out] data_array
5256 /// An float array at least the size of
5257 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
5258 ///
5259 /// @param[in] start
5260 /// First index of range. Must be at least 0 and at
5261 /// most ::HAPI_AttributeInfo::count - 1.
5262 /// <!-- default 0 -->
5263 ///
5264 /// @param[in] length
5265 /// Must be at least 0 and at most
5266 /// ::HAPI_AttributeInfo::count - @p start.
5267 /// Note, if 0 is passed for length, the function will just
5268 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5269 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5270 ///
5272  HAPI_NodeId node_id,
5273  HAPI_PartId part_id,
5274  const char * name,
5275  HAPI_AttributeInfo * attr_info,
5276  int stride,
5277  float * data_array,
5278  int start, int length );
5279 
5280 /// @brief Get array attribute float data.
5281 /// Each entry in an array attribute can have varying array lengths.
5282 /// Therefore the array values are returned as a flat array, with
5283 /// another sizes array containing the lengths of each array entry.
5284 ///
5285 /// @ingroup GeometryGetters Attributes
5286 ///
5287 /// @param[in] session
5288 /// The session of Houdini you are interacting with.
5289 /// See @ref HAPI_Sessions for more on sessions.
5290 /// Pass NULL to just use the default in-process session.
5291 /// <!-- default NULL -->
5292 ///
5293 /// @param[in] node_id
5294 /// The node id.
5295 ///
5296 /// @param[in] part_id
5297 /// The part id.
5298 ///
5299 /// @param[in] name
5300 /// Attribute name.
5301 ///
5302 /// @param[in] attr_info
5303 /// ::HAPI_AttributeInfo used as input for what tuple size.
5304 /// you want. Also contains some sanity checks like
5305 /// data type. Generally should be the same struct
5306 /// returned by ::HAPI_GetAttributeInfo().
5307 ///
5308 /// @param[out] data_fixed_array
5309 /// An float array at least the size of
5310 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5311 ///
5312 /// @param[in] data_fixed_length
5313 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5314 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
5315 ///
5316 /// @param[out] sizes_fixed_array
5317 /// An integer array at least the size of
5318 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
5319 ///
5320 /// @param[in] start
5321 /// First index of range. Must be at least 0 and at
5322 /// most ::HAPI_AttributeInfo::count - 1.
5323 /// <!-- default 0 -->
5324 ///
5325 /// @param[in] sizes_fixed_length
5326 /// Must be at least 0 and at most
5327 /// ::HAPI_AttributeInfo::count - @p start.
5328 /// Note, if 0 is passed for length, the function will just
5329 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5330 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5331 ///
5333  HAPI_NodeId node_id,
5334  HAPI_PartId part_id,
5335  const char * name,
5336  HAPI_AttributeInfo * attr_info,
5337  float * data_fixed_array,
5338  int data_fixed_length,
5339  int * sizes_fixed_array,
5340  int start, int sizes_fixed_length );
5341 
5342 /// @brief Get 64-bit attribute float data.
5343 ///
5344 /// @ingroup GeometryGetters Attributes
5345 ///
5346 /// @param[in] session
5347 /// The session of Houdini you are interacting with.
5348 /// See @ref HAPI_Sessions for more on sessions.
5349 /// Pass NULL to just use the default in-process session.
5350 /// <!-- default NULL -->
5351 ///
5352 /// @param[in] node_id
5353 /// The node id.
5354 ///
5355 /// @param[in] part_id
5356 /// The part id.
5357 ///
5358 /// @param[in] name
5359 /// Attribute name.
5360 ///
5361 /// @param[in] attr_info
5362 /// ::HAPI_AttributeInfo used as input for what tuple size.
5363 /// you want. Also contains some sanity checks like
5364 /// data type. Generally should be the same struct
5365 /// returned by ::HAPI_GetAttributeInfo().
5366 ///
5367 /// @param[in] stride
5368 /// Specifies how many items to skip over for each element.
5369 /// With a stride of -1, the stride will be set to
5370 /// @c attr_info->tuple_size. Otherwise, the stride will be
5371 /// set to the maximum of @c attr_info->tuple_size and
5372 /// @c stride.
5373 ///
5374 /// @param[out] data_array
5375 /// An 64-bit float array at least the size of
5376 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
5377 ///
5378 /// @param[in] start
5379 /// First index of range. Must be at least 0 and at
5380 /// most ::HAPI_AttributeInfo::count - 1.
5381 /// <!-- default 0 -->
5382 ///
5383 /// @param[in] length
5384 /// Must be at least 0 and at most
5385 /// ::HAPI_AttributeInfo::count - @p start.
5386 /// Note, if 0 is passed for length, the function will just
5387 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5388 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5389 ///
5391  HAPI_NodeId node_id,
5392  HAPI_PartId part_id,
5393  const char * name,
5394  HAPI_AttributeInfo * attr_info,
5395  int stride,
5396  double * data_array,
5397  int start, int length );
5398 
5399 /// @brief Get array attribute 64-bit float data.
5400 /// Each entry in an array attribute can have varying array lengths.
5401 /// Therefore the array values are returned as a flat array, with
5402 /// another sizes array containing the lengths of each array entry.
5403 ///
5404 /// @ingroup GeometryGetters Attributes
5405 ///
5406 /// @param[in] session
5407 /// The session of Houdini you are interacting with.
5408 /// See @ref HAPI_Sessions for more on sessions.
5409 /// Pass NULL to just use the default in-process session.
5410 /// <!-- default NULL -->
5411 ///
5412 /// @param[in] node_id
5413 /// The node id.
5414 ///
5415 /// @param[in] part_id
5416 /// The part id.
5417 ///
5418 /// @param[in] name
5419 /// Attribute name.
5420 ///
5421 /// @param[in] attr_info
5422 /// ::HAPI_AttributeInfo used as input for the.
5423 /// totalArrayElements. Also contains some sanity checks like
5424 /// data type. Generally should be the same struct
5425 /// returned by ::HAPI_GetAttributeInfo().
5426 ///
5427 /// @param[out] data_fixed_array
5428 /// An 64-bit float array at least the size of
5429 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5430 ///
5431 /// @param[in] data_fixed_length
5432 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5433 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
5434 ///
5435 /// @param[out] sizes_fixed_array
5436 /// An integer array at least the size of
5437 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
5438 ///
5439 /// @param[in] start
5440 /// First index of range. Must be at least 0 and at
5441 /// most ::HAPI_AttributeInfo::count - 1.
5442 /// <!-- default 0 -->
5443 ///
5444 /// @param[in] sizes_fixed_length
5445 /// Must be at least 0 and at most
5446 /// ::HAPI_AttributeInfo::count - @p start.
5447 /// Note, if 0 is passed for length, the function will just
5448 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5449 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5450 ///
5452  HAPI_NodeId node_id,
5453  HAPI_PartId part_id,
5454  const char * name,
5455  HAPI_AttributeInfo * attr_info,
5456  double * data_fixed_array,
5457  int data_fixed_length,
5458  int * sizes_fixed_array,
5459  int start, int sizes_fixed_length );
5460 
5461 /// @brief Get attribute string data. Note that the string handles
5462 /// returned are only valid until the next time this function
5463 /// is called.
5464 ///
5465 /// @ingroup GeometryGetters Attributes
5466 ///
5467 /// @param[in] session
5468 /// The session of Houdini you are interacting with.
5469 /// See @ref HAPI_Sessions for more on sessions.
5470 /// Pass NULL to just use the default in-process session.
5471 /// <!-- default NULL -->
5472 ///
5473 /// @param[in] node_id
5474 /// The node id.
5475 ///
5476 /// @param[in] part_id
5477 /// The part id.
5478 ///
5479 /// @param[in] name
5480 /// Attribute name.
5481 ///
5482 /// @param[in] attr_info
5483 /// ::HAPI_AttributeInfo used as input for what tuple size.
5484 /// you want. Also contains some sanity checks like
5485 /// data type. Generally should be the same struct
5486 /// returned by ::HAPI_GetAttributeInfo().
5487 ///
5488 /// @param[out] data_array
5489 /// An ::HAPI_StringHandle array at least the size of
5490 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
5491 ///
5492 /// @param[in] start
5493 /// First index of range. Must be at least 0 and at
5494 /// most ::HAPI_AttributeInfo::count - 1.
5495 /// <!-- default 0 -->
5496 ///
5497 /// @param[in] length
5498 /// Must be at least 0 and at most
5499 /// ::HAPI_AttributeInfo::count - @p start.
5500 /// Note, if 0 is passed for length, the function will just
5501 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5502 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5503 ///
5505  HAPI_NodeId node_id,
5506  HAPI_PartId part_id,
5507  const char * name,
5508  HAPI_AttributeInfo * attr_info,
5509  HAPI_StringHandle * data_array,
5510  int start, int length );
5511 
5512 /// @brief Get array attribute string data.
5513 /// Each entry in an array attribute can have varying array lengths.
5514 /// Therefore the array values are returned as a flat array, with
5515 /// another sizes array containing the lengths of each array entry.
5516 /// Note that the string handles returned are only valid until
5517 /// the next time this function is called.
5518 ///
5519 /// @ingroup GeometryGetters Attributes
5520 ///
5521 /// @param[in] session
5522 /// The session of Houdini you are interacting with.
5523 /// See @ref HAPI_Sessions for more on sessions.
5524 /// Pass NULL to just use the default in-process session.
5525 /// <!-- default NULL -->
5526 ///
5527 /// @param[in] node_id
5528 /// The node id.
5529 ///
5530 /// @param[in] part_id
5531 /// The part id.
5532 ///
5533 /// @param[in] name
5534 /// Attribute name.
5535 ///
5536 /// @param[in] attr_info
5537 /// ::HAPI_AttributeInfo used as input for the.
5538 /// totalArrayElements. Also contains some sanity checks like
5539 /// data type. Generally should be the same struct
5540 /// returned by ::HAPI_GetAttributeInfo().
5541 ///
5542 /// @param[out] data_fixed_array
5543 /// An ::HAPI_StringHandle array at least the size of
5544 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5545 ///
5546 /// @param[in] data_fixed_length
5547 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5548 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
5549 ///
5550 /// @param[out] sizes_fixed_array
5551 /// An integer array at least the size of
5552 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
5553 ///
5554 /// @param[in] start
5555 /// First index of range. Must be at least 0 and at
5556 /// most ::HAPI_AttributeInfo::count - 1.
5557 /// <!-- default 0 -->
5558 ///
5559 /// @param[in] sizes_fixed_length
5560 /// Must be at least 0 and at most
5561 /// ::HAPI_AttributeInfo::count - @p start.
5562 /// Note, if 0 is passed for length, the function will just
5563 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5564 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5565 ///
5567  HAPI_NodeId node_id,
5568  HAPI_PartId part_id,
5569  const char * name,
5570  HAPI_AttributeInfo * attr_info,
5571  HAPI_StringHandle * data_fixed_array,
5572  int data_fixed_length,
5573  int * sizes_fixed_array,
5574  int start, int sizes_fixed_length );
5575 
5576 /// @brief Get attribute dictionary data.
5577 ///
5578 /// Dictionary data is serialized as JSON-encoded strings.
5579 /// Note that the string handles returned are only valid until the next
5580 /// time this function is called.
5581 ///
5582 /// @ingroup GeometryGetters Attributes
5583 ///
5584 /// @param[in] session
5585 /// The session of Houdini you are interacting with.
5586 /// See @ref HAPI_Sessions for more on sessions.
5587 /// Pass NULL to just use the default in-process session.
5588 /// <!-- default NULL -->
5589 ///
5590 /// @param[in] node_id
5591 /// The node id.
5592 ///
5593 /// @param[in] part_id
5594 /// The part id.
5595 ///
5596 /// @param[in] name
5597 /// Attribute name.
5598 ///
5599 /// @param[in] attr_info
5600 /// ::HAPI_AttributeInfo used as input for what tuple size.
5601 /// you want. Also contains some sanity checks like
5602 /// data type. Generally should be the same struct
5603 /// returned by ::HAPI_GetAttributeInfo().
5604 ///
5605 /// @param[out] data_array
5606 /// An ::HAPI_StringHandle array at least the size of
5607 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
5608 ///
5609 /// @param[in] start
5610 /// First index of range. Must be at least 0 and at
5611 /// most ::HAPI_AttributeInfo::count - 1.
5612 /// <!-- default 0 -->
5613 ///
5614 /// @param[in] length
5615 /// Must be at least 0 and at most
5616 /// ::HAPI_AttributeInfo::count - @p start.
5617 /// Note, if 0 is passed for length, the function will just
5618 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5619 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5620 ///
5622  HAPI_NodeId node_id,
5623  HAPI_PartId part_id,
5624  const char* name,
5625  HAPI_AttributeInfo* attr_info,
5626  HAPI_StringHandle* data_array,
5627  int start,
5628  int length );
5629 
5630 /// @brief Get array attribute dictionary data.
5631 /// Each entry in an array attribute can have varying array lengths.
5632 /// Therefore the array values are returned as a flat array, with
5633 /// another sizes array containing the lengths of each array entry.
5634 ///
5635 /// Dictionary data is serialized as JSON-encoded strings.
5636 /// Note that the string handles returned are only valid until
5637 /// the next time this function is called.
5638 ///
5639 /// @ingroup GeometryGetters Attributes
5640 ///
5641 /// @param[in] session
5642 /// The session of Houdini you are interacting with.
5643 /// See @ref HAPI_Sessions for more on sessions.
5644 /// Pass NULL to just use the default in-process session.
5645 /// <!-- default NULL -->
5646 ///
5647 /// @param[in] node_id
5648 /// The node id.
5649 ///
5650 /// @param[in] part_id
5651 /// The part id.
5652 ///
5653 /// @param[in] name
5654 /// Attribute name.
5655 ///
5656 /// @param[in] attr_info
5657 /// ::HAPI_AttributeInfo used as input for the.
5658 /// totalArrayElements. Also contains some sanity checks like
5659 /// data type. Generally should be the same struct
5660 /// returned by ::HAPI_GetAttributeInfo().
5661 ///
5662 /// @param[out] data_fixed_array
5663 /// An ::HAPI_StringHandle array at least the size of
5664 /// <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5665 ///
5666 /// @param[in] data_fixed_length
5667 /// Must be <tt>::HAPI_AttributeInfo::totalArrayElements</tt>.
5668 /// <!-- source ::HAPI_AttributeInfo::totalArrayElements -->
5669 ///
5670 /// @param[out] sizes_fixed_array
5671 /// An integer array at least the size of
5672 /// <tt>sizes_fixed_length</tt> to hold the size of each entry.
5673 ///
5674 /// @param[in] start
5675 /// First index of range. Must be at least 0 and at
5676 /// most ::HAPI_AttributeInfo::count - 1.
5677 /// <!-- default 0 -->
5678 ///
5679 /// @param[in] sizes_fixed_length
5680 /// Must be at least 0 and at most
5681 /// ::HAPI_AttributeInfo::count - @p start.
5682 /// Note, if 0 is passed for length, the function will just
5683 /// do nothing and return ::HAPI_RESULT_SUCCESS.
5684 /// <!-- source ::HAPI_AttributeInfo::count - start -->
5685 ///
5687  HAPI_NodeId node_id,
5688  HAPI_PartId part_id,
5689  const char* name,
5690  HAPI_AttributeInfo* attr_info,
5691  HAPI_StringHandle* data_fixed_array,
5692  int data_fixed_length,
5693  int* sizes_fixed_array,
5694  int start,
5695  int sizes_fixed_length );
5696 
5697 /// @brief Get group names for an entire geo. Please note that this
5698 /// function is NOT per-part, but it is per-geo. The companion
5699 /// function ::HAPI_GetGroupMembership() IS per-part. Also keep
5700 /// in mind that the name string handles are only
5701 /// valid until the next time this function is called.
5702 ///
5703 /// @ingroup GeometryGetters
5704 ///
5705 /// @param[in] session
5706 /// The session of Houdini you are interacting with.
5707 /// See @ref HAPI_Sessions for more on sessions.
5708 /// Pass NULL to just use the default in-process session.
5709 /// <!-- default NULL -->
5710 ///
5711 /// @param[in] node_id
5712 /// The node id.
5713 ///
5714 /// @param[in] group_type
5715 /// The group type.
5716 ///
5717 /// @param[out] group_names_array
5718 /// The array of names to be filled. Should be the size
5719 /// given by ::HAPI_GeoInfo_GetGroupCountByType() with
5720 /// @p group_type and the ::HAPI_GeoInfo of @p geo_id.
5721 /// @note These string handles are only valid until the
5722 /// next call to ::HAPI_GetGroupNames().
5723 ///
5724 /// @param[in] group_count
5725 /// Sanity check. Should be less than or equal to the size
5726 /// of @p group_names.
5727 ///
5728 HAPI_DECL HAPI_GetGroupNames( const HAPI_Session * session,
5729  HAPI_NodeId node_id,
5730  HAPI_GroupType group_type,
5731  HAPI_StringHandle * group_names_array,
5732  int group_count );
5733 
5734 /// @brief Get group membership.
5735 ///
5736 /// @ingroup GeometryGetters
5737 ///
5738 /// @param[in] session
5739 /// The session of Houdini you are interacting with.
5740 /// See @ref HAPI_Sessions for more on sessions.
5741 /// Pass NULL to just use the default in-process session.
5742 /// <!-- default NULL -->
5743 ///
5744 /// @param[in] node_id
5745 /// The node id.
5746 ///
5747 /// @param[in] part_id
5748 /// The part id.
5749 ///
5750 /// @param[in] group_type
5751 /// The group type.
5752 ///
5753 /// @param[in] group_name
5754 /// The group name.
5755 ///
5756 /// @param[out] membership_array_all_equal
5757 /// (optional) Quick way to determine if all items are in
5758 /// the given group or all items our not in the group.
5759 /// If you do not need this information or you are getting edge
5760 /// group information, you can just pass NULL for this argument.
5761 ///
5762 /// @param[out] membership_array
5763 /// Array of ints that represent the membership of this
5764 /// group. When getting membership information for a point or
5765 /// primitive group, the size of the array should be the size
5766 /// given by ::HAPI_PartInfo_GetElementCountByGroupType() with
5767 /// @p group_type and the ::HAPI_PartInfo of @p part_id. When
5768 /// retrieving the edges belonging to an edge group, the
5769 /// membership array will be filled with point numbers that
5770 /// comprise the edges of the edge group. Each edge is specified
5771 /// by two points, which means that the size of the array should
5772 /// be the size given by ::HAPI_GetEdgeCountOfEdgeGroup() * 2.
5773 ///
5774 /// @param[in] start
5775 /// Start offset into the membership array. Must be
5776 /// less than ::HAPI_PartInfo_GetElementCountByGroupType() when
5777 /// it is a point or primitive group. When getting the
5778 /// membership information for an edge group, this argument must
5779 /// be less than the size returned by
5780 /// ::HAPI_GetEdgeCountOfEdgeGroup() * 2 - 1.
5781 /// <!-- default 0 -->
5782 ///
5783 /// @param[in] length
5784 /// Should be less than or equal to the size
5785 /// of @p membership_array.
5786 ///
5788  HAPI_NodeId node_id,
5789  HAPI_PartId part_id,
5790  HAPI_GroupType group_type,
5791  const char * group_name,
5792  HAPI_Bool * membership_array_all_equal,
5793  int * membership_array,
5794  int start, int length );
5795 
5796 /// @brief Get group counts for a specific packed instanced part.
5797 ///
5798 /// @ingroup GeometryGetters
5799 ///
5800 /// @param[in] session
5801 /// The session of Houdini you are interacting with.
5802 /// See @ref HAPI_Sessions for more on sessions.
5803 /// Pass NULL to just use the default in-process session.
5804 /// <!-- default NULL -->
5805 ///
5806 /// @param[in] node_id
5807 /// The node id.
5808 ///
5809 /// @param[in] part_id
5810 /// The part id. (should be a packed primitive)
5811 ///
5812 /// @param[out] pointGroupCount
5813 /// Number of point groups on the packed instance part.
5814 /// Will be set to -1 if the part is not a valid packed part.
5815 ///
5816 /// @param[out] primitiveGroupCount
5817 /// Number of primitive groups on the instanced part.
5818 /// Will be set to -1 if the part is not a valid instancer
5819 ///
5821  HAPI_NodeId node_id,
5822  HAPI_PartId part_id,
5823  int * pointGroupCount,
5824  int * primitiveGroupCount );
5825 
5826 /// @brief Get the group names for a packed instance part
5827 /// This functions allows you to get the group name for a specific
5828 /// packed primitive part.
5829 /// Keep in mind that the name string handles are only
5830 /// valid until the next time this function is called.
5831 ///
5832 /// @ingroup GeometryGetters
5833 ///
5834 /// @param[in] session
5835 /// The session of Houdini you are interacting with.
5836 /// See @ref HAPI_Sessions for more on sessions.
5837 /// Pass NULL to just use the default in-process session.
5838 /// <!-- default NULL -->
5839 ///
5840 /// @param[in] node_id
5841 /// The node id.
5842 ///
5843 /// @param[in] part_id
5844 /// The part id. (should be a packed primitive)
5845 ///
5846 /// @param[in] group_type
5847 /// The group type.
5848 ///
5849 /// @param[out] group_names_array
5850 /// The array of names to be filled. Should be the size
5851 /// given by ::HAPI_GetGroupCountOnPackedInstancePart() with
5852 /// @p group_type and the ::HAPI_PartInfo of @p part_id.
5853 /// @note These string handles are only valid until the
5854 /// next call to ::HAPI_GetGroupNamesOnPackedInstancePart().
5855 ///
5856 /// @param[in] group_count
5857 /// Sanity check. Should be less than or equal to the size
5858 /// of @p group_names.
5859 ///
5861  HAPI_NodeId node_id,
5862  HAPI_PartId part_id,
5863  HAPI_GroupType group_type,
5864  HAPI_StringHandle * group_names_array,
5865  int group_count );
5866 
5867 /// @brief Get group membership for a packed instance part
5868 /// This functions allows you to get the group membership for a specific
5869 /// packed primitive part.
5870 ///
5871 /// @ingroup GeometryGetters
5872 ///
5873 /// @param[in] session
5874 /// The session of Houdini you are interacting with.
5875 /// See @ref HAPI_Sessions for more on sessions.
5876 /// Pass NULL to just use the default in-process session.
5877 /// <!-- default NULL -->
5878 ///
5879 /// @param[in] node_id
5880 /// The node id.
5881 ///
5882 /// @param[in] part_id
5883 /// The part id. (should be a packed primitive)
5884 ///
5885 /// @param[in] group_type
5886 /// The group type.
5887 ///
5888 /// @param[in] group_name
5889 /// The group name.
5890 ///
5891 /// @param[out] membership_array_all_equal
5892 /// (optional) Quick way to determine if all items are in
5893 /// the given group or all items our not in the group.
5894 /// You can just pass NULL here if not interested.
5895 ///
5896 /// @param[out] membership_array
5897 /// Array of ints that represent the membership of this
5898 /// group. Should be the size given by
5899 /// ::HAPI_PartInfo_GetElementCountByGroupType() with
5900 /// @p group_type and the ::HAPI_PartInfo of @p part_id.
5901 ///
5902 /// @param[in] start
5903 /// Start offset into the membership array. Must be
5904 /// less than ::HAPI_PartInfo_GetElementCountByGroupType().
5905 /// <!-- default 0 -->
5906 ///
5907 /// @param[in] length
5908 /// Should be less than or equal to the size
5909 /// of @p membership_array.
5910 /// <!-- source ::HAPI_PartInfo_GetElementCountByGroupType -->
5911 ///
5913  HAPI_NodeId node_id,
5914  HAPI_PartId part_id,
5915  HAPI_GroupType group_type,
5916  const char * group_name,
5917  HAPI_Bool * membership_array_all_equal,
5918  int * membership_array,
5919  int start, int length );
5920 
5921 /// @brief Get the part ids that this instancer part is instancing.
5922 ///
5923 /// @ingroup GeometryGetters
5924 ///
5925 /// @param[in] session
5926 /// The session of Houdini you are interacting with.
5927 /// See @ref HAPI_Sessions for more on sessions.
5928 /// Pass NULL to just use the default in-process session.
5929 /// <!-- default NULL -->
5930 ///
5931 /// @param[in] node_id
5932 /// The node id.
5933 ///
5934 /// @param[in] part_id
5935 /// The instancer part id.
5936 ///
5937 /// @param[out] instanced_parts_array
5938 /// Array of ::HAPI_PartId's to instance.
5939 ///
5940 /// @param[in] start
5941 /// Should be less than @p part_id's
5942 /// ::HAPI_PartInfo::instancedPartCount but more than or
5943 /// equal to 0.
5944 /// <!-- default 0 -->
5945 ///
5946 /// @param[in] length
5947 /// Should be less than @p part_id's
5948 /// ::HAPI_PartInfo::instancedPartCount - @p start.
5949 /// <!-- source ::HAPI_PartInfo::instancedPartCount - start -->
5950 ///
5952  HAPI_NodeId node_id,
5953  HAPI_PartId part_id,
5954  HAPI_PartId * instanced_parts_array,
5955  int start, int length );
5956 
5957 /// @brief Get the instancer part's list of transforms on which to
5958 /// instance the instanced parts you got from
5959 /// ::HAPI_GetInstancedPartIds().
5960 ///
5961 /// @ingroup GeometryGetters
5962 ///
5963 /// @param[in] session
5964 /// The session of Houdini you are interacting with.
5965 /// See @ref HAPI_Sessions for more on sessions.
5966 /// Pass NULL to just use the default in-process session.
5967 /// <!-- default NULL -->
5968 ///
5969 /// @param[in] node_id
5970 /// The node id.
5971 ///
5972 /// @param[in] part_id
5973 /// The instancer part id.
5974 ///
5975 /// @param[in] rst_order
5976 /// The order of application of translation, rotation and
5977 /// scale.
5978 ///
5979 /// @param[out] transforms_array
5980 /// Array of ::HAPI_PartId's to instance.
5981 ///
5982 /// @param[in] start
5983 /// Should be less than @p part_id's
5984 /// ::HAPI_PartInfo::instanceCount but more than or
5985 /// equal to 0.
5986 /// <!-- default 0 -->
5987 ///
5988 /// @param[in] length
5989 /// Should be less than @p part_id's
5990 /// ::HAPI_PartInfo::instanceCount - @p start.
5991 /// <!-- source ::HAPI_PartInfo::instanceCount - start -->
5992 ///
5994  HAPI_NodeId node_id,
5995  HAPI_PartId part_id,
5996  HAPI_RSTOrder rst_order,
5997  HAPI_Transform * transforms_array,
5998  int start, int length );
5999 
6000 /// @defgroup GeometrySetters Geometry Setters
6001 /// Functions for setting geometry (SOP) data
6002 
6003 /// @brief Set the main part info struct (::HAPI_PartInfo).
6004 ///
6005 /// @ingroup GeometrySetters
6006 ///
6007 /// @param[in] session
6008 /// The session of Houdini you are interacting with.
6009 /// See @ref HAPI_Sessions for more on sessions.
6010 /// Pass NULL to just use the default in-process session.
6011 /// <!-- default NULL -->
6012 ///
6013 /// @param[in] node_id
6014 /// The SOP node id.
6015 ///
6016 /// @param[in] part_id
6017 /// Currently not used. Just pass 0.
6018 /// <!-- default 0 -->
6019 ///
6020 /// @param[in] part_info
6021 /// ::HAPI_PartInfo value that describes the input
6022 /// geometry.
6023 ///
6024 HAPI_DECL HAPI_SetPartInfo( const HAPI_Session * session,
6025  HAPI_NodeId node_id,
6026  HAPI_PartId part_id,
6027  const HAPI_PartInfo * part_info );
6028 
6029 /// @brief Set the array of faces where the nth integer in the array is
6030 /// the number of vertices the nth face has.
6031 ///
6032 /// @ingroup GeometrySetters
6033 ///
6034 /// @param[in] session
6035 /// The session of Houdini you are interacting with.
6036 /// See @ref HAPI_Sessions for more on sessions.
6037 /// Pass NULL to just use the default in-process session.
6038 /// <!-- default NULL -->
6039 ///
6040 /// @param[in] node_id
6041 /// The SOP node id.
6042 ///
6043 /// @param[in] part_id
6044 /// Currently not used. Just pass 0.
6045 /// <!-- default 0 -->
6046 ///
6047 /// @param[in] face_counts_array
6048 /// An integer array at least the size of @p length.
6049 ///
6050 /// @param[in] start
6051 /// First index of range. Must be at least 0 and at
6052 /// most ::HAPI_PartInfo::faceCount - 1.
6053 /// <!-- default 0 -->
6054 ///
6055 /// @param[in] length
6056 /// Must be at least 0 and at most
6057 /// ::HAPI_PartInfo::faceCount - @p start.
6058 /// <!-- source ::HAPI_PartInfo::faceCount - start -->
6059 ///
6060 HAPI_DECL HAPI_SetFaceCounts( const HAPI_Session * session,
6061  HAPI_NodeId node_id,
6062  HAPI_PartId part_id,
6063  const int * face_counts_array,
6064  int start, int length );
6065 
6066 /// @brief Set array containing the vertex-point associations where the
6067 /// ith element in the array is the point index the ith vertex
6068 /// associates with.
6069 ///
6070 /// @ingroup GeometrySetters
6071 ///
6072 /// @param[in] session
6073 /// The session of Houdini you are interacting with.
6074 /// See @ref HAPI_Sessions for more on sessions.
6075 /// Pass NULL to just use the default in-process session.
6076 /// <!-- default NULL -->
6077 ///
6078 /// @param[in] node_id
6079 /// The SOP node id.
6080 ///
6081 /// @param[in] part_id
6082 /// Currently not used. Just pass 0.
6083 ///
6084 /// @param[in] vertex_list_array
6085 /// An integer array at least the size of length.
6086 ///
6087 /// @param[in] start
6088 /// First index of range. Must be at least 0 and at
6089 /// most ::HAPI_PartInfo::vertexCount - 1.
6090 /// <!-- default 0 -->
6091 ///
6092 /// @param[in] length
6093 /// Must be at least 0 and at most
6094 /// ::HAPI_PartInfo::vertexCount - @p start.
6095 /// <!-- source ::HAPI_PartInfo::vertexCount - start -->
6096 ///
6097 HAPI_DECL HAPI_SetVertexList( const HAPI_Session * session,
6098  HAPI_NodeId node_id,
6099  HAPI_PartId part_id,
6100  const int * vertex_list_array,
6101  int start, int length );
6102 
6103 /// @brief Add an attribute.
6104 ///
6105 /// @ingroup GeometrySetters Attributes
6106 ///
6107 /// @param[in] session
6108 /// The session of Houdini you are interacting with.
6109 /// See @ref HAPI_Sessions for more on sessions.
6110 /// Pass NULL to just use the default in-process session.
6111 /// <!-- default NULL -->
6112 ///
6113 /// @param[in] node_id
6114 /// The SOP node id.
6115 ///
6116 /// @param[in] part_id
6117 /// Currently not used. Just pass 0.
6118 ///
6119 /// @param[in] name
6120 /// Attribute name.
6121 ///
6122 /// @param[in] attr_info
6123 /// ::HAPI_AttributeInfo stores attribute properties.
6124 ///
6125 HAPI_DECL HAPI_AddAttribute( const HAPI_Session * session,
6126  HAPI_NodeId node_id,
6127  HAPI_PartId part_id,
6128  const char * name,
6129  const HAPI_AttributeInfo * attr_info );
6130 
6131 /// @brief Delete an attribute from an input geo
6132 ///
6133 /// @ingroup GeometrySetters Attributes
6134 ///
6135 /// @param[in] session
6136 /// The session of Houdini you are interacting with.
6137 /// See @ref HAPI_Sessions for more on sessions.
6138 /// Pass NULL to just use the default in-process session.
6139 /// <!-- default NULL -->
6140 ///
6141 /// @param[in] node_id
6142 /// The SOP node id.
6143 ///
6144 /// @param[in] part_id
6145 /// Currently not used. Just pass 0.
6146 ///
6147 /// @param[in] name
6148 /// Attribute name.
6149 ///
6150 /// @param[in] attr_info
6151 /// ::HAPI_AttributeInfo stores attribute properties.
6152 ///
6154  HAPI_NodeId node_id,
6155  HAPI_PartId part_id,
6156  const char * name,
6157  const HAPI_AttributeInfo * attr_info );
6158 
6159 /// @brief Set attribute integer data.
6160 ///
6161 /// @ingroup GeometrySetters Attributes
6162 ///
6163 /// @param[in] session
6164 /// The session of Houdini you are interacting with.
6165 /// See @ref HAPI_Sessions for more on sessions.
6166 /// Pass NULL to just use the default in-process session.
6167 /// <!-- default NULL -->
6168 ///
6169 /// @param[in] node_id
6170 /// The SOP node id.
6171 ///
6172 /// @param[in] part_id
6173 /// Currently not used. Just pass 0.
6174 ///
6175 /// @param[in] name
6176 /// Attribute name.
6177 ///
6178 /// @param[in] attr_info
6179 /// ::HAPI_AttributeInfo used as input for what tuple size.
6180 /// you want. Also contains some sanity checks like
6181 /// data type. Generally should be the same struct
6182 /// returned by ::HAPI_GetAttributeInfo().
6183 ///
6184 /// @param[in] data_array
6185 /// An integer array at least the size of
6186 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
6187 ///
6188 /// @param[in] start
6189 /// First index of range. Must be at least 0 and at
6190 /// most ::HAPI_AttributeInfo::count - 1.
6191 /// <!-- default 0 -->
6192 ///
6193 /// @param[in] length
6194 /// Must be at least 0 and at most
6195 /// ::HAPI_AttributeInfo::count - @p start.
6196 /// <!-- source ::HAPI_AttributeInfo::count - start -->
6197 ///
6199  HAPI_NodeId node_id,
6200  HAPI_PartId part_id,
6201  const char * name,
6202  const HAPI_AttributeInfo * attr_info,
6203  const int * data_array,
6204  int start, int length );
6205 
6206 /// @brief Set unsigned 8-bit attribute integer data.
6207 ///
6208 /// @ingroup GeometrySetters Attributes
6209 ///
6210 /// @param[in] session
6211 /// The session of Houdini you are interacting with.
6212 /// See @ref HAPI_Sessions for more on sessions.
6213 /// Pass NULL to just use the default in-process session.
6214 /// <!-- default NULL -->
6215 ///
6216 /// @param[in] node_id
6217 /// The SOP node id.
6218 ///
6219 /// @param[in] part_id
6220 /// Currently not used. Just pass 0.
6221 ///
6222 /// @param[in] name
6223 /// Attribute name.
6224 ///
6225 /// @param[in] attr_info
6226 /// ::HAPI_AttributeInfo used as input for what tuple size.
6227 /// you want. Also contains some sanity checks like
6228 /// data type. Generally should be the same struct
6229 /// returned by ::HAPI_GetAttributeInfo().
6230 ///
6231 /// @param[in] data_array
6232 /// An unsigned 8-bit integer array at least the size of
6233 /// <tt>length * ::HAPI_AttributeInfo::tupleSize</tt>.
6234 ///
6235 /// @param[in] start
6236 /// First index of range. Must be at least 0 and at
6237 /// most ::HAPI_AttributeInfo::count - 1.
6238 /// <!-- default 0 -->
6239 ///
6240 /// @param[in] length
6241 /// Must be at least 0 and at most
6242 /// ::HAPI_AttributeInfo::count - @p start.
6243 /// <!-- source ::HAPI_AttributeInfo::count - start -->
6244 ///
6246  HAPI_NodeId node_id,
6247  HAPI_PartId part_id,
6248  const char * name,
6249  const HAPI_AttributeInfo * attr_info,
6250  const HAPI_UInt8 * data_array,
6251  int start, int length );
6252 
6253 /// @brief Set 8-bit attribute integer data.
6254 ///
6255 /// @ingroup GeometrySetters Attributes
6256 ///
6257 /// @param[in] session
6258 /// The session of Houdini you are interacting with.
6259 /// See @ref HAPI_Sessions for more on sessions.
6260 /// Pass NULL to just use the default in-process session.
6261 /// <!-- default NULL -->
6262 ///
6263 /// @param[in] node_id
6264 //