AnsweredAssumed Answered

Why do dimensions disapear when close and open map.

Question asked by garydlester on Jun 6, 2019
Latest reply on Jun 30, 2019 by garydlester

I create dimension feature class I change the style, add dimensions to my map but when I reopen the map the dimensions are gone? Is there documentation I can read about this behavior. I am also interested in creating dimensions with python code but I have found no examples.

 

Update- I created a button that creates a dim with style inside a geodatabase, now when I close and open the map the dimensions are just red polygons.

 

after close and open arcmap                                                                      before close and open

 

Here is the code I sued to create the dimension feature class.

 

IFeatureLayer pFeatureLayer = (IFeatureLayer)pBoundaryLayer;
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
string strCatalogPath = GetCatalogPath(pFeatureClass);
IWorkspace pWorkspace = FileGDBWorkspaceFromPropertySet(strCatalogPath);
IObjectClassDescription ocDescription = new DimensionClassDescription();
IFields pRequiredFields = ocDescription.RequiredFields;
int intShapeFieldPosition = pRequiredFields.FindField("Shape");
IField pShapeField = pRequiredFields.get_Field(intShapeFieldPosition);
IGeometryDef pGeomDef = pShapeField.GeometryDef;
IGeometryDefEdit pGeomDefEdit = (IGeometryDefEdit)pGeomDef;
ISpatialReferenceFactory3 pSpatRefFac = new SpatialReferenceEnvironmentClass();
ISpatialReference pSpatRef = pSpatRefFac.CreateSpatialReference(6578);
IProjectedCoordinateSystem pProSpatRef = (IProjectedCoordinateSystem)pSpatRef;
ILinearUnit linUnit = pProSpatRef.CoordinateUnit;
pGeomDefEdit.SpatialReference_2 = pSpatRef;
IFeatureWorkspace pFeatWorkspace = (IFeatureWorkspace)pWorkspace;
string pName = "DIM";
IFeatureClass pNewFeatureClass = pFeatWorkspace.CreateFeatureClass(pName.ToString(), pRequiredFields, ocDescription.InstanceCLSID, ocDescription.ClassExtensionCLSID, esriFeatureType.esriFTDimension, "Shape", "");
ISchemaLock schemaLock = (ISchemaLock)pNewFeatureClass;
try
{
    schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);


    IDimensionClassExtension dimExtension = (IDimensionClassExtension)pNewFeatureClass.Extension;


    dimExtension.ReferenceScale = 12000;
                   
    dimExtension.ReferenceScaleUnits = esriUnits.esriFeet;


    IDimensionStyle dimensionStyle = new DimensionStyleClass();
    dimensionStyle.Name = "BEARING_DISTANCE";
    IDimensionStyleText dimText = (IDimensionStyleText)dimensionStyle;
    string expression =  "def FindLabel ( [DIMLENGTH], [BEGINX] , [BEGINY] , [ENDX] , [ENDY]  ):" + Environment.NewLine +
                            "  import math" + Environment.NewLine +
                            "  dY = float([ENDY]) -float( [BEGINY])" + Environment.NewLine +
                            "  dX = float( [ENDX])-float( [BEGINX])" + Environment.NewLine +
                            "  azimuth = math.atan2(dX, dY) * 180 / math.pi" + Environment.NewLine +
                            "  if azimuth < 0:" + Environment.NewLine +
                            "    azimuth = azimuth + 360" + Environment.NewLine +
                            "    if azimuth > 270 and azimuth<= 360:" + Environment.NewLine +
                            "      bearing = 360 - azimuth" + Environment.NewLine +
                            "      minutes,seconds = divmod(bearing * 3600, 60)" + Environment.NewLine +
                            "      degrees,minutes = divmod(minutes, 60)" + Environment.NewLine +
                            "      dmsBearing = \"N \" + str(int(degrees)) + \"°\" + str(int(minutes)) + \"'\" + str(round(seconds, 2)) + \" W\"" + Environment.NewLine +
                            "      return dmsBearing + \" \" + str(round(float( [DIMLENGTH]), 2))+\"'\"" + Environment.NewLine +
                            "    if azimuth > 180 and azimuth<= 270:" + Environment.NewLine +
                            "      bearing = azimuth - 180" + Environment.NewLine +
                            "      minutes,seconds = divmod(bearing * 3600, 60)"+ Environment.NewLine +
                            "      degrees,minutes = divmod(minutes, 60)"+ Environment.NewLine +
                            "      dmsBearing = \"S \" + str(int(degrees)) + \"°\" + str(int(minutes)) + \"'\" + str(round(seconds, 2)) + \" W\"" + Environment.NewLine +
                            "      return dmsBearing + \" \" + str(round(float( [DIMLENGTH]), 2))+\"'\"" + Environment.NewLine +
                            "    if azimuth > 90 and azimuth<= 180:" + Environment.NewLine +
                            "      bearing = 180 - azimuth" + Environment.NewLine +
                            "      minutes,seconds = divmod(bearing * 3600, 60)" + Environment.NewLine +
                            "      degrees,minutes = divmod(minutes, 60)" + Environment.NewLine +
                            "      dmsBearing = \"S \" + str(int(degrees)) + \"°\" + str(int(minutes)) + \"'\" + str(round(seconds, 2)) + \" E\"" + Environment.NewLine +
                            "      return dmsBearing + \" \" + str(round(float( [DIMLENGTH]), 2))+\"'\"" + Environment.NewLine +
                            "    if azimuth >= 0 and azimuth<= 90:" + Environment.NewLine +
                            "      minutes,seconds = divmod(azimuth * 3600, 60)" + Environment.NewLine +
                            "      degrees,minutes = divmod(minutes, 60)" + Environment.NewLine +
                            "      dmsBearing = \"N \" + str(int(degrees)) + \"°\" + str(int(minutes)) + \"'\" + str(round(seconds, 2)) + \" E\"" + Environment.NewLine +
                            "      return dmsBearing + \" \" + str(round(float( [DIMLENGTH]), 2))+\"'\"" + Environment.NewLine +
                            "  else:" + Environment.NewLine +
                            "    if azimuth > 270 and azimuth<= 360:" + Environment.NewLine +
                            "      bearing = 360 - azimuth" + Environment.NewLine +
                            "      minutes,seconds = divmod(bearing * 3600, 60)" + Environment.NewLine +
                            "      degrees,minutes = divmod(minutes, 60)" + Environment.NewLine +
                            "      dmsBearing = \"N \" + str(int(degrees)) + \"°\" + str(int(minutes)) + \"'\" + str(round(seconds, 2)) + \" W\"" + Environment.NewLine +
                            "      return dmsBearing + \" \" + str(round(float( [DIMLENGTH]), 2))+\"'\"" + Environment.NewLine +
                            "    if azimuth > 180 and azimuth<= 270:" + Environment.NewLine +
                            "      bearing = azimuth - 180" + Environment.NewLine +
                            "      minutes,seconds = divmod(bearing * 3600, 60)" + Environment.NewLine +
                            "      degrees,minutes = divmod(minutes, 60)" + Environment.NewLine +
                            "      dmsBearing = \"S \" + str(int(degrees)) + \"°\" + str(int(minutes)) + \"'\" + str(round(seconds, 2)) + \" W\"" + Environment.NewLine +
                            "      return dmsBearing + \" \" + str(round(float( [DIMLENGTH]), 2))+\"'\"" + Environment.NewLine +
                            "    if azimuth > 90 and azimuth<= 180:" + Environment.NewLine +
                            "      bearing = 180 - azimuth" + Environment.NewLine +
                            "      minutes,seconds = divmod(bearing * 3600, 60)" + Environment.NewLine +
                            "      degrees,minutes = divmod(minutes, 60)" + Environment.NewLine +
                            "      dmsBearing = \"S \" + str(int(degrees)) + \"°\" + str(int(minutes)) + \"'\" + str(round(seconds, 2)) + \" E\"" + Environment.NewLine +
                            "      return dmsBearing + \" \" + str(round(float( [DIMLENGTH]), 2))+\"'\"" + Environment.NewLine +
                            "    if azimuth >= 0 and azimuth<= 90:" + Environment.NewLine +
                            "      minutes,seconds = divmod(azimuth * 3600, 60)" + Environment.NewLine +
                            "      degrees,minutes = divmod(minutes, 60)" + Environment.NewLine +
                            "      dmsBearing = \"N \" + str(int(degrees)) + \"°\" + str(int(minutes)) + \"'\" + str(round(seconds, 2)) + \" E\"" + Environment.NewLine +
                            "      return dmsBearing + \" \" + str(round(float( [DIMLENGTH]), 2))+\"'\"";
                   
    dimText.Expression = expression;
    dimText.ExpressionSimple = false;
    dimText.ExpressionParserName = "Python";
    dimText.TextDisplay = esriDimensionTextDisplay.esriDimensionTDExpression;
    dimText.ExtendLineOnFit = false;


    stdole.IFontDisp iFont = new stdole.StdFontClass() as stdole.IFontDisp;
    iFont.Name = "Arial";
    iFont.Size = 8;
    ITextSymbol txtSymbol = new TextSymbol();
    txtSymbol.Font = iFont;
    dimText.TextSymbol = txtSymbol;
    IDimensionStyleDisplay dimDisplay = (IDimensionStyleDisplay)dimensionStyle;


    dimDisplay.MarkerDisplay = esriDimensionDisplay.esriDimensionDisplayBoth;


    IArrowMarkerSymbol mrkrSym = new ArrowMarkerSymbolClass();
    mrkrSym.Size = 6;


    IMarkerSymbol newMrkrSym = (IMarkerSymbol)mrkrSym;


    dimDisplay.BeginMarkerSymbol = newMrkrSym;
    dimDisplay.EndMarkerSymbol = newMrkrSym;


    dimDisplay.MarkerFit = esriDimensionMarkerFit.esriDimensionMarkerFitText;
    IDimensionStyles dimensionStyles = dimExtension.DimensionStyles;
    dimensionStyles.AddStyle(dimensionStyle);




}
catch(COMException comExcept)
{
    MessageBox.Show(comExcept.StackTrace.ToString());
}
finally
{


    schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
    MessageBox.Show("The Dimension Feature Class Has Been Created");
}

 

 

Is there something I can add to make this layer persist?

Outcomes