Applying a Coordinate System to the center 'handle' of a Sphere (created form simple Surface)

I am collecting point position data from within a range, I have successfully recognized the points from a specific level of a reference file as BsplineSurfaces but am having difficulties placing a Coordinate system (or point) at each surface node center - the follow on from this is to place an ABD object at each point to then report on these in a schedule - the reason I am using GC and ABD to do this is that I have created areas (spaces) which the objects are and can report on the amount of object within an area - the reference file continuously gets updated and a report needed of changes

  • Hi Simon,

    This looks like a great use case for the combination of ABD with GC.

    I am not sure what you mean with "surface node center".  Do you mean the B-spline surfaces' poles?  The centroid of those poles?

    Perhaps a sketch helps identify which of the surfaces' output property or what computation might be needed to achieve what you are looking for.

    Regards,

        Volker

       

  • Hi Volker

    I have downloaded 3 files below, the GC_Sphere_detect file is the GC model which already has the ABD_GC_Sphere file referenced

    This is a simplified version of what I am trying to achieve but provides proof of concept

    ..I have had success with the same model but using a simple circle in the source file and then using the circle node to place the coordinate at the center, unfortunately the files we are receiving have the surface spheres and wanting to make the process simple

    I've added the next step too, to add the ABD component and for this exercise am pointing to the std 'baseplate', but this could be any model or cell created with catalogue data

    The task here is to get the coordinates placed at the center of the spheres detected by the range

    thanks for your interest

    Regards

    Simon 

    ABD_GC_Sphere.dgnGC_Sphere_detect.dgn

    transaction 1 modelChange 'Add baseCS, point1, point2, range1'
    {
        node User.Objects.baseCS Bentley.GC.NodeTypes.CoordinateSystem
        {
            Technique                 = 'AtModelOrigin';
            DGNModelName              = 'Design Model';
            SymbolSize                = 1;
            GraphLocation             = {-413.6, -140.0};
        }
        node User.Objects.point1 Bentley.GC.NodeTypes.Point
        {
            Technique                 = 'ByCartesianCoordinates';
            CoordinateSystem          = baseCS;
            XTranslation              = <free> -10000;
            YTranslation              = <free> -10000;
            ZTranslation              = <free> -20000.0;
            GraphLocation             = <auto> {-139.6, -140.0};
        }
        node User.Objects.point2 Bentley.GC.NodeTypes.Point
        {
            Technique                 = 'ByCartesianCoordinates';
            CoordinateSystem          = baseCS;
            XTranslation              = <free> 100000;
            YTranslation              = <free> 50000;
            ZTranslation              = <free> 20000.0;
            GraphLocation             = <auto> {-139.6, 51.49};
        }
        node User.Objects.range1 Bentley.GC.NodeTypes.Range
        {
            Technique                 = 'ByLowHighRangePoints';
            LowPoint                  = point1;
            HighPoint                 = point2;
            GraphLocation             = <auto> {134.4, -140.0};
        }
    }
    
    transaction 2 modelChange 'Add coordinateSystem1, mesh1'
    {
        node User.Objects.coordinateSystem1 Bentley.GC.NodeTypes.CoordinateSystem
        {
            Technique                 = 'FromElementsInRange';
            ElementRange              = ;
            GraphLocation             = {586.2, -170.7, 0.0, 113.4};
        }
        node User.Objects.mesh1 Bentley.GC.NodeTypes.Mesh
        {
            Technique                 = 'FromElementsInRange';
            ElementRange              = range1;
            GraphLocation             = {346.2, -253.1};
        }
    }
    
    transaction 3 modelChange 'Add bsplineSurface1, coordinateSystem2, direction1, direction2, point3, solid1; change coordinateSystem1; delete mesh1'
    {
        delete User.Objects.mesh1;
        node User.Objects.solid1 Bentley.GC.NodeTypes.Solid
        {
            Technique                 = 'OffsetFromClosedCurve';
            GraphLocation             = <auto> {682.4, -244.3};
        }
        node User.Objects.bsplineSurface1 Bentley.GC.NodeTypes.BSplineSurface
        {
            Technique                 = 'FromElementsInRange';
            ElementRange              = range1;
            GraphLocation             = {353.2, -244.3, 0.0, 113.4};
        }
        node User.Objects.direction1 Bentley.GC.NodeTypes.Direction
        {
            Technique                 = 'ByOriginDirectionPoint';
            GraphLocation             = <auto> {956.4, -244.3};
        }
        node User.Objects.direction2 Bentley.GC.NodeTypes.Direction
        {
            Technique                 = 'ByOriginDirectionPoint';
            GraphLocation             = {551.414, 52.62};
        }
        node User.Objects.point3 Bentley.GC.NodeTypes.Point
        {
            Technique                 = 'ByCartesianCoordinates';
            CoordinateSystem          = ;
            XTranslation              = <free> 0.0;
            YTranslation              = <free> 0.0;
            ZTranslation              = <free> 0.0;
            GraphLocation             = <auto> {1230.4, -244.3};
        }
        node User.Objects.coordinateSystem1 Bentley.GC.NodeTypes.CoordinateSystem
        {
            Technique                 = 'ByCartesianCoordinates';
            XTranslation              = <free> 0.0;
            YTranslation              = <free> 0.0;
            ZTranslation              = <free> 0.0;
            GraphLocation             = <auto> {1504.4, -244.3};
        }
        node User.Objects.coordinateSystem2 Bentley.GC.NodeTypes.CoordinateSystem
        {
            Technique                 = 'FromNode';
            GeometricNode             = bsplineSurface1;
            GraphLocation             = {500.279, -79.405};
        }
    }
    
    transaction 4 modelChange 'Change coordinateSystem2; delete direction2'
    {
        delete User.Objects.direction2;
        node User.Objects.coordinateSystem2 Bentley.GC.NodeTypes.CoordinateSystem
        {
            GraphLocation             = {323.169, 24.123, 174.0, 0.0};
        }
    }
    
    transaction 5 modelChange 'Change baseCS, coordinateSystem2; delete coordinateSystem1, direction1, point3, solid1'
    {
        delete User.Objects.solid1;
        delete User.Objects.direction1;
        delete User.Objects.point3;
        delete User.Objects.coordinateSystem1;
        node User.Objects.baseCS Bentley.GC.NodeTypes.CoordinateSystem
        {
            Technique                 = 'AtModelOrigin';
            DGNModelName              = 'Design Model';
            SymbolSize                = 1;
            GraphLocation             = {-420.755, -137.664};
        }
        node User.Objects.coordinateSystem2 Bentley.GC.NodeTypes.CoordinateSystem
        {
            GraphLocation             = {653.563, -310.418, 174.0, 113.4};
        }
    }
    
    transaction 6 modelChange 'Add buildingContent1, direction1; change coordinateSystem2'
    {
        node User.Objects.coordinateSystem2 Bentley.GC.NodeTypes.CoordinateSystem
        {
            GraphLocation             = {649.612, -323.526, 0.0, 126.097};
        }
        node User.Objects.direction1 Bentley.GC.NodeTypes.Direction
        {
            Technique                 = 'ByOriginDirectionPoint';
            Origin                    = coordinateSystem2;
            DirectionPoint            = coordinateSystem2.YZPlane;
            GraphLocation             = {951.472, -161.007, 0.0, 126.097};
        }
        node User.Objects.buildingContent1 Bentley.GC.NodeTypes.BuildingContent
        {
            Technique                 = 'ByCartesianCoordinates';
            CatalogItem               = {'Base Plate','Baseplate'};
            CoordinateSystem          = coordinateSystem2[0][1][2];
            GraphLocation             = <auto> {949.245, -323.526};
        }
    }
    

  • Hi Simon,

    Thank you for sending the additional files.

    How did you construct the spheres in ABD? 

    To be more specific, when constructing them as solid spheres in ABD (Modeling work flow, Solids tab, Sphere), then they'll be captured in GC as Solid, with the CoordinateSystem.FromNode in the center of the sphere as expected. The spheres that you constructed appear as B-spline surfaces. While a conventional B-spline surface seems to have its CoordinateSystem.FromNode at its UV (0.5, 0.5) position, the spherical B-spline surface seems to be a very special case of B-spline surface and shows its CoordinateSystem.FromNode at 0,0,0, which in your case does not seem helpful.

    For the GC team's benefit it would be great to know how you constructed those spheres so we might be able to identify the reason for the coordinate system locations --and perhaps remedy it to be more consistent with what's expected for B-spline surfaces.

    Cheers,

         Volker

       

  • Hi Simon,

    A working alternative based on your files with the change to solid spheres is attached to this post as ZIP archive.

    HTH,

        Volker

    GC_Sphere_detect2.zip

    PS: if the additional information is confidential, please send it to Volker.Mueller@bentley.com.