Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
3.8 kB
4
Indexable
Never
[CommandMethod("CR_Grade")]
public void CR_Grade()
{
    // Selecionar ProfileViews existentes no desenho
    TypedValue[] filtro = new TypedValue[] { new TypedValue((int)DxfCode.Start, "AECC_PROFILE_VIEW") };
    SelectionFilter selFiltro = new SelectionFilter(filtro);
    PromptSelectionResult selRes = Manager.DocEditor.GetSelection(selFiltro);

    if (selRes.Status != PromptStatus.OK)
    {
        Manager.DocEditor.WriteMessage("\nNenhum ProfileView selecionado.");
        return;
    }

    F_CR_Grade janela = new F_CR_Grade();
    janela.ShowDialog();

    if (!janela.Fazer)
    {
        return;
    }

    ObjectId idEstilo = Manager.DocCivil.Styles.ProfileStyles[janela.NomeEstiloPerfil];
    ObjectId idLabel = Manager.DocCivil.Styles.LabelSetStyles.ProfileLabelSetStyles[janela.NomeLabelPerfil];

    using (DocumentLock docLock = Manager.DocCad.LockDocument())
    using (Transaction trCad = Manager.DocCad.TransactionManager.StartTransaction())
    {
        LayerTable tabelaLayers = (LayerTable)trCad.GetObject(Manager.DocData.LayerTableId, OpenMode.ForRead);
        ObjectId idLayer = tabelaLayers[janela.NomeLayerPerfil];

        try
        {
            ObjectIdCollection alignments = Manager.DocCivil.GetAlignmentIds();
            foreach (ObjectId alignmentId in alignments)
            {
                Alignment alignment = trCad.GetObject(alignmentId, OpenMode.ForRead) as Alignment;
                if (alignment == null) continue;

                string projectName = $"{janela.PrefixoPerfil}{alignment.Name}";
                Profile profile = CreateProfile(trCad, alignment, projectName, idLayer, idEstilo, idLabel);
                AdjustProfileElevations(trCad, profile, alignment);
                Manager.DocEditor.WriteMessage($"\nPerfil de projeto '{projectName}' criado para o alinhamento '{alignment.Name}'.");
            }
            trCad.Commit();
        }
        catch (System.Exception ex)
        {
            Manager.DocEditor.WriteMessage($"\nErro: {ex.Message}");
        }
    }
}

private Profile CreateProfile(Transaction trCad, Alignment alignment, string profileName, ObjectId idLayer, ObjectId idEstilo, ObjectId idLabel)
{
    ObjectId profileId = Profile.CreateByLayout(profileName, alignment.ObjectId, idLayer, idEstilo, idLabel);
    Profile newProfile = trCad.GetObject(profileId, OpenMode.ForWrite) as Profile;
    return newProfile;
}

private void AdjustProfileElevations(Transaction tr, Profile profile, Alignment alignment)
{
    ObjectIdCollection existingProfiles = alignment.GetProfileIds();
    Profile terrainProfile = null;

    foreach (ObjectId profileId in existingProfiles)
    {
        Profile tempProfile = tr.GetObject(profileId, OpenMode.ForRead) as Profile;
        if (tempProfile != null && tempProfile.StyleName == "Terreno")
        {
            terrainProfile = tempProfile;
            break;
        }
    }

    if (terrainProfile == null)
    {
        throw new System.Exception("Perfil de terreno não encontrado.");
    }

    double startStation = alignment.StartingStation;
    double endStation = alignment.EndingStation;
    double startElevation = terrainProfile.ElevationAt(startStation);
    double endElevation = terrainProfile.ElevationAt(endStation);

    profile.UpgradeOpen();
    ProfilePVICollection pviCollection = profile.PVIs;

    if (pviCollection.Count > 0)
    {
        pviCollection[0].Elevation = startElevation;
        pviCollection[pviCollection.Count - 1].Elevation = endElevation;
    }
    else
    {
        profile.PVIs.AddPVI(startStation, startElevation);
        profile.PVIs.AddPVI(endStation, endElevation);
    }
    profile.DowngradeOpen();
}
Leave a Comment