HOW TO
This example illustrates how to use ArcObjects with C++ to create a polyline feature programmatically.
Code:
HRESULT loadRandomData(IFeatureClass * pFeatureClass, long numPts)
{
// start editing on the workspace
IDatasetPtr ipDataset(pFeatureClass);
IWorkspacePtr ipWksp;
ipDataset->get_Workspace(&ipWksp);
IWorkspaceEditPtr ipWkspEdit(ipWksp);
ipWkspEdit->StartEditing(VARIANT_TRUE);
ipWkspEdit->StartEditOperation();
// Add rows using an insert cursor vs. create feature..
IFeatureCursorPtr ipFeatureCursor;
if (FAILED(pFeatureClass->Insert(VARIANT_TRUE,
&ipFeatureCursor)))
{
ipWkspEdit->AbortEditOperation();
ipWkspEdit->StopEditing(VARIANT_FALSE);
return E_FAIL;
}
// seed the random number generator..
srand( (unsigned)time( NULL ) );
CComVariant varID;
IPolylinePtr ipLine(CLSID_Polyline);
IPointCollectionPtr ipPoints(ipLine);
IPointPtr ipPoint;
IFeatureBufferPtr ipFeatureBuffer;
double x, y;
for(long i=0;i<numPts;i++)
{
if
(FAILED(pFeatureClass->CreateFeatureBuffer(&ipFeatureBuffer)))
continue;
ipPoint.CreateInstance(CLSID_Point);
x = (-180 * ((double)rand()/RAND_MAX)) + 1;
y = (180 * ((double)rand()/RAND_MAX)) + 1;
ipPoint->put_X(x);
ipPoint->put_Y(y);
ipPoints->AddPoint(ipPoint, 0, 0);
// ipFeatureBuffer->putref_Shape((IGeometryPtr)ipPoint);
// ipFeatureCursor->InsertFeature(ipFeatureBuffer, &varID);
}
// Update the field values now
long iTextField, iLongField;
ipFeatureBuffer->putref_Shape((IGeometryPtr)ipLine);
pFeatureClass->FindField(CComBSTR("TextField"), &iTextField);
pFeatureClass->FindField(CComBSTR("LongField"), &iLongField);
ipFeatureBuffer->put_Value(iTextField,
CComVariant(_T("SomeText")));
ipFeatureBuffer->put_Value(iLongField, CComVariant(1000));
ipFeatureCursor->InsertFeature(ipFeatureBuffer, &varID);
ipWkspEdit->StopEditOperation();
ipWkspEdit->StopEditing(VARIANT_TRUE);
return S_OK;
}
Article ID: 000004592
Get help from ArcGIS experts
Download the Esri Support App