Aligning REVOLVE and BPRISM geometry

Home Forums Problems and solutions in GDL 3D modelling Aligning REVOLVE and BPRISM geometry

This topic contains 6 replies, has 2 voices, and was last updated by  shaun coomber 1 month, 1 week ago.

  • Author
    Posts
  • #18482

    shaun coomber
    Participant

    Hi

    I’ve been having some problems aligning a REVOLVE and a BPRISM_. The BPRISM_ seems to scale strangely when using RESOL. With fewer segments, it scales up slightly and loses alignment with other elements. When using RESOL 360 it aligns perfectly, with RESOL 36 it’s noticibly out of aligmnet, and at RESOL 8 it massively wrong.

    The attached image shows the different between the BPRISM_ (the top section of the profile) and the REVOLVE (bottom section).

    I’ve uploaded the test object to:
    https://cloud.applecoredesigns.co.uk/s/YqpSC4obQ8ptoLW

    Any ideas?

    Cheers
    Shaun

  • #18484

    shaun coomber
    Participant

    It’s OK, I’ve figured it out

  • #18485

    Barry Kelly
    Participant

    It’s OK, I’ve figured it out

    Any hints for those following along?

    Barry.

    Versions 6.5 to 22
    Dell XPS- i7-6700 @ 3.4Ghz, 16GB ram, GeForce GTX 960 (2GB), Windows 10
    Dell Precision M6800 - i7 4700MQ @ 2.40GHz, 16GB RAM, AMD FirePro M6100 (2GB), Windows 7 64bit

  • #18486

    shaun coomber
    Participant

    Hi Barry

    There were a few issues where BPRISM deals with things differently to other commands. The main problem was that ARCHICAD facets BPRISMs completely differently. The attached image shows the original geometry (circle) with how ARCHICAD usually facets (inner hexagon) and an example facet for the bprism (triangle extending to the outside of the circle).

    To get around the problem I had to:
    – multiple the radius of the BPRISM by * cos(180/resolution)
    – multiple the thickness of the BPRISM by * cos(180/resolution)
    – rotate the BPRISM by 180+180/resolution along its axis

    GS HQ also suggested using REVOLVE{2} alongside BPRISM, instead of the basic version of REVOLVE. It seems to be undocumented but REVOLVE{2} behaves in the same way as BPRISM when facetted, instead of like the usual commands.

    However, I’m having a couple of other issues with REVOLVE{2} so you might hear more from me shortly!

    Attachments:
  • #18488

    shaun coomber
    Participant

    Right, my next problem is that REVOLVE{2} is missing the top and base surfaces, which were present with REVOLVE. Image attached, and example GDL below. Any ideas on this would be appreciated…

    ! Attributes

    BUILDING_MATERIAL shellMaterial
    n = REQUEST{2} (“Building_Material_info”, shellMaterial, “gs_bmat_surface”, shellSurface)

    ! Dimensions

    diskWidth = 0.500
    diskHeight = 0.200
    lipWidth = 0.100

    ! REVOLVE

    PUT 0, 0.5*diskWidth, 2,
    0.5*diskHeight, 0.5*diskWidth + lipWidth, 2,
    diskHeight, 0.5*diskWidth, 2

    ROTY -90
    REVOLVE NSP/3, 360, 15, GET(NSP)
    DEL 1

    ! REVOLVE{2}

    PUT 0, 0.5*diskWidth, 2, shellSurface,
    0.5*diskHeight, 0.5*diskWidth + lipWidth, 2, shellSurface,
    diskHeight, 0.5*diskWidth, 2, shellSurface

    ADDZ 1
    ROTY -90
    REVOLVE{2} NSP/4, 0, 360, 15, shellSurface, GET(NSP)
    DEL 2

    Attachments:
  • #18490

    Barry Kelly
    Participant

    The REVOLVE{2} will always close the polygon (first to last point).
    So of you want the surface back to the rotation axis you need to add a point with a 0 (zero) y-position.

    i.e.

    PUT 0, 0.000, 2, shellSurface,
     0, 0.5*diskWidth, 2, shellSurface,
     0.5*diskHeight, 0.5*diskWidth + lipWidth, 2, shellSurface,
     diskHeight, 0.5*diskWidth, 2, shellSurface,
     diskHeight, 0.000, 2, shellSurface
    
    ADDZ 1
     ROTY -90
     REVOLVE{2} NSP/4, 0, 360, 4*1 + 8*1 + 16*1 + 32*1 + 64*0 + 128*0 + 256*0, shellSurface, GET(NSP)
     DEL 2 

    Barry.

    Versions 6.5 to 22
    Dell XPS- i7-6700 @ 3.4Ghz, 16GB ram, GeForce GTX 960 (2GB), Windows 10
    Dell Precision M6800 - i7 4700MQ @ 2.40GHz, 16GB RAM, AMD FirePro M6100 (2GB), Windows 7 64bit

  • #18491

    shaun coomber
    Participant

    The REVOLVE{2} will always close the polygon (first to last point).
    So of you want the surface back to the rotation axis you need to add a point with a 0 (zero) y-position.

    i.e.

    <code class="hljs">PUT 0, 0.000, 2, shellSurface,
     0, 0.5*diskWidth, 2, shellSurface,
     0.5*diskHeight, 0.5*diskWidth + lipWidth, 2, shellSurface,
     diskHeight, 0.5*diskWidth, 2, shellSurface,
     diskHeight, 0.000, 2, shellSurface
    
    ADDZ 1
     ROTY -90
     REVOLVE{2} NSP/4, 0, 360, 4*1 + 8*1 + 16*1 + 32*1 + 64*0 + 128*0 + 256*0, shellSurface, GET(NSP)
     DEL 2 

    Barry.

    That worked perfectly, thank you Barry

You must be logged in to reply to this topic.