SoSphere(3)
๐ SoSphere(3) โ the Coin manual, bestie edition ๐
okay so you opened the SoSphere page and it's giving long. Deep breath. We're doing this together. Also hi, this is from the Coin manual, and heads up: this page is so big it comes in two parts, so buckle up. ๐
โจ NAME โจ
SoSphere โ the class that renders sphere shapes. That's it. That's the whole vibe. A ball. Iconic, lowkey. ๐ฎ
๐ SYNOPSIS ๐
First things first, you gotta pull the header in, like so:
#include <Inventor/nodes/SoSphere.h>
And it Inherits SoShape. So everything SoShape can do, SoSphere can do too. Family line, no cap. ๐ซถ
๐ Public Member Functions ๐
These are the ones that are hers, the main character moves:
virtual SoType getTypeId (void) constโ tells you what type she is. ๐SoSphere (void)โ the constructor. She's born. โจvirtual void GLRender (SoGLRenderAction *action)โ handles the actual GL rendering, i.e. the part where the sphere shows up on your screen. ๐ฅvirtual void rayPick (SoRayPickAction *action)โ ray picking, for when you wanna click on the sphere and have it notice you. ๐ฏvirtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)โ reports how many primitives it's working with. ๐
๐ธ Public Member Functions inherited from SoShape ๐ธ
These are the hand-me-downs, and honestly they ate:
virtual SbBool affectsState (void) constโ does this thing mess with the state? ๐virtual void notify (SoNotList *nl)โ the notification pipeline. ๐ขvirtual void getBoundingBox (SoGetBoundingBoxAction *action)โ grabs the bounding box. ๐ฆvirtual void callback (SoCallbackAction *action)โ the callback action hookup. ๐const SoBoundingBoxCache * getBoundingBoxCache (void) constโ returns the cached bounding box. ๐พ
๐ฆ Public Member Functions inherited from SoNode ๐ฆ
The whole node squad. All of these are yours too:
void setOverride (const SbBool state)โ flip the override state on or off. ๐๏ธSbBool isOverride (void) constโ are we overriding? asking for a friend. ๐void setNodeType (const NodeType type)โ set the node type. ๐ท๏ธNodeType getNodeType (void) constโ get the node type. ๐virtual SoNode * copy (SbBool copyconnections=FALSE) constโ make a copy, and by defaultcopyconnections=FALSE. ๐virtual void doAction (SoAction *action)โ run an action on it. โกvirtual void GLRenderBelowPath (SoGLRenderAction *action)โ GL render, below-path flavor. ๐virtual void GLRenderInPath (SoGLRenderAction *action)โ GL render, in-path flavor. ๐ค๏ธvirtual void GLRenderOffPath (SoGLRenderAction *action)โ GL render, off-path flavor. ๐virtual void getMatrix (SoGetMatrixAction *action)โ matrix time. ๐งฎvirtual void handleEvent (SoHandleEventAction *action)โ handles events. ๐ฑ๏ธvirtual void pick (SoPickAction *action)โ pick action. ๐virtual void search (SoSearchAction *action)โ search action. ๐virtual void write (SoWriteAction *action)โ write action. โ๏ธvirtual void audioRender (SoAudioRenderAction *action)โ audio render, yes really. ๐virtual void grabEventsSetup (void)โ set up event grabbing. ๐ซณvirtual void grabEventsCleanup (void)โ clean up after grabbing events. ๐งนvirtual void startNotify (void)โ kick off the notification. ๐ฃSbUniqueId getNodeId (void) constโ this node's unique id. ๐virtual SoChildList * getChildren (void) constโ get the children list. ๐ถvirtual void writeInstance (SoOutput *out)โ write out this instance. ๐virtual SoNode * addToCopyDict (void) constโ toss it in the copy dictionary. ๐๏ธvirtual void copyContents (const SoFieldContainer *from, SbBool copyconnections)โ copy the contents over. ๐ฅvirtual SoFieldContainer * copyThroughConnection (void) constโ copy through a connection. ๐
๐ Public Member Functions inherited from SoFieldContainer ๐
Field container behavior, all inherited, all available:
void setToDefaults (void)โ reset everything to defaults. ๐SbBool hasDefaultValues (void) constโ are all the values still default? ๐คSbBool fieldsAreEqual (const SoFieldContainer *container) constโ compare fields with another container. โ๏ธvoid copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=FALSE)โ copy field values over,copyconnections=FALSEby default. ๐SbBool set (const char *const fielddata)โ set from field data. ๐ฏvoid get (SbString &fielddata)โ get the field data out. ๐คvirtual int getFields (SoFieldList &l) constโ grab the fields. ๐งบvirtual int getAllFields (SoFieldList &l) constโ grab all the fields. ๐งบ๐งบvirtual SoField * getField (const SbName &name) constโ get one field by name. ๐virtual SoField * getEventIn (const SbName &name) constโ get an event-in by name. ๐จvirtual SoField * getEventOut (const SbName &name) constโ get an event-out by name. ๐ฎSbBool getFieldName (const SoField *const field, SbName &name) constโ get the name of a given field. ๐ท๏ธSbBool enableNotify (const SbBool flag)โ turn notifications on or off. ๐SbBool isNotifyEnabled (void) constโ is notification on? ๐๏ธSbBool set (const char *fielddata, SoInput *input)โ set from field data using anSoInput. โจ๏ธvoid get (SbString &fielddata, SoOutput *out)โ get the field data into anSoOutput. ๐จ๏ธvirtual SbBool validateNewFieldValue (SoField *field, void *newval)โ check a new value before it lands. โvirtual void addWriteReference (SoOutput *out, SbBool isfromfield=FALSE)โ add a write reference,isfromfield=FALSEby default. ๐งพSbBool getIsBuiltIn (void) constโ is it built in? ๐๏ธvirtual void getFieldsMemorySize (size_t &managed, size_t &unmanaged) constโ reports memory size for fields, split intomanagedandunmanaged. ๐งvoid setUserData (void *userdata) constโ stash your own user data. ๐void * getUserData (void) constโ get your user data back out. ๐โก๏ธ
๐ Public Member Functions inherited from SoBase ๐
The root of it all, fr fr:
void ref (void) constโ bump the reference count. โฌ๏ธvoid unref (void) constโ drop the reference count. โฌ๏ธvoid unrefNoDelete (void) constโ drop the count but do not delete. ๐ซ๐๏ธint32_t getRefCount (void) constโ what's the ref count at? ๐ขvoid touch (void)โ touch it, so it knows it changed. ๐SbBool isOfType (SoType type) constโ Returns TRUE if the type of this object is either of the same type or inherited from type. โvirtual SbName getName (void) constโ get the name. ๐virtual void setName (const SbName &newname)โ set the name. โ๏ธvoid addAuditor (void *const auditor, const SoNotRec::Type type)โ add an auditor of the givenSoNotRec::Type. ๐void removeAuditor (void *const auditor, const SoNotRec::Type type)โ remove that auditor. ๐ชconst SoAuditorList & getAuditors (void) constโ get the whole auditor list. ๐SbBool shouldWrite (void)โ should this be written out? ๐คทvoid assertAlive (void) constโ assert that it's still alive. ๐โก๏ธ๐
โญ Static Public Member Functions โญ
The static ones that belong to SoSphere itself:
static SoType getClassTypeId (void)โ the class'sSoType. ๐ชชstatic void initClass (void)โ initialize the class. ๐
๐ Static Public Member Functions inherited from SoShape ๐
static SoType getClassTypeId (void)โ theSoTypeforSoShape. ๐ชชstatic void initClass (void)โ Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system. ๐งฌstatic void getScreenSize (SoState *const state, const SbBox3f &boundingbox, SbVec2s &rectsize)โ computes the screen size from a bounding box. ๐ฅ๏ธstatic float getDecimatedComplexity (SoState *state, float complexity)โ returns the decimated complexity as afloat. ๐static SoType getClassTypeId (void)โ (yes, it's listed again in the source, and we keep it, because every single detail stays, periodt). ๐ฏ
๐ง Static Public Member Functions inherited from SoNode ๐ง
static uint32_t getCompatibilityTypes (const SoType &nodetype)โ compatibility types for a node type. ๐คstatic SoType getClassTypeId (void)โ theSoTypeforSoNode. ๐ชชstatic SoNode * getByName (const SbName &name)โ look up a node by name. ๐static int getByName (const SbName &name, SoNodeList &l)โ look up by name, collect into anSoNodeList. ๐๏ธstatic void initClass (void)โ Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system. ๐งฌstatic void initClasses (void)โ plural. initializes the classes. ๐งฌ๐งฌstatic SbUniqueId getNextNodeId (void)โ the next node id in line. ๐ขstatic int getActionMethodIndex (const SoType type)โ action method index for a type. ๐บ๏ธstatic void getBoundingBoxS (SoAction *action, SoNode *node)โ the static bounding box handler. ๐ฆstatic void GLRenderS (SoAction *action, SoNode *node)โ the static GL render handler. ๐๏ธstatic void callbackS (SoAction *action, SoNode *node)โ the static callback handler. ๐static void getMatrixS (SoAction *action, SoNode *node)โ the static matrix handler. ๐งฎstatic void handleEventS (SoAction *action, SoNode *node)โ the static event handler. ๐ฑ๏ธstatic void pickS (SoAction *action, SoNode *node)โ the static pick handler. ๐static void rayPickS (SoAction *action, SoNode *node)โ the static ray pick handler. ๐ฏstatic void searchS (SoAction *action, SoNode *node)โ the static search handler. ๐static void writeS (SoAction *action, SoNode *node)โ the static write handler. โ๏ธstatic void audioRenderS (SoAction *action, SoNode *node)โ the static audio render handler. ๐static void getPrimitiveCountS (SoAction *action, SoNode *node)โ the static primitive count handler. ๐
๐ Static Public Member Functions inherited from SoFieldContainer ๐
static void initClass (void)โ Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system. ๐งฌstatic SoType getClassTypeId (void)โ This static method returns theSoTypeobject associated with objects of this class. ๐ชชstatic void cleanupClass (void)โ clean up the class. ๐งผstatic void initCopyDict (void)โ set up the copy dictionary. ๐๏ธstatic void addCopy (const SoFieldContainer *orig, const SoFieldContainer *copy)โ register an original/copy pair. ๐static SoFieldContainer * checkCopy (const SoFieldContainer *orig)โ check the copy for an original. ๐static SoFieldContainer * findCopy (const SoFieldContainer *orig, const SbBool copyconnections)โ find a copy, with thecopyconnectionsflag. ๐static void copyDone (void)โ copying is done, wrap it up. ๐
๐ Static Public Member Functions inherited from SoBase ๐
static void initClass (void)โ Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system. ๐งฌstatic SoType getClassTypeId (void)โ This static method returns theSoTypeobject associated with objects of this class. ๐ชชstatic void addName (SoBase *const base, const char *const name)โ give a base a name. ๐ท๏ธstatic void removeName (SoBase *const base, const char *const name)โ take that name away. ๐งฝstatic void incrementCurrentWriteCounter (void)โ bump the write counter. โฌ๏ธstatic void decrementCurrentWriteCounter (void)โ drop the write counter. โฌ๏ธstatic SoBase * getNamedBase (const SbName &name, SoType type)โ find a named base of a type. ๐static int getNamedBases (const SbName &name, SoBaseList &baselist, SoType type)โ find named bases into anSoBaseList. ๐๏ธstatic SbBool read (SoInput *input, SoBase *&base, SoType expectedtype)โ read a base from input. ๐static void setInstancePrefix (const SbString &c)โ set the instance prefix string. ๐คstatic void setTraceRefs (SbBool trace)โ turn ref tracing on or off. ๐ต๏ธstatic SbBool getTraceRefs (void)โ is ref tracing on? ๐ต๏ธโโ๏ธstatic SbBool connectRoute (SoInput *input, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname)โ wire up a route from one node/field to another. ๐static SbBool readRoute (SoInput *input)โ read a route from input. ๐๐
๐ Public Attributes ๐
One (1) public attribute and she is carrying the whole shape on her back:
SoSFFloat radiusโ the radius, as anSoSFFloat. ๐
๐ Protected Member Functions ๐
The behind-the-scenes girlies. You don't call these directly, but they're doing the work:
virtual const SoFieldData * getFieldData (void) constโ returns the field data. ๐๏ธvirtual ~SoSphere ()โ the destructor. ๐ญvirtual void generatePrimitives (SoAction *action)โ generates the primitives. ๐งฑvirtual void computeBBox (SoAction *action, SbBox3f &box, SbVec3f ¢er)โ computes the bounding box and center. ๐ฆ๐
๐ธ Protected Member Functions inherited from SoShape ๐ธ
SoShape (void)โ constructor. โจvirtual ~SoShape ()โ destructor. ๐ญfloat getComplexityValue (SoAction *action)โ the complexity value, as afloat. ๐virtual SbBool shouldGLRender (SoGLRenderAction *action)โ should this actually GL render? ๐คvoid beginSolidShape (SoGLRenderAction *action)โ begin a solid shape. ๐ฃvoid endSolidShape (SoGLRenderAction *action)โ end a solid shape. ๐void GLRenderBoundingBox (SoGLRenderAction *action)โ GL render the bounding box. ๐ฆSbBool shouldPrimitiveCount (SoGetPrimitiveCountAction *action)โ should it count primitives? ๐ขSbBool shouldRayPick (SoRayPickAction *const action)โ should it ray pick? ๐ฏvoid computeObjectSpaceRay (SoRayPickAction *const action)โ compute the ray in object space. ๐void computeObjectSpaceRay (SoRayPickAction *const action, const SbMatrix &matrix)โ same thing, but with a matrix. ๐๐งฎvirtual SoDetail * createTriangleDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, const SoPrimitiveVertex *v3, SoPickedPoint *pp)โ makes the detail for a picked triangle. ๐บvirtual SoDetail * createLineSegmentDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, SoPickedPoint *pp)โ makes the detail for a picked line segment. โvirtual SoDetail * createPointDetail (SoRayPickAction *action, const SoPrimitiveVertex *v, SoPickedPoint *pp)โ makes the detail for a picked point. โซvoid invokeTriangleCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2, const SoPrimitiveVertex *const v3)โ fire off the triangle callbacks. ๐บ๐ฃvoid invokeLineSegmentCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2)โ fire off the line segment callbacks. โ๐ฃvoid invokePointCallbacks (SoAction *const action, const SoPrimitiveVertex *const v)โ fire off the point callbacks. โซ๐ฃvoid beginShape (SoAction *const action, const TriangleShape shapetype, SoDetail *const detail=NULL)โ begin a shape;detaildefaults toNULL. ๐ขvoid shapeVertex (const SoPrimitiveVertex *const v)โ feed in a shape vertex. ๐ทvoid endShape (void)โ end the shape. ๐ดvoid generateVertex (SoPrimitiveVertex *const pv, const SbVec3f &point, const SbBool useTexFunc, const SoMultiTextureCoordinateElement *const tce, const float s, const float t, const SbVec3f &normal)โ generate a vertex withs,tand a normal. โจvoid generateVertex (SoPrimitiveVertex *const pv, const SbVec3f &point, const SbBool useTexFunc, const SoMultiTextureCoordinateElement *const tce, const float s, const float t, const float r, const SbVec3f &normal)โ the other overload:s,t,r, and a normal. โจโจSbBool startVertexArray (SoGLRenderAction *action, const SoCoordinateElement *coords, const SbVec3f *pervertexnormals, const SbBool texpervertex, const SbBool colorpervertex)โ start the vertex array. ๐ฉvoid finishVertexArray (SoGLRenderAction *action, const SbBool vbo, const SbBool normpervertex, const SbBool texpervertex, const SbBool colorpervertex)โ finish the vertex array. ๐
๐ง Protected Member Functions inherited from SoNode ๐ง
SoNode (void)โ constructor. โจvirtual ~SoNode ()โ destructor. ๐ญvirtual SbBool readInstance (SoInput *in, unsigned short flags)โ read an instance from input, withflags. ๐
๐ Protected Member Functions inherited from SoFieldContainer ๐
SoFieldContainer (void)โ constructor. โจvirtual ~SoFieldContainer ()โ destructor. ๐ญ
and bestie, that is genuinely only part one of this page ๐
๐ซถ Protected Member Functions inherited from SoBase ๐ซถ
these are the freebies, bestie โ inherited straight from SoBase, zero extra lore attached:
SoBase (void)โ the constructor, gifted to you ๐virtual ~SoBase ()โ the destructor, also giftedvirtual void destroy (void)โ no description in the docs, just vibes โจSbBool hasMultipleWriteRefs (void) constโ signature only, no teaSbBool writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) constโ yep, that's the whole signaturevoid writeFooter (SoOutput *out) constโ again, just the signaturevirtual const char * getFileFormatName (void) constโ no blurb givenvirtual SoNotRec createNotRec (void)โ same, no blurb
โจ Static Protected Member Functions โจ
static const SoFieldData ** getFieldDataPtr (void)โ the class's own one, no description provided
๐ธ Static Protected Member Functions inherited from SoShape ๐ธ
static const SoFieldData ** getFieldDataPtr (void)โ same name, different ancestor, still no description
๐ฆ Static Protected Member Functions inherited from SoNode ๐ฆ
static const SoFieldData ** getFieldDataPtr (void)โ yes, another one, the docs stay silentstatic void setNextActionMethodIndex (int index)โ no description givenstatic int getNextActionMethodIndex (void)โ no description givenstatic void incNextActionMethodIndex (void)โ no description givenstatic void setCompatibilityTypes (const SoType &nodetype, const uint32_t bitmask)โ no description given
๐ Static Protected Member Functions inherited from SoBase ๐
static uint32_t getCurrentWriteCounter (void)โ no description givenstatic void staticDataLock (void)โ no description givenstatic void staticDataUnlock (void)โ no description given
๐ Additional Inherited Members ๐
๐ Public Types inherited from SoShape ๐
enum TriangleShape { TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES, POLYGON,
QUADS, QUAD_STRIP, POINTS, LINES, LINE_STRIP }
๐ Public Types inherited from SoNode ๐
enum NodeType { INVENTOR = 0x0000, VRML1 = 0x0001, VRML2 = 0x0002,
INVENTOR_1 = 0x0004, INVENTOR_2_0 = 0x0008, INVENTOR_2_1 = 0x0010,
INVENTOR_2_5 = 0x0020, INVENTOR_2_6 = 0x0040, COIN_1_0 = 0x0080,
COIN_2_0 = 0x0100, EXTENSION = 0x0200, COIN_2_2 = 0x0400, COIN_2_3 =
0x0800, COIN_2_4 = 0x1000, INVENTOR_5_0 = 0x2000, COIN_2_5 = 0x4000,
COIN_3_0 = 0x8000, INVENTOR_6_0 = 0x10000, COIN_4_0 = 0x20000 }
๐ Protected Types inherited from SoBase ๐
enum BaseFlags { IS_ENGINE = 0x01, IS_GROUP = 0x02 }
๐ Protected Attributes inherited from SoNode ๐
SbUniqueId uniqueId
๐ Protected Attributes inherited from SoFieldContainer ๐
SbBool isBuiltIn
๐ Static Protected Attributes inherited from SoNode ๐
static SbUniqueId nextUniqueId = 1static int nextActionMethodIndex = 0
๐ Detailed Description ๐
so like, SoSphere is the class for rendering sphere shapes. that's the whole job, and it does it gorgeously ๐ซถ
it renders a sphere with the size given by the SoSphere::radius field. and it's rendered with the current material, texture and draw style settings โ if any exist, that is; otherwise the default settings get used instead โจ
the SoSphere node class exists as a convenient abstraction so you, the application programmer, can use "complex" shapes of this type without having to do the tessellation to polygons and other low level programming herself. periodt, that's the gift ๐
๐ก a good trick for rendering ellipsoidal 3D shapes: use anSoSphereprefixed with anSoScaletransformation to "flatten" it along one or more of the principal axes. (I.e., use for instance anSoScalenode withSoScale::scaleFactorequal to[1, 1, 0.1]to flatten it along the Z direction.) slay ๐ฆ
a sphere gets visualized by the underlying rendering system by first tessellating the conceptual sphere into a set of polygons. to control the trade-off between an as much as possible correct visual appearance of the sphere versus fast rendering, use an SoComplexity node to influence the number of polygons generated from the tessellation process. (the higher the complexity value, the more polygons will be generated, the more rounded the sphere will look.) so set the SoComplexity::value field to whatever you believe would be a good trade-off between correctness and speed for your particular application ๐
FILE FORMAT/DEFAULTS:
Sphere {
radius 1
}
๐ See also ๐
SoConeSoCylinderSoCube
๐ Constructor & Destructor Documentation ๐
โญ SoSphere::SoSphere (void )
Constructor. that's it, that's the note ๐
โญ SoSphere::~SoSphere () [protected], [virtual]
Destructor. also that's the whole note ๐ซถ
๐ฅ Member Function Documentation ๐ฅ
โญ SoType SoSphere::getClassTypeId (void ) [static]
This static method returns the SoType object associated with objects of this class.
โญ SoType SoSphere::getTypeId (void ) const [virtual]
Returns the type identification of an object derived from a class inheriting SoBase. This is used for runtime type checking and "downward" casting.
Reimplemented from SoShape.
โญ const SoFieldData ** SoSphere::getFieldDataPtr (void ) [static], [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
Returns the SoFieldData class which holds information about fields in this node.
โญ const SoFieldData * SoSphere::getFieldData (void ) const [protected], [virtual]
Returns a pointer to the class-wide field data storage object for this instance. If no fields are present, returns NULL.
Reimplemented from SoShape.
โญ void SoSphere::initClass (void ) [static]
no description in the docs for this one, bestie โ the signature is the whole story ๐
โญ void SoSphere::GLRender (SoGLRenderAction * action) [virtual]
Action method for the SoGLRenderAction.
This is called during rendering traversals. Nodes influencing the rendering state in any way or want to throw geometry primitives at OpenGL override this method.
Reimplemented from SoShape.
โญ void SoSphere::rayPick (SoRayPickAction * action) [virtual]
Calculates picked point based on primitives generated by subclasses.
Reimplemented from SoShape.
โญ void SoSphere::getPrimitiveCount (SoGetPrimitiveCountAction * action) [virtual]
Action method for the SoGetPrimitiveCountAction.
Calculates the number of triangle, line segment and point primitives for the node and adds these to the counters of the action.
Nodes influencing how geometry nodes calculate their primitive count also override this method to change the relevant state variables.
Reimplemented from SoShape.
โญ void SoSphere::generatePrimitives (SoAction * action) [protected], [virtual]
The method implements action behavior for shape nodes for SoCallbackAction. It is invoked from SoShape::callback(). (Subclasses should not override SoNode::callback().)
The subclass implementations uses the convenience methods SoShape::beginShape(), SoShape::shapeVertex(), and SoShape::endShape(), with SoDetail instances, to pass the primitives making up the shape back to the caller.
Implements SoShape.
โญ void SoSphere::computeBBox (SoAction * action, SbBox3f & box, SbVec3f & center) [protected], [virtual]
Implemented by SoShape subclasses to let the SoShape superclass know the exact size and weighted center point of the shape's bounding box.
The bounding box and center point should be calculated and returned in the local coordinate system.
The method implements action behavior for shape nodes for SoGetBoundingBoxAction. It is invoked from SoShape::getBoundingBox(). (Subclasses should not override SoNode::getBoundingBox().)
The box parameter sent in is guaranteed to be an empty box, while center is undefined upon function entry. ๐
Implements SoShape.
๐ Member Data Documentation ๐
โญ SoSFFloat SoSphere::radius
Radius of sphere. Default value is 1.0.
๐ Author ๐
Generated automatically by Doxygen for Coin from the source code.
and that's the whole page, bestie ๐ซถ version 4.0.10, dated Thu Jun 25 2026 00:00:00, and you're reading SoSphere(3) โจ mwah ๐
๐ฆ where this page comes from
- fedora 43: Coin4-devel 4.0.10-1.fc43 ยท BSD-3-Clause AND GPL-3.0-or-later
- fedora 43: Coin4-devel 4.0.10-1.fc43 ยท BSD-3-Clause AND GPL-3.0-or-later
- fedora 44: Coin4-devel 4.0.10-1.fc44 ยท BSD-3-Clause AND GPL-3.0-or-later
- fedora 44: Coin4-devel 4.0.10-1.fc44 ยท BSD-3-Clause AND GPL-3.0-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms