101 if (node.chlds.empty())
179 size_t pos = path.find(
'/');
185 while (++pos < path.length()) {
188 pos = path.find(
'/', last);
190 if (pos == std::string::npos)
193 std::string
folder = path.substr(last, pos - last);
202 }
while (!find &&
Next());
212 bool Navigate(
const std::vector<std::string> &path)
216 for (
auto &
folder : path) {
225 }
while (!find &&
Next());
250 std::vector<int> res;
266using namespace std::string_literals;
295 std::vector<RGeomSignalFunc_t>
funcs;
300 if (!handler || (pair.first != handler))
301 funcs.emplace_back(pair.second);
305 for (
auto func :
funcs)
315 fSignals.emplace_back(handler, func);
326 if (handler == iter->first) {
397 for (
int n = 0;
n < 9; ++
n)
506 fNodes.emplace_back(
nullptr);
515 }
while ((
snode = iter()) !=
nullptr);
521 std::vector<RGeomNode *>
sortarr;
526 for (
auto node :
fNodes) {
528 fDesc.emplace_back(node ? node->GetNumber() -
offset : 0);
531 auto &desc =
fDesc[cnt++];
535 desc.name = node ? node->GetName() : vol->
GetName();
539 desc.vol =
TMath::Sqrt(shape->GetDX() * shape->GetDX() + shape->GetDY() * shape->GetDY() +
540 shape->GetDZ() * shape->GetDZ());
546 auto chlds = node ? node->GetNodes() : vol->
GetNodes();
548 PackMatrix(desc.matr, node ? node->GetMatrix() :
nullptr);
551 for (
int n = 0;
n <= chlds->GetLast(); ++
n) {
553 desc.chlds.emplace_back(
chld->GetNumber() -
offset);
559 for (
auto node :
fNodes) {
562 node->SetNumber(number);
571 elem->sortid = cnt++;
585 auto node =
fNodes[nodeid];
587 return node->GetVolume();
597 for (
int nodeid = 0; nodeid < (
int)
fNodes.size(); nodeid++) {
599 auto node =
fNodes[nodeid];
601 auto &desc =
fDesc[nodeid];
603 desc.nochlds =
false;
606 if (!node || node->IsOnScreen())
612 if (node && !node->IsVisDaughters())
615 if ((desc.vis > 0) && (!desc.chlds.empty()) && !desc.nochlds)
619 if (desc.IsVisible() && desc.CanDisplay())
631 for (
auto &node :
fDesc)
637 if (node.idshift < 0) {
639 for (
auto id : node.chlds)
643 return node.idshift + 1;
658 std::vector<int> stack;
669 auto &desc =
fDesc[nodeid];
673 if (desc.nochlds && (
lvl > 0))
680 desc_vis = !
viter->visible ? 0 : (!desc.chlds.empty() ? 1 : 99);
694 auto pos = stack.size();
695 stack.emplace_back(0);
696 for (
unsigned k = 0; k < desc.chlds.size(); ++k) {
702 counter += desc.idshift;
728 for (
auto &node :
fDesc)
729 drawing.
nodes.emplace_back(&node);
734 for (
auto &node :
fDesc)
735 node.useflag =
false;
737 for (
auto &item : drawing.
visibles) {
739 for (
auto &
chindx : item.stack) {
740 auto &node =
fDesc[nodeid];
743 drawing.
nodes.emplace_back(&node);
745 if (
chindx >= (
int)node.chlds.size())
747 nodeid = node.chlds[
chindx];
750 if (nodeid != item.nodeid)
751 printf(
"Nodeid mismatch %d != %d when extracting nodes for visibles\n", nodeid, item.nodeid);
753 auto &node =
fDesc[nodeid];
756 drawing.
nodes.emplace_back(&node);
773 auto request = TBufferJSON::FromJSON<RBrowserRequest>(
msg);
776 request = std::make_unique<RBrowserRequest>();
778 request->number = 100;
786 std::vector<RGeomNodeBase *>
vect(
fDesc.size(),
nullptr);
789 for (
auto &item :
fDesc)
795 res +=
":__PHYSICAL_VISIBILITY__:";
799 res +=
":__SELECTED_STACK__:";
804 bool toplevel = request->path.empty();
808 reply.path = request->path;
809 reply.first = request->first;
818 while ((request->first > 0) && iter.
Next()) {
825 while (iter.
IsValid() && (request->number > 0)) {
836 stack[stack.size() - 1]++;
845 reply.nodes.emplace_back(&
n);
860 if (
descr.fShape == shape)
876 std::unique_ptr<RootCsg::TBaseMesh> res;
884 for (
UInt_t i = 0; i <
b3d->NbPnts(); ++i) {
886 buf[1] =
v[i * 3 + 1];
887 buf[2] =
v[i * 3 + 2];
892 res.reset(RootCsg::ConvertToMesh(*
b3d.get()));
894 auto node =
comp->GetBoolNode();
902 mleft.
Multiply(node->GetLeftMatrix());
903 auto left =
MakeGeoMesh(&mleft, node->GetLeftShape());
905 mright.
Multiply(node->GetRightMatrix());
906 auto right =
MakeGeoMesh(&mright, node->GetRightShape());
909 res.reset(RootCsg::BuildUnion(left.get(), right.get()));
911 res.reset(RootCsg::BuildIntersection(left.get(), right.get()));
913 res.reset(RootCsg::BuildDifference(left.get(), right.get()));
931 return nsegm > min ? nsegm : min;
1026 return (
xtru->GetNz() - 1) *
xtru->GetNvert() * 2 +
xtru->GetNvert() * 3;
1031 if (
para->GetRlo() == 0.)
1033 if (
para->GetRhi() == 0.)
1038 if ((
hype->GetStIn() == 0) && (
hype->GetStOut() == 0))
1045 for (
int i = 0; i <
tess->GetNfacets(); ++i) {
1046 if (
tess->GetFacet(i).GetNvert() == 4)
1057 if (!
comp->GetBoolNode())
1074 if (
elem.nfaces == 0) {
1087 elem.fShapeInfo.shape = shape;
1119 auto v =
mesh->GetVertex(i);
1120 vertices[i * 3] =
v[0];
1121 vertices[i * 3 + 1] =
v[1];
1122 vertices[i * 3 + 2] =
v[2];
1125 elem.fRawInfo.raw.resize(vertices.size() *
sizeof(
float));
1127 memcpy(
reinterpret_cast<char *
>(
elem.fRawInfo.raw.data()), vertices.data(), vertices.size() *
sizeof(
float));
1139 for (
int i = 0; i < 3; ++i)
1175 node.
material = material->GetName();
1177 auto fillstyle = material->GetFillStyle();
1268 if ((
viscnt[
sid] <= 0) || (desc.vol <= 0))
1280 R__LOG_ERROR(
RGeomLog()) <<
"No faces for the shape " << shape->GetName() <<
" class " << shape->ClassName();
1302 bool has_shape =
false;
1304 ScanNodes(
true, level, [&,
this](
RGeomNode &node, std::vector<int> &stack,
bool,
int seqid) {
1306 drawing.visibles.emplace_back(node.id, seqid, stack);
1308 auto &item = drawing.visibles.back();
1309 item.color = node.color;
1310 item.opacity = node.opacity;
1312 auto volume = GetVolume(node.id);
1314 auto &sd = MakeShapeDescr(volume->GetShape());
1316 item.ri = sd.rndr_info();
1399 if ((nodeid < 0) || (nodeid >= (
int)
fDesc.size()))
1402 auto &desc =
fDesc[nodeid];
1404 return (desc.sortid <
fDrawIdCut) && desc.IsVisible() && desc.CanDisplay() && (desc.chlds.empty());
1420 hjson =
"FOUND:RESET";
1427 std::string
test = find;
1429 if (
test.compare(0, 2,
"c:") == 0) {
1432 }
else if (
test.compare(0, 2,
"m:") == 0) {
1440 return (node.vol > 0) && (
TString(node.GetArg(kind)).
Index(regexp) >= 0);
1480 if ((
viscnt[
sid] <= 0) && (desc.vol <= 0))
1492 R__LOG_ERROR(
RGeomLog()) <<
"No faces for the shape " << shape->GetName() <<
" class " << shape->ClassName();
1531 bool has_shape =
true;
1540 for (
auto &s : stack) {
1568 drawing.
visibles.emplace_back(node.
id, seqid, stack);
1577 auto &item = drawing.
visibles.back();
1580 item.color = node.
color;
1585 item.ri =
sd.rndr_info();
1609 for (
auto &
chindx : stack) {
1610 auto &node =
fDesc[nodeid];
1611 if (
chindx >= (
int)node.chlds.size())
1613 nodeid = node.chlds[
chindx];
1626 std::vector<int> stack;
1632 printf(
"Wrong first id\n");
1638 for (
unsigned k = 1; k < ids.size(); ++k) {
1643 if (nodeid >= (
int)
fDesc.size()) {
1644 printf(
"Wrong node id %d\n", nodeid);
1649 auto pos = std::find(chlds.begin(), chlds.end(), nodeid);
1650 if (pos == chlds.end()) {
1651 printf(
"Wrong id %d not a child of %d - fail to find stack num %d\n", nodeid,
prntid, (
int)chlds.size());
1656 stack.emplace_back(std::distance(chlds.begin(), pos));
1670 std::vector<int> res;
1688 std::vector<int> ids;
1690 ids.emplace_back(0);
1692 bool failure =
false;
1694 for (
auto s : stack) {
1695 auto &chlds =
fDesc[nodeid].chlds;
1696 if (s >= (
int)chlds.size()) {
1701 ids.emplace_back(chlds[s]);
1707 printf(
"Fail to convert stack into list of nodes\n");
1721 std::vector<std::string> path;
1724 path.reserve(ids.size());
1726 path.emplace_back(
fDesc[
id].name);
1739 std::vector<RGeomNodeBase *> nodes;
1746 for (
auto &desc :
fDesc)
1748 nodes.emplace_back(&desc);
1780 if (node.
id != nodeid)
1786 auto &item = drawing.
visibles.back();
1788 item.color = node.
color;
1801 bool has_shape =
false, has_raw =
false;
1806 for (
auto &item : drawing.
visibles) {
1807 item.ri =
sd.rndr_info();
1818 return has_raw || has_shape;
1838 json.SetSkipClassInfo(TClass::GetClass<RGeomDrawing>());
1839 json.SetSkipClassInfo(TClass::GetClass<RGeomNode>());
1840 json.SetSkipClassInfo(TClass::GetClass<RGeomVisible>());
1841 json.SetSkipClassInfo(TClass::GetClass<RGeomShapeRenderInfo>());
1842 json.SetSkipClassInfo(TClass::GetClass<RGeomRawRenderInfo>());
1844 return json.StoreObject(&drawing, TClass::GetClass<RGeomDrawing>()).Data();
1856 if (!
giter.Navigate(path))
1859 auto nodeid =
giter.GetNodeId();
1871 if (!
dnode.chlds.empty()) {
1878 for (
auto &desc :
fDesc)
1880 desc.vis =
dnode.vis;
1906 std::unique_ptr<RGeomNodeInfo> res;
1916 res = std::make_unique<RGeomNodeInfo>();
1919 res->node_name = node ? node->GetName() :
"node_name";
1920 res->node_type = node ? node->ClassName() :
"no class";
1924 TGeoShape *shape = vol ? vol->GetShape() :
nullptr;
1927 res->shape_name = shape->
GetName();
1931 if (shape && desc.CanDisplay()) {
1977 if (!
giter.Navigate(path))
1982 auto nodeid =
giter.GetNodeId();
1994 if ((
fDesc[nodeid].vis > 0) ==
on)
2019 std::vector<std::string> path;
2020 std::string::size_type
p1 = 0;
2028 if (
p == std::string::npos) {
2047 unsigned sz = item.stack.size();
2048 if (stack.size() <
sz)
2051 for (
unsigned n = 0;
n <
sz; ++
n)
2052 if (stack[
n] != item.stack[
n]) {
2058 return item.visible ? 1 : 0;
2072 if (!
giter.Navigate(path))
2108 auto cfg = TBufferJSON::FromJSON<RGeomConfig>(
json);
2146 std::string prefix =
" ";
2155 fs << prefix <<
name <<
"SetTopVisible(true);" << std::endl;
2159 fs << prefix <<
name <<
"SetNSegments(" <<
fCfg.
nsegm <<
");" << std::endl;
2161 fs << prefix <<
name <<
"SetDrawOptions(\"" <<
fCfg.
drawopt <<
"\");" << std::endl;
2163 fs << prefix <<
name <<
"SetJsonComp(" <<
fJsonComp <<
");" << std::endl;
2168 fs << prefix <<
name <<
"SetPhysNodeVisibility(";
2169 for (
int i = 0; i < (
int)path.size(); ++i)
2170 fs << (i == 0 ?
"{\"" :
", \"") << path[i] <<
"\"";
2171 fs <<
"}, " << (item.visible ?
"true" :
"false") <<
");" << std::endl;
std::unique_ptr< RootCsg::TBaseMesh > MakeGeoMesh(TGeoMatrix *matr, TGeoShape *shape)
Function produces mesh for provided shape, applying matrix to the result.
#define R__LOG_ERROR(...)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void funcs
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize fs
R__EXTERN TGeoManager * gGeoManager
Reply on browser request.
Iterator of hierarchical geometry structures.
RGeomBrowserIter(RGeomDescription &desc)
std::vector< int > CurrentIds() const
Returns array of ids to currently selected node.
bool Navigate(TGeoVolume *vol)
Navigate to specified volume - find first occurrence.
std::vector< int > fStackChilds
bool Navigate(const std::string &path)
Navigate to specified path - path specified as string and should start with "/".
const std::string & GetMaterial() const
std::vector< int > fStackParents
const std::string & GetColor() const
const std::string & GetName() const
bool Navigate(const std::vector< std::string > &path)
Navigate to specified path
bool showtop
show geometry top volume, off by default
int maxnumfaces
maximal number of faces
int vislevel
visible level
int maxnumnodes
maximal number of nodes
std::string drawopt
draw options for TGeoPainter
int build_shapes
when shapes build on server 0 - never, 1 - TGeoComposite, 2 - plus non-cylindrical,...
int nsegm
number of segments for cylindrical shapes
RGeomConfig fCfg
! configuration parameter editable from GUI
std::vector< std::pair< const void *, RGeomSignalFunc_t > > fSignals
! registered signals
int IsPhysNodeVisible(const std::vector< int > &stack)
Check if there special settings for specified physical node returns -1 if nothing is found.
std::vector< int > fSelectedStack
! selected branch of geometry by stack
void SetMaxVisNodes(int cnt)
Set maximal number of nodes which should be selected for drawing.
std::string ProcessBrowserRequest(const std::string &req="")
Find description object for requested shape If not exists - will be created.
std::vector< RGeomNode > fDesc
! converted description, send to client
void PackMatrix(std::vector< float > &arr, TGeoMatrix *matr)
Pack matrix into vector, which can be send to client Following sizes can be used for vector: 0 - Iden...
bool ProduceDrawingFor(int nodeid, std::string &json, bool check_volume=false)
Produce shape rendering data for given stack All nodes, which are referencing same shape will be tran...
std::unique_ptr< RGeomNodeInfo > MakeNodeInfo(const std::vector< int > &stack)
Change visibility for specified element Returns true if changes was performed.
bool HasDrawData() const
Check if there is draw data available.
std::vector< int > MakeIdsByStack(const std::vector< int > &stack)
Produce list of node ids for given stack If found nodes preselected - use their ids.
int MarkVisible(bool on_screen=false)
Set visibility flag for each nodes.
void SetVisLevel(int lvl=3)
Set maximal visible level.
void IssueSignal(const void *handler, const std::string &kind)
Issue signal, which distributed on all handlers - excluding source handler.
int GetUsedNSegments(int min=20)
Returns really used number of cylindrical segments.
bool IsPrincipalEndNode(int nodeid)
return true when node used in main geometry drawing and does not have childs for such nodes one could...
bool SetSearch(const std::string &query, const std::string &json)
Change search query and belongs to it json string Returns true if any parameter was really changed.
std::vector< RGeomNodeVisibility > fVisibility
! custom visibility flags for physical nodes
bool SelectTop(const std::vector< std::string > &path)
Select top node by path Used by the client to change active node Returns true if selected node was ch...
int GetMaxVisNodes() const
Returns maximal visible number of nodes, ignored when non-positive.
int GetVisLevel() const
Returns maximal visible level.
int GetMaxVisFaces() const
Returns maximal visible number of faces, ignored when non-positive.
void ClearCache()
Clear cached data, need to be clear when connection broken.
void ClearDescription()
Clear geometry description.
std::vector< int > MakeStackByIds(const std::vector< int > &ids)
Creates stack for given array of ids, first element always should be 0.
void SetMaxVisFaces(int cnt)
Set maximal number of faces which should be selected for drawing.
bool IsPreferredOffline() const
Is offline operations preferred.
std::vector< ShapeDescr > fShapes
! shapes with created descriptions
int fJsonComp
! default JSON compression
bool ChangeNodeVisibility(const std::vector< std::string > &path, bool on)
Change visibility for specified element Returns true if changes was performed.
std::string fSearch
! search string in hierarchy
std::string fSearchJson
! drawing json for search
void SavePrimitive(std::ostream &fs, const std::string &name)
Save geometry configuration as C++ macro.
bool ClearAllPhysVisibility()
Reset all custom visibility settings.
std::string MakeDrawingJson(RGeomDrawing &drawing, bool has_shapes=false)
Produce JSON for the drawing If TGeoShape appears in the drawing, one has to keep typeinfo But in thi...
int fActualLevel
! level can be reduced when selecting nodes
TGeoVolume * GetVolume(int nodeid)
Get volume for specified nodeid If specific volume was configured, it will be returned for nodeid==0.
int GetNumNodes() const
Number of unique nodes in the geometry.
void ProduceDrawData()
Collect all information required to draw geometry on the client This includes list of each visible no...
void SetNSegments(int n=0)
Set number of segments for cylindrical shapes, if 0 - default value will be used.
bool SetPhysNodeVisibility(const std::vector< std::string > &path, bool on=true)
Set visibility of physical node by path It overrules TGeo visibility flags - but only for specific ph...
bool ClearPhysNodeVisibility(const std::vector< std::string > &path)
Reset custom visibility of physical node by path.
void BuildDescription(TGeoNode *topnode, TGeoVolume *topvolume)
Build geometry description.
int SearchVisibles(const std::string &find, std::string &hjson, std::string &json)
Search visible nodes for provided name If number of found elements less than 100, create description ...
std::vector< int > fSortMap
! nodes in order large -> smaller volume
std::string ProduceJson(bool all_nodes=false)
Produce JSON string which can be directly used with build function from JSROOT to create three....
void ClearDrawData()
Clear drawing data.
std::vector< std::string > MakePathByStack(const std::vector< int > &stack)
Returns path string for provided stack.
TVirtualMutex * fMutex
! external mutex used to protect all data
void AddSignalHandler(const void *handler, RGeomSignalFunc_t func)
Add signal handler.
bool ChangeConfiguration(const std::string &json)
Change configuration by client Returns true if any parameter was really changed.
void CopyMaterialProperties(TGeoVolume *vol, RGeomNode &node)
Copy material properties.
std::vector< int > MakeStackByPath(const std::vector< std::string > &path)
Produce stack based on string path Used to highlight geo volumes by browser hover event.
int ScanNodes(bool only_visible, int maxlvl, RGeomScanFunc_t func)
Iterate over all nodes and call function for visible.
int IsBuildShapes() const
Returns true if binary 3D model build already by C++ server (default)
void ProduceSearchData()
Produces search data if necessary.
void CollectNodes(RGeomDrawing &drawing, bool all_nodes=false)
Collect nodes which are used in visibles.
int fDrawIdCut
! sortid used for selection of most-significant nodes
TGeoVolume * fDrawVolume
! select volume independent from TGeoManager
int CountShapeFaces(TGeoShape *shape)
Count number of faces for the shape.
ShapeDescr & MakeShapeDescr(TGeoShape *shape)
Find description object and create render information.
void _ClearDrawData()
clear drawing data without locking mutex
ShapeDescr & FindShapeDescr(TGeoShape *shape)
Find description object for requested shape If not exists - will be created.
std::string fDrawJson
! JSON with main nodes drawn by client
void RemoveSignalHandler(const void *handler)
Remove signal handler.
int FindNodeId(const std::vector< int > &stack)
Returns nodeid for given stack array, returns -1 in case of failure.
void ProduceIdShifts()
Count total number of visible childs under each node.
std::string ProduceModifyReply(int nodeid)
Return string with only part of nodes description which were modified Checks also volume.
void ResetRndrInfos()
Reset shape info, which used to pack binary data.
int GetNSegments() const
Return of segments for cylindrical shapes, if 0 - default value will be used.
std::vector< TGeoNode * > fNodes
! flat list of all nodes
int GetJsonComp() const
Returns JSON compression level for data transfer.
void Build(TGeoManager *mgr, const std::string &volname="")
Collect information about geometry hierarchy into flat list like it done in JSROOT ClonedNodes....
Object with full description for drawing geometry It includes list of visible items and list of nodes...
int numnodes
total number of nodes in description
std::vector< RGeomVisible > visibles
all visible items
RGeomConfig * cfg
current configurations
std::vector< RGeomNode * > nodes
all used nodes to display visible items and not known for client
std::string material
name of the material
int sortid
! place in sorted array, to check cuts, or id of original node when used search structures
std::string color
rgb code in hex format
int id
node id, index in array
Full node description including matrices and other attributes.
float opacity
! opacity of the color
A log configuration for a channel, e.g.
const_iterator begin() const
const_iterator end() const
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Color_t GetLineColor() const
Return the line color.
Class for serializing object to and from JavaScript Object Notation (JSON) format.
static TString ToJSON(const T *obj, Int_t compact=0, const char *member_name=nullptr)
@ kSkipTypeInfo
do not store typenames in JSON
void SetCompact(int level)
Set level of space/newline/array compression Lower digit of compact parameter define formatting rules...
The color creation and management class.
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
Composite shapes are Boolean combinations of two or more shape components.
A cone segment is a cone having a range in phi.
The cones are defined by 5 parameters:
The cut tubes constructor has the form:
Matrix class used for computing global transformations Should NOT be used for node definition.
void Multiply(const TGeoMatrix *right)
multiply to the right with an other transformation if right is identity matrix, just return
A hyperboloid is represented as a solid limited by two planes perpendicular to the Z axis (top and bo...
void Skip()
Stop iterating the current branch.
The manager class for any TGeo geometry.
void SetNsegments(Int_t nseg)
Set number of segments for approximating circles in drawing.
Int_t GetNsegments() const
Get number of segments approximating circles.
Geometrical transformation package.
virtual const Double_t * GetTranslation() const =0
TClass * IsA() const override
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
virtual const Double_t * GetScale() const =0
Bool_t IsIdentity() const
virtual const Double_t * GetRotationMatrix() const =0
TGeoMaterial * GetMaterial() const
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
A paraboloid is defined by the revolution surface generated by a parabola and is bounded by two plane...
A polycone is represented by a sequence of tubes/cones, glued together at defined Z planes.
Polygons are defined in the same way as polycones, the difference being just that the segments betwee...
A shape scaled by a TGeoScale transformation.
Base abstract class for all shapes.
virtual Bool_t IsComposite() const
virtual Bool_t IsCylType() const =0
const char * GetName() const override
Get the shape name.
TClass * IsA() const override
virtual TBuffer3D * MakeBuffer3D() const
TGeoSphere are not just balls having internal and external radii, but sectors of a sphere having defi...
The torus is defined by its axial radius, its inner and outer radius.
A tube segment is a tube having a range in phi.
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
TGeoMedium * GetMedium() const
static TGeoMedium * DummyMedium()
TGeoShape * GetShape() const
A TGeoXtru shape is represented by the extrusion of an arbitrary polygon with fixed outline between s...
const char * GetName() const override
Returns name of object.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
Regular expression class.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
RLogChannel & RGeomLog()
Log channel for Geomviewer diagnostics.
std::function< bool(RGeomNode &, std::vector< int > &, bool, int)> RGeomScanFunc_t
std::function< void(const std::string &)> RGeomSignalFunc_t
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.