Added polygone with a hole to Root converter

This commit is contained in:
Alexander Nozik 2023-10-07 15:42:03 +03:00
parent c7640a686a
commit 52d346453c
3 changed files with 23 additions and 15 deletions

View File

@ -188,7 +188,7 @@ private fun SolidGroup.addShape(
} }
"TGeoPgon" -> { "TGeoPgon" -> {
//TODO add a inner polygone layer
val fDphi by shape.meta.double(0.0) val fDphi by shape.meta.double(0.0)
val fNz by shape.meta.int(2) val fNz by shape.meta.int(2)
val fPhi1 by shape.meta.double(360.0) val fPhi1 by shape.meta.double(360.0)
@ -201,19 +201,26 @@ private fun SolidGroup.addShape(
val startphi = degToRad(fPhi1) val startphi = degToRad(fPhi1)
val deltaphi = degToRad(fDphi) val deltaphi = degToRad(fDphi)
extruded(name) { fun Shape2DBuilder.pGon(radius: Double){
(0..<fNedges).forEach {
val phi = deltaphi / fNedges * it + startphi
point(radius * cos(phi), radius * sin(phi))
}
}
surface(name) {
//getting the radius of first //getting the radius of first
require(fNz > 1) { "The polyhedron geometry requires at least two planes" } require(fNz > 1) { "The polyhedron geometry requires at least two planes" }
val baseRadius = fRmax[0] for (index in 0 until fNz){
shape { layer(
(0..<fNedges).forEach { fZ[index],
val phi = deltaphi / fNedges * it + startphi innerBuilder = {
point(baseRadius * cos(phi), baseRadius * sin(phi)) pGon(fRmin[index])
} },
} outerBuilder = {
(0 until fNz).forEach { index -> pGon(fRmax[index])
//scaling all radii relative to first layer radius }
layer(fZ[index], scale = fRmax[index] / baseRadius) )
} }
}.apply(block) }.apply(block)
} }

View File

@ -14,6 +14,7 @@ fun main() = makeVisionFile {
polygon(8, 100) polygon(8, 100)
} }
layer(-30) layer(-30)
layer(0, x = 10, y = 10)
layer(30) layer(30)
} }
} }

View File

@ -10,9 +10,9 @@ fun main() = makeVisionFile {
solid { solid {
ambientLight() ambientLight()
surface("surface") { surface("surface") {
layer(0, {polygon(8,10)}, {polygon(8,20)}) layer(0, { polygon(8, 10) }, { polygon(8, 20) })
layer(10, {polygon(8,10)}, {polygon(8,30)}) layer(10, { polygon(8, 20) }, { polygon(8, 30) })
layer(20, { polygon(8, 10) }, { polygon(8, 20) })
} }
} }
} }