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();
 
 
 1266      auto &desc = 
fDesc[sid];
 
 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();
 
 
 1398   if ((nodeid < 0) || (nodeid >= (
int)
fDesc.size()))
 
 1401   auto &desc = 
fDesc[nodeid];
 
 1403   return (desc.sortid < 
fDrawIdCut) && desc.IsVisible() && desc.CanDisplay() && (desc.chlds.empty());
 
 
 1419      hjson = 
"FOUND:RESET";
 
 1426   std::string 
test = find;
 
 1428   if (
test.compare(0, 2, 
"c:") == 0) {
 
 1431   } 
else if (
test.compare(0, 2, 
"m:") == 0) {
 
 1439      return (node.vol > 0) && (
TString(node.GetArg(kind)).
Index(regexp) >= 0);
 
 1478      auto &desc = 
fDesc[sid];
 
 1479      if ((
viscnt[sid] <= 0) && (desc.vol <= 0))
 
 1491         R__LOG_ERROR(
RGeomLog()) << 
"No faces for the shape " << shape->GetName() << 
" class " << shape->ClassName();
 
 1530   bool has_shape = 
true;
 
 1539      for (
auto &s : stack) {
 
 1558            pchlds.emplace_back(cid);
 
 1567      drawing.
visibles.emplace_back(node.
id, seqid, stack);
 
 1576      auto &item = drawing.
visibles.back();
 
 1579      item.color = node.
color;
 
 1584      item.ri = 
sd.rndr_info();
 
 
 1608   for (
auto &
chindx : stack) {
 
 1609      auto &node = 
fDesc[nodeid];
 
 1610      if (
chindx >= (
int)node.chlds.size())
 
 1612      nodeid = node.chlds[
chindx];
 
 
 1625   std::vector<int> stack;
 
 1631      printf(
"Wrong first id\n");
 
 1637   for (
unsigned k = 1; k < ids.size(); ++k) {
 
 1642      if (nodeid >= (
int)
fDesc.size()) {
 
 1643         printf(
"Wrong node id %d\n", nodeid);
 
 1648      auto pos = std::find(chlds.begin(), chlds.end(), nodeid);
 
 1649      if (pos == chlds.end()) {
 
 1650         printf(
"Wrong id %d not a child of %d - fail to find stack num %d\n", nodeid, 
prntid, (
int)chlds.size());
 
 1655      stack.emplace_back(std::distance(chlds.begin(), pos));
 
 
 1669   std::vector<int> res;
 
 
 1687   std::vector<int> ids;
 
 1689   ids.emplace_back(0);
 
 1691   bool failure = 
false;
 
 1693   for (
auto s : stack) {
 
 1694      auto &chlds = 
fDesc[nodeid].chlds;
 
 1695      if (s >= (
int)chlds.size()) {
 
 1700      ids.emplace_back(chlds[s]);
 
 1706      printf(
"Fail to convert stack into list of nodes\n");
 
 
 1720   std::vector<std::string> path;
 
 1723   path.reserve(ids.size());
 
 1725      path.emplace_back(
fDesc[
id].name);
 
 
 1738   std::vector<RGeomNodeBase *> nodes;
 
 1745   for (
auto &desc : 
fDesc)
 
 1747         nodes.emplace_back(&desc);
 
 
 1779         if (node.
id != nodeid)
 
 1785      auto &item = drawing.
visibles.back();
 
 1787      item.color = node.
color;
 
 1800   bool has_shape = 
false, has_raw = 
false;
 
 1805   for (
auto &item : drawing.
visibles) {
 
 1806      item.ri = 
sd.rndr_info();
 
 1817   return has_raw || has_shape;
 
 
 1837   json.SetSkipClassInfo(TClass::GetClass<RGeomDrawing>());
 
 1838   json.SetSkipClassInfo(TClass::GetClass<RGeomNode>());
 
 1839   json.SetSkipClassInfo(TClass::GetClass<RGeomVisible>());
 
 1840   json.SetSkipClassInfo(TClass::GetClass<RGeomShapeRenderInfo>());
 
 1841   json.SetSkipClassInfo(TClass::GetClass<RGeomRawRenderInfo>());
 
 1843   return json.StoreObject(&drawing, TClass::GetClass<RGeomDrawing>()).Data();
 
 
 1855   if (!
giter.Navigate(path))
 
 1858   auto nodeid = 
giter.GetNodeId();
 
 1870   if (!
dnode.chlds.empty()) {
 
 1877   for (
auto &desc : 
fDesc)
 
 1879         desc.vis = 
dnode.vis;
 
 
 1905   std::unique_ptr<RGeomNodeInfo> res;
 
 1915      res = std::make_unique<RGeomNodeInfo>();
 
 1918      res->node_name = node ? node->GetName() : 
"node_name";
 
 1919      res->node_type = node ? node->ClassName() : 
"no class";
 
 1923      TGeoShape *shape = vol ? vol->GetShape() : 
nullptr;
 
 1926         res->shape_name = shape->
GetName();
 
 1930      if (shape && desc.CanDisplay()) {
 
 
 1976   if (!
giter.Navigate(path))
 
 1981   auto nodeid = 
giter.GetNodeId();
 
 1993            if ((
fDesc[nodeid].vis > 0) == 
on)
 
 
 2018   std::vector<std::string> path;
 
 2019   std::string::size_type 
p1 = 0;
 
 2027      if (
p == std::string::npos) {
 
 
 2046      unsigned sz = item.stack.size();
 
 2047      if (stack.size() < 
sz)
 
 2050      for (
unsigned n = 0; 
n < 
sz; ++
n)
 
 2051         if (stack[
n] != item.stack[
n]) {
 
 2057         return item.visible ? 1 : 0;
 
 
 2071   if (!
giter.Navigate(path))
 
 
 2107   auto cfg = TBufferJSON::FromJSON<RGeomConfig>(
json);
 
 
 2145   std::string prefix = 
"   ";
 
 2154      fs << prefix << 
name << 
"SetTopVisible(true);" << std::endl;
 
 2158      fs << prefix << 
name << 
"SetNSegments(" << 
fCfg.
nsegm << 
");" << std::endl;
 
 2160      fs << prefix << 
name << 
"SetDrawOptions(\"" << 
fCfg.
drawopt << 
"\");" << std::endl;
 
 2162      fs << prefix << 
name << 
"SetJsonComp(" << 
fJsonComp << 
");" << std::endl;
 
 2167      fs << prefix << 
name << 
"SetPhysNodeVisibility(";
 
 2168      for (
int i = 0; i < (
int)path.size(); ++i)
 
 2169         fs << (i == 0 ? 
"{\"" : 
", \"") << path[i] << 
"\"";
 
 2170      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
 
A log configuration for a channel, e.g.
 
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 raw data. Will be rebuild when next connection will be established.
 
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.
 
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
 
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...
 
Experimental::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.