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.