This document is archived and information here might be outdated.  Recommended version.


How to create a new feature class in a feature dataset (ArcObjects .NET 10.6 SDK)
ArcObjects Help for .NET developers > Appendix: ArcObjects in Visual C++ > Samples > Geodatabase > Schema creation and management > How to create a new feature class in a feature dataset (ArcObjects .NET 10.6 SDK)

How to create a new feature class in a feature dataset


This sample will demonstrate how to create a feature class in a geodatabase dataset. This function has many optional arguments to assist the developer by providing default values. 
This will not work with an ARC/INFO coverage as the feature dataset.

How to use

  1. Paste the function in your project.
  2. Call the function from your code.
[VCPP]
HRESULT createDatasetFeatureClass(IFeatureDataset *pFDS, BSTR bstrName,
  esriFeatureType featType, IFeatureClass **ppFeatureClass, esriGeometryType
  geomType=esriGeometryPoint, IFields *pfields=0, IUID *pCLSID=0, IUID
  *pCLSEXT=0, BSTR bstrConfigWord=L "")
{
  //
  // createDatasetFeatureClass: simple helper to create a featureclass in a geodatabase Dataset.
  // NOTE: when creating a feature class in a dataset the spatial reference is inherited 
  // from the dataset object
  //
  if (!pFDS)
    return E_POINTER;

  CComBSTR bstrLocalName(bstrName);
  if (bstrLocalName == L "")
    return E_POINTER;

  IUIDPtr ipCLSID(pCLSID);
  if (0 == pCLSID)
  {
    ipCLSID.CreateInstance(CLSID_UID);

    // determine the appropriate geometry type corresponding the the feature type
    switch (featType)
    {
      case esriFTSimple:
        ipCLSID->put_Value(CComVariant(L 
          "{d4803ef8-79f4-11d0-97fc-0080c7f79481}")); // IFeature's GUID
        break;
      case esriFTSimpleJunction:
        geomType=esriGeometryPoint;
        ipCLSID->put_Value(CComVariant(L 
          "{f366a3fa-5362-11d2-ab1b-000000000000}")); 
          // ISimpleJunctionFeature's GUID
        break;
      case esriFTComplexJunction:
        ipCLSID->put_Value(CComVariant(L 
          "{66f783ae-ea1b-11d1-aa91-00c04fa37b81}")); 
          // IComplexJunctionFeature's GUID
        break;
      case esriFTSimpleEdge:
        geomType=esriGeometryPolyline;
        ipCLSID->put_Value(CComVariant(L 
          "{8ae6975e-ea99-11d1-aecc-0000f80372b4}")); 
          // ISimpleEdgeFeature's GUID
        break;
      case esriFTComplexEdge:
        geomType=esriGeometryPolyline;
        ipCLSID->put_Value(CComVariant(L 
          "{c87be760-da2a-11d1-aeba-0000f80372b4}")); 
          // IComplexEdgeFeature's GUID
        break;
      case esriFTAnnotation:
        return E_FAIL;
      default:
        return E_FAIL;
    }
  }

  // establish a fields collection
  IFieldPtr ipField;
  IFieldsPtr ipFields(pfields);
  if (0 == ipFields)
  {
    ipFields.CreateInstance(CLSID_Fields);
    IFieldsEditPtr ipFieldsEdit(ipFields);

    // create the geometry field
    IGeometryDefPtr ipGeomDef(CLSID_GeometryDef);
    IGeometryDefEditPtr ipGeomDefEdit(ipGeomDef);

    // assign the geometry definiton properties.
    ipGeomDefEdit->put_GeometryType(geomType);
    ipGeomDefEdit->put_GridCount(1);
    ipGeomDefEdit->put_GridSize(0, 10);
    ipGeomDefEdit->put_AvgNumPoints(2);
    ipGeomDefEdit->put_HasM(VARIANT_FALSE);
    ipGeomDefEdit->put_HasM(VARIANT_FALSE);

    ipField.CreateInstance(CLSID_Field);
    IFieldEditPtr ipFieldEdit(ipField);

    ipFieldEdit->put_Name(CComBSTR(L "shape"));
    ipFieldEdit->put_AliasName(CComBSTR(L "geometry"));
    ipFieldEdit->put_Type(esriFieldTypeGeometry);
    ipFieldEdit->putref_GeometryDef(ipGeomDef);
    ipFieldsEdit->AddField(ipField);

    // create the object id field
    ipField.CreateInstance(CLSID_Field);
    ipFieldEdit=ipField;
    ipFieldEdit->put_Name(CComBSTR(L "OBJECTID"));
    ipFieldEdit->put_AliasName(CComBSTR(L "object identifier"));
    ipFieldEdit->put_Type(esriFieldTypeOID);
    ipFieldsEdit->AddField(ipField);
  }

  // locate the shape field
  CComBSTR bstrShapeFld;
  esriFieldType fieldType;
  long lNumFields;
  ipFields->get_FieldCount(&lNumFields);
  for (int i=0; i lt; lNumFields; ++i)
  {
    ipFields->get_Field(i, &ipField);
    ipField->get_Type(&fieldType);
    if (esriFieldTypeGeometry == fieldType)
    {
      ipField->get_Name(&bstrShapeFld);
    }
  }

  HRESULT hr;
  hr=pFDS->CreateFeatureClass(bstrName, ipFields, ipCLSID, pCLSEXT, featType,
    bstrShapeFld, bstrConfigWord, ppFeatureClass);
  return hr;
}






Development licensing Deployment licensing
Engine Developer Kit Engine