When I edit a profile by adding a PVI, the profile view bands update poorly. The band down station is removed and the new PVI band label isn't added. Is there a way to force Civil 3D to refresh the bands programattically? Going into the profile view properties refreshes the band to show correctly, but I don't think that's an acceptable solution.
Christopher
Hi Chris,
I don’t see ProfileView has any API to Refresh or ForcreRefresh.
Did you try to use send command “regen” via API ? Does that help ?
Thanks,
Yes, I tried regen, but that didn't work.
Christopher
Hi Chris,
Could you send me the code snippet and related DWG file to investigate this issue ? You can drop me an email with these files, I will look into it.
Thanks,
Partha,
Below is an extraction of the code that I am using. There are also some transient graphics that get drawn, but the code is below. The Regen and UpdateScreen was primarily used to get rid of any lingering temporary objects. Replace the station and elevation to a value that works with the profile you test this on.
private void RunCommand()
{
Database db = acadApp.Application.DocumentManager.MdiActiveDocument.Database;
Editor ed = acadApp.Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
ObjectId profileObjId = civDoc.SelectProfile("Select profile section to edit: ", out profView);
Profile profSection = profileObjId.GetObject(OpenMode.ForRead) as Profile;
profSection.PVIs.AddPVI(editPtForm.PointStation, editPtForm.PointElevation);
ed.Regen();
ed.UpdateScreen();
tr.Commit();
}
}
public static ObjectId SelectProfile(this CivilDocument civDoc, string prompt, out ProfileView profView)
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
PromptEntityOptions pops = new PromptEntityOptions("\n" + prompt);
profView = null;
PromptEntityResult profileRes = ed.GetEntity("AeccDbVAlignment", pops, "\nYou must select a Profile:");
if (profileRes.Status == PromptStatus.OK)
{
// Get the profile view of the profile.
Profile prof = profileRes.ObjectId.GetObject(OpenMode.ForRead) as Profile;
Alignment align = prof.AlignmentId.GetObject(OpenMode.ForRead) as Alignment;
profView = align.GetProfileViewByPoint(profileRes.PickedPoint).GetObject(OpenMode.ForRead) as ProfileView;
return profileRes.ObjectId;
}
return ObjectId.Null;
}
Thanks
Christopher
Hi Chris,
I am not able to compile your code using Civil 3D 2013 assemblies. Which release of Civil 3D are you using ?
civDoc.SelectProfile("Select profile section to edit: ", out profView);
what is this civDoc ? COM ? or .NET ?
Some other unresolved variables - editPtForm
rofView = align.GetProfileViewByPoint(profileRes.PickedPoint).GetObject(OpenMode.ForRead) as ProfileView;
Your input required here to resolve the above issues.
Thanks,
Here's the a complete code example that should work without modification. The previous code utilized some extensions on the CivilDocument to make cleaner code.
http://blog.civil3dreminders.com/2012/09/adding-profile-pvi-through-api.html
Christopher