Thank you sir for the reply
Here, I would like to add some information while answering your question.
First, this is how my building looks in 3D:

Next, I managed to get the ElementId of the spcific column with 19 corners (the ID is 297426), it is highlighted below:
The highlighted column w/ 19 corners
The respective column in Isolated View
the column viewed from top of the 3D view that has been cut down by section box
zoomed in
The column seems rectangular to me, is there any cuts caused by touching with other elements? (beams or slabs?)
I used both RevitLookup and the debug mode in C# in order to check the content of the GeometryElement of the Column and it gave the following output:
- The Column has one GeometryInstance and 2 Solids
- The GeometryInstance does not contain any SymbolGeometry (as shown in RevitLookup with non-bold texts)

- The first Solid contains 6 Faces (which should be correct)
- The first Face contains 4 Edges
- The second Face contains 8 Edges (image as shown)

- The third Face contains 7 Edges
- The fourth Face contains 7 Edges
- The fifth Face contains 8 Edges
- The sixth Face contains 12 Edges
- The second Solid contain no Faces
From the result, it should be clear that there is something wrong with the Edges.
Below, I also attached the ExternalCommand Code that I used, most of them are adapted from Building Coder
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
class Tester4 : IExternalCommand
{
Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
Autodesk.Revit.Creation.Application app = commandData.Application.Application.Create;
View currentView = doc.ActiveView;
Options geomOpts = new Options();
#region Column Vertices Tester
IList<FamilyInstance> columnList = GetAllRevitColumns(doc);
foreach (FamilyInstance column in columnList)
{
Solid solid = GetSolid(column, geomOpts);
Dictionary<XYZ, int> corners = GetCorners(solid);
}
#endregion
return Result.Succeeded;
}
public static IList<FamilyInstance> GetAllRevitColumns(Document M_doc)
{
// Category Filter
BuiltInCategory[] bics = new BuiltInCategory[] {
BuiltInCategory.OST_StructuralColumns,
BuiltInCategory.OST_Columns
};
IList<ElementFilter> categoryFilterList = new List<ElementFilter>();
foreach (BuiltInCategory category in bics)
{
categoryFilterList.Add(new ElementCategoryFilter(category));
}
LogicalOrFilter elementCategoryFilter = new LogicalOrFilter(categoryFilterList);
// Collector (Quick Filters)
FilteredElementCollector columnCtor = new FilteredElementCollector(M_doc)
.WherePasses(elementCategoryFilter)
.WhereElementIsNotElementType();
IList<FamilyInstance> filteredColumnList = columnCtor
.Cast<FamilyInstance>()
.ToList();
return filteredColumnList;
}
/// <summary>
/// Define equality for Revit XYZ points.
/// Very rough tolerance, as used by Revit itself.
/// </summary>
class XyzEqualityComparer : IEqualityComparer<XYZ>
{
const double _sixteenthInchInFeet
= 1.0 / (16.0 * 12.0);
public bool Equals(XYZ p, XYZ q)
{
return p.IsAlmostEqualTo(q,
_sixteenthInchInFeet);
}
public int GetHashCode(XYZ p)
{
return Util.PointString(p).GetHashCode();
}
}
/// <summary>
/// Return all the "corner" vertices of a given solid.
/// Note that a circle in Revit consists of two arcs
/// and will return a "corner" at each of the two arc
/// end points.
/// </summary>
Dictionary<XYZ, int> GetCorners(Solid solid)
{
Dictionary<XYZ, int> corners
= new Dictionary<XYZ, int>(
new XyzEqualityComparer());
foreach (Face f in solid.Faces)
{
foreach (EdgeArray ea in f.EdgeLoops)
{
foreach (Edge e in ea)
{
XYZ p = e.AsCurveFollowingFace(f)
.GetEndPoint(0);
if (!corners.ContainsKey(p))
{
corners[p] = 0;
}
++corners[p];
}
}
}
return corners;
}
/// <summary>
/// Retrieve the first non-empty solid found for
/// the given element. In case the element is a
/// family instance, it may have its own non-empty
/// solid, in which case we use that. Otherwise we
/// search the symbol geometry. If we use the
/// symbol geometry, we have to keep track of the
/// instance transform to map it to the actual
/// instance project location.
/// </summary>
Solid GetSolid(Element e, Options opt)
{
GeometryElement geo = e.get_Geometry(opt);
Solid solid = null;
GeometryInstance inst = null;
Transform t = Transform.Identity;
// Some columns have no solids, and we have to
// retrieve the geometry from the symbol;
// others do have solids on the instance itself
// and no contents in the instance geometry
// (e.g. in rst_basic_sample_project.rvt).
foreach (GeometryObject obj in geo)
{
solid = obj as Solid;
if (null != solid
&& 0 < solid.Faces.Size)
{
break;
}
inst = obj as GeometryInstance;
}
if (null == solid && null != inst)
{
geo = inst.GetSymbolGeometry();
t = inst.Transform;
foreach (GeometryObject obj in geo)
{
solid = obj as Solid;
if (null != solid
&& 0 < solid.Faces.Size)
{
break;
}
}
}
return solid;
}
I also attached my Revit Project along with this reply. Should you need more information, I would be glad to add more. Thank you