Tissue Forge C 0.2.1
Interactive, particle-based physics, chemistry and biology modeling and simulation environment
Loading...
Searching...
No Matches
tfCBody.h
Go to the documentation of this file.
1/*******************************************************************************
2 * This file is part of Tissue Forge.
3 * Copyright (c) 2022-2024 T.J. Sego and Tien Comlekoglu
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published
7 * by the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 ******************************************************************************/
19
25#ifndef _WRAPS_C_VERTEX_SOLVER_TFCBODY_H_
26#define _WRAPS_C_VERTEX_SOLVER_TFCBODY_H_
27
28#include <tf_port_c.h>
29
30#include <tfC_io.h>
31
32
37struct CAPI_EXPORT tfVertexSolverBodyTypeSpec {
38 tfFloatP_t *density;
39 tfFloatP_t **bodyForceComps;
40 tfFloatP_t *surfaceAreaLam;
41 tfFloatP_t *surfaceAreaVal;
42 tfFloatP_t *volumeLam;
43 tfFloatP_t *volumeVal;
44 char *name;
45 char **adhesionNames;
46 tfFloatP_t *adhesionValues;
47 unsigned int numAdhesionValues;
48};
49
50
51// Handles
52
58 void *tfObj;
59};
60
65struct CAPI_EXPORT tfVertexSolverBodyTypeHandle {
66 void *tfObj;
67};
68
69
71// tfVertexSolverBodyTypeSpec //
73
74
80
81
83// BodyHandle //
85
86
93CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_init(struct tfVertexSolverBodyHandleHandle *handle, int id);
94
101CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_fromString(struct tfVertexSolverBodyHandleHandle *handle, const char *s);
102
109
116CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_getId(struct tfVertexSolverBodyHandleHandle *handle, int *objId);
117
126 struct tfVertexSolverBodyHandleHandle *handle,
128 bool *result
129);
130
139 struct tfVertexSolverBodyHandleHandle *handle,
141 bool *result
142);
143
150CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_objType(struct tfVertexSolverBodyHandleHandle *handle, unsigned int *label);
151
158
165CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_destroyBodies(struct tfVertexSolverBodyHandleHandle **handles, unsigned int numObjs);
166
175
182CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_validate(struct tfVertexSolverBodyHandleHandle *handle, bool *result);
183
190
198CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_str(struct tfVertexSolverBodyHandleHandle *handle, char **str, unsigned int *numChars);
199
207CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_toString(struct tfVertexSolverBodyHandleHandle *handle, char **str, unsigned int *numChars);
208
216
224
233 struct tfVertexSolverBodyHandleHandle *handle,
234 struct tfVertexSolverSurfaceHandleHandle *toInsert,
235 struct tfVertexSolverSurfaceHandleHandle *toRemove
236);
237
245
253
262 struct tfVertexSolverBodyHandleHandle *handle,
264 int *numObjs
265);
266
275 struct tfVertexSolverBodyHandleHandle *handle,
277 int *numObjs
278);
279
288 struct tfVertexSolverBodyHandleHandle *handle,
289 tfFloatP_t *dir,
291);
292
301 struct tfVertexSolverBodyHandleHandle *handle,
302 tfFloatP_t *dir,
304);
305
316 struct tfVertexSolverBodyHandleHandle *handle,
317 struct tfVertexSolverBodyHandleHandle **objs,
318 int *numObjs
319);
320
331 struct tfVertexSolverBodyHandleHandle *handle,
332 struct tfVertexSolverBodyHandleHandle **objs,
333 int *numObjs
334);
335
347 struct tfVertexSolverBodyHandleHandle *handle,
350 int *numObjs
351);
352
359CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_getDensity(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *result);
360
367CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_setDensity(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t density);
368
375CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_getCentroid(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t **result);
376
383CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_getVelocity(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t **result);
384
391CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_getArea(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *result);
392
399CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_getVolume(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *result);
400
407CAPI_FUNC(HRESULT) tfVertexSolverBodyHandle_getMass(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *result);
408
417 struct tfVertexSolverBodyHandleHandle *handle,
419 tfFloatP_t *result
420);
421
430 struct tfVertexSolverBodyHandleHandle *handle,
432 tfFloatP_t *result
433);
434
443 struct tfVertexSolverBodyHandleHandle *handle,
445 tfFloatP_t *result
446);
447
457 struct tfVertexSolverBodyHandleHandle *handle,
460 int *numObjs
461);
462
471 struct tfVertexSolverBodyHandleHandle *handle,
472 struct tfVertexSolverBodyHandleHandle *other,
473 tfFloatP_t *result
474);
475
485 struct tfVertexSolverBodyHandleHandle *handle,
486 struct tfVertexSolverBodyHandleHandle *other,
488 int *numObjs
489);
490
499 struct tfVertexSolverBodyHandleHandle *handle,
500 tfFloatP_t *pos,
501 bool *result
502);
503
514 struct tfVertexSolverBodyHandleHandle *handle,
515 tfFloatP_t *cp_pos,
516 tfFloatP_t *cp_norm,
517 struct tfVertexSolverSurfaceTypeHandle *stype,
518 struct tfVertexSolverBodyHandleHandle *newObj
519);
520
521
523// BodyType //
525
526
533
541
548CAPI_FUNC(HRESULT) tfVertexSolverBodyType_fromString(struct tfVertexSolverBodyTypeHandle *handle, const char *s);
549
556CAPI_FUNC(HRESULT) tfVertexSolverBodyType_objType(struct tfVertexSolverBodyTypeHandle *handle, unsigned int *label);
557
565CAPI_FUNC(HRESULT) tfVertexSolverBodyType_str(
566 struct tfVertexSolverBodyTypeHandle *handle,
567 char **str,
568 unsigned int *numChars
569);
570
579 struct tfVertexSolverBodyTypeHandle *handle,
580 char **str,
581 unsigned int *numChars
582);
583
592
598CAPI_FUNC(HRESULT) tfVertexSolverBodyType_isRegistered(struct tfVertexSolverBodyTypeHandle *handle, bool *result);
599
608 struct tfVertexSolverBodyTypeHandle *handle,
609 struct tfVertexSolverBodyHandleHandle **objs,
610 int *numObjs
611);
612
621 struct tfVertexSolverBodyTypeHandle *handle,
622 int **ids,
623 int *numObjs
624);
625
634 struct tfVertexSolverBodyTypeHandle *handle,
635 char **str,
636 unsigned int *numChars
637);
638
645CAPI_FUNC(HRESULT) tfVertexSolverBodyType_setName(struct tfVertexSolverBodyTypeHandle *handle, const char *name);
646
653CAPI_FUNC(HRESULT) tfVertexSolverBodyType_getDensity(struct tfVertexSolverBodyTypeHandle *handle, tfFloatP_t *result);
654
661CAPI_FUNC(HRESULT) tfVertexSolverBodyType_setDensity(struct tfVertexSolverBodyTypeHandle *handle, tfFloatP_t density);
662
672 struct tfVertexSolverBodyTypeHandle *handle,
673 struct tfVertexSolverSurfaceHandleHandle **surfaces,
674 unsigned int numSurfaces,
675 struct tfVertexSolverBodyHandleHandle *newObj
676);
677
687 struct tfVertexSolverBodyTypeHandle *handle,
688 struct tfIoThreeDFMeshDataHandle *ioMesh,
689 struct tfVertexSolverSurfaceTypeHandle *stype,
690 struct tfVertexSolverBodyHandleHandle *newObj
691);
692
702 struct tfVertexSolverBodyTypeHandle *handle,
704 tfFloatP_t *pos,
705 struct tfVertexSolverBodyHandleHandle *newObj
706);
707
717 struct tfVertexSolverBodyTypeHandle *handle,
719 tfFloatP_t normLen,
720 struct tfVertexSolverBodyHandleHandle *newObj
721);
722
723
725// Module functions //
727
728
737 struct tfVertexSolverSurfaceHandleHandle **surfaces,
738 unsigned int numSurfaces,
739 struct tfVertexSolverBodyHandleHandle *newObj
740);
741
749
756CAPI_FUNC(HRESULT) tfVertexSolverFindBodyTypeFromName(const char *name, struct tfVertexSolverBodyTypeHandle *btype);
757
766 struct tfVertexSolverBodyTypeHandle **btypes,
767 struct tfVertexSolverBodyTypeSpec *bdefs,
768 unsigned int numTypes
769);
770
771#endif // _WRAPS_C_VERTEX_SOLVER_TFCBODY_H_
Handle to a io::ThreeDFMeshData instance.
Definition tfC_io.h:94
Handle to a models::vertex::BodyHandle instance.
Definition tfCBody.h:57
Handle to a models::vertex::BodyType instance.
Definition tfCBody.h:65
Body type definition in Tissue Forge C.
Definition tfCBody.h:37
Handle to a models::vertex::SurfaceHandle instance.
Definition tfCSurface.h:68
Handle to a models::vertex::SurfaceType instance.
Definition tfCSurface.h:76
Handle to a models::vertex::VertexHandle instance.
Definition tfCVertex.h:39
HRESULT tfVertexSolverBodyType_setName(struct tfVertexSolverBodyTypeHandle *handle, const char *name)
Set the name of this body type.
HRESULT tfVertexSolverBodyHandle_destroyBodies(struct tfVertexSolverBodyHandleHandle **handles, unsigned int numObjs)
Destroy instances.
HRESULT tfVertexSolverFindBodyTypeFromName(const char *name, struct tfVertexSolverBodyTypeHandle *btype)
Get a registered type by name.
HRESULT tfVertexSolverBodyType_createBodyS(struct tfVertexSolverBodyTypeHandle *handle, struct tfVertexSolverSurfaceHandleHandle **surfaces, unsigned int numSurfaces, struct tfVertexSolverBodyHandleHandle *newObj)
Construct a body of this type from a set of surfaces.
HRESULT tfVertexSolverBodyType_str(struct tfVertexSolverBodyTypeHandle *handle, char **str, unsigned int *numChars)
Get a summary string.
HRESULT tfVertexSolverBodyHandle_validate(struct tfVertexSolverBodyHandleHandle *handle, bool *result)
Validate the body.
HRESULT tfVertexSolverBodyType_createBodyIO(struct tfVertexSolverBodyTypeHandle *handle, struct tfIoThreeDFMeshDataHandle *ioMesh, struct tfVertexSolverSurfaceTypeHandle *stype, struct tfVertexSolverBodyHandleHandle *newObj)
Construct a body of this type from a mesh.
HRESULT tfVertexSolverBodyHandle_sharedVertices(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverBodyHandleHandle *other, struct tfVertexSolverVertexHandleHandle **objs, int *numObjs)
Get the vertices that define both this body and another body.
HRESULT tfVertexSolverBodyHandle_getVertexVolume(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverVertexHandleHandle *v, tfFloatP_t *result)
Get the volume contribution of a vertex to this body.
HRESULT tfVertexSolverCreateBodyByIOData(struct tfIoThreeDFMeshDataHandle *ioMesh, struct tfVertexSolverBodyHandleHandle *newObj)
Construct a body from a mesh.
HRESULT tfVertexSolverBodyType_extend(struct tfVertexSolverBodyTypeHandle *handle, struct tfVertexSolverSurfaceHandleHandle *base, tfFloatP_t *pos, struct tfVertexSolverBodyHandleHandle *newObj)
Create a body from a surface in the mesh and a position.
HRESULT tfVertexSolverBodyHandle_remove(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverSurfaceHandleHandle *s)
Remove a surface.
HRESULT tfVertexSolverBodyHandle_neighborSurfaces(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverSurfaceHandleHandle *s, struct tfVertexSolverSurfaceHandleHandle **objs, int *numObjs)
Get the neighboring surfaces of a surface on this body.
HRESULT tfVertexSolverBodyHandle_getVelocity(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t **result)
Get the velocity, calculated as the velocity of the centroid.
HRESULT tfVertexSolverBodyHandle_isOutside(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *pos, bool *result)
Test whether a point is outside. Test is performed using the nearest surface.
HRESULT tfVertexSolverBodyType_registerType(struct tfVertexSolverBodyTypeHandle *handle)
Registers a type with the engine.
HRESULT tfVertexSolverBodyHandle_destroyBody(struct tfVertexSolverBodyHandleHandle *handle)
Destroy the body.
HRESULT tfVertexSolverBodyHandle_contactArea(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverBodyHandleHandle *other, tfFloatP_t *result)
Get the contacting surface area of this body with another body.
HRESULT tfVertexSolverBodyType_initD(struct tfVertexSolverBodyTypeHandle *handle, struct tfVertexSolverBodyTypeSpec bdef)
Initialize an instance from a definition.
HRESULT tfVertexSolverBodyHandle_positionChanged(struct tfVertexSolverBodyHandleHandle *handle)
Update internal data due to a change in position.
HRESULT tfVertexSolverBodyHandle_getType(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverBodyTypeHandle *btype)
Get the body type.
HRESULT tfVertexSolverBodyHandle_setDensity(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t density)
Set the mass density.
HRESULT tfVertexSolverBindBodyTypeAdhesion(struct tfVertexSolverBodyTypeHandle **btypes, struct tfVertexSolverBodyTypeSpec *bdefs, unsigned int numTypes)
Bind adhesion for all types with matching specification.
HRESULT tfVertexSolverBodyType_getDensity(struct tfVertexSolverBodyTypeHandle *handle, tfFloatP_t *result)
Get the mass density.
HRESULT tfVertexSolverBodyHandle_getVertexArea(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverVertexHandleHandle *v, tfFloatP_t *result)
Get the surface area contribution of a vertex to this body.
HRESULT tfVertexSolverBodyHandle_findInterface(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverBodyHandleHandle *b, struct tfVertexSolverSurfaceHandleHandle **objs, int *numObjs)
Get the surfaces that define the interface between this body and another body.
HRESULT tfVertexSolverBodyType_fromString(struct tfVertexSolverBodyTypeHandle *handle, const char *s)
Create an instance from a JSON string representation.
HRESULT tfVertexSolverBodyHandle_getId(struct tfVertexSolverBodyHandleHandle *handle, int *objId)
Get the object id.
HRESULT tfVertexSolverBodyHandle_getArea(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *result)
Get the surface area.
HRESULT tfVertexSolverBodyHandle_objType(struct tfVertexSolverBodyHandleHandle *handle, unsigned int *label)
Get the mesh object type.
HRESULT tfVertexSolverBodyHandle_getVolume(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *result)
Get the volume.
HRESULT tfVertexSolverBodyType_getInstanceIds(struct tfVertexSolverBodyTypeHandle *handle, int **ids, int *numObjs)
Get a list of instances ids that belong to this type.
HRESULT tfVertexSolverCreateBodyBySurfaces(struct tfVertexSolverSurfaceHandleHandle **surfaces, unsigned int numSurfaces, struct tfVertexSolverBodyHandleHandle *newObj)
Construct a body from a set of surfaces.
HRESULT tfVertexSolverBodyHandle_split(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *cp_pos, tfFloatP_t *cp_norm, struct tfVertexSolverSurfaceTypeHandle *stype, struct tfVertexSolverBodyHandleHandle *newObj)
Split into two bodies. The split is defined by a cut plane.
HRESULT tfVertexSolverBodyHandle_init(struct tfVertexSolverBodyHandleHandle *handle, int id)
Initialize an instance.
HRESULT tfVertexSolverBodyHandle_fromString(struct tfVertexSolverBodyHandleHandle *handle, const char *s)
Create an instance from a JSON string representation.
HRESULT tfVertexSolverBodyHandle_findSurface(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *dir, struct tfVertexSolverSurfaceHandleHandle *s)
Find a surface that defines this body.
HRESULT tfVertexSolverBodyHandle_getSurfaces(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverSurfaceHandleHandle **objs, int *numObjs)
Get the surfaces that define the body.
HRESULT tfVertexSolverBodyHandle_destroyBodyC(struct tfVertexSolverBodyHandleHandle *handle)
Destroy the body.
HRESULT tfVertexSolverBodyType_objType(struct tfVertexSolverBodyTypeHandle *handle, unsigned int *label)
Get the mesh object type.
HRESULT tfVertexSolverBodyHandle_getMass(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *result)
Get the mass.
HRESULT tfVertexSolverBodyHandle_replace(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverSurfaceHandleHandle *toInsert, struct tfVertexSolverSurfaceHandleHandle *toRemove)
Replace a surface a surface.
HRESULT tfVertexSolverBodyHandle_adjacentBodies(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverBodyHandleHandle **objs, int *numObjs)
Get the adjacent bodies.
HRESULT tfVertexSolverBodyType_getInstances(struct tfVertexSolverBodyTypeHandle *handle, struct tfVertexSolverBodyHandleHandle **objs, int *numObjs)
Get a list of instances that belong to this type.
HRESULT tfVertexSolverBodyType_getName(struct tfVertexSolverBodyTypeHandle *handle, char **str, unsigned int *numChars)
Name of this body type.
HRESULT tfVertexSolverBodyHandle_getCentroid(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t **result)
Get the centroid.
HRESULT tfVertexSolverBodyHandle_getVertices(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverVertexHandleHandle **objs, int *numObjs)
Get the vertices that define the body.
HRESULT tfVertexSolverBodyHandle_definedBySurface(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverSurfaceHandleHandle *s, bool *result)
Test whether a body is defined by a surface.
struct tfVertexSolverBodyTypeSpec tfVertexSolverBodyTypeSpec_init()
Get a default definition.
HRESULT tfVertexSolverBodyHandle_become(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverBodyTypeHandle *btype)
Become a different type.
HRESULT tfVertexSolverBodyHandle_definedByVertex(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverVertexHandleHandle *v, bool *result)
Test whether a body is defined by a vertex.
HRESULT tfVertexSolverBodyType_setDensity(struct tfVertexSolverBodyTypeHandle *handle, tfFloatP_t density)
Set the mass density.
HRESULT tfVertexSolverBodyHandle_getVertexMass(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverVertexHandleHandle *v, tfFloatP_t *result)
Get the mass contribution of a vertex to this body.
HRESULT tfVertexSolverBodyHandle_connectedBodies(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverBodyHandleHandle **objs, int *numObjs)
Get the connected bodies.
HRESULT tfVertexSolverBodyType_init(struct tfVertexSolverBodyTypeHandle *handle)
Initialize a new instance.
HRESULT tfVertexSolverBodyType_isRegistered(struct tfVertexSolverBodyTypeHandle *handle, bool *result)
Tests whether this type is registered.
HRESULT tfVertexSolverBodyHandle_destroy(struct tfVertexSolverBodyHandleHandle *handle)
Destroy an instance.
HRESULT tfVertexSolverBodyHandle_str(struct tfVertexSolverBodyHandleHandle *handle, char **str, unsigned int *numChars)
Get a summary string.
HRESULT tfVertexSolverBodyType_extrude(struct tfVertexSolverBodyTypeHandle *handle, struct tfVertexSolverSurfaceHandleHandle *base, tfFloatP_t normLen, struct tfVertexSolverBodyHandleHandle *newObj)
Create a body from a surface in a mesh by extruding along the outward-facing normal of the surface.
HRESULT tfVertexSolverBodyHandle_findVertex(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *dir, struct tfVertexSolverVertexHandleHandle *v)
Find a vertex that defines this body.
HRESULT tfVertexSolverBodyHandle_add(struct tfVertexSolverBodyHandleHandle *handle, struct tfVertexSolverSurfaceHandleHandle *s)
Add a surface.
HRESULT tfVertexSolverBodyHandle_toString(struct tfVertexSolverBodyHandleHandle *handle, char **str, unsigned int *numChars)
Get a JSON string representation.
HRESULT tfVertexSolverBodyHandle_getDensity(struct tfVertexSolverBodyHandleHandle *handle, tfFloatP_t *result)
Get the mass density.
HRESULT tfVertexSolverBodyType_toString(struct tfVertexSolverBodyTypeHandle *handle, char **str, unsigned int *numChars)
Get a JSON string representation.