Hi Experts,
I need to copy corridor1 Baseline and Regions to Corridor2 along its targets and frequency. I'm able only to copy all baseline and region start/end stations. but can not copy additional stations and target from corr 1 to 2. Any help will highly appreciated. Thanks
using (Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
{
var corr = (Corridor)aCorrID.GetObject(OpenMode.ForRead);
var corr2 = (Corridor)aCorrID2.GetObject(OpenMode.ForWrite); // update this corridor.
int b = 0;
foreach (var bl in corr.Baselines)
{
if (!bl.NeedsProcessing) { continue; }
var align = tr.GetObject(bl.AlignmentId, OpenMode.ForRead) as Alignment; // get alignment object.
var prof = (Profile)bl.ProfileId.GetObject(OpenMode.ForRead); // get profile object w/o transaction, but better to use transaction.
b++;
corr2.Baselines.Add(bl.Name, bl.AlignmentId, bl.ProfileId);
int r = 0;
foreach (var rg in bl.BaselineRegions)
{
var Assmbly = (Assembly)rg.AssemblyId.GetObject(OpenMode.ForRead); // convert id to Assembly object.
r++;
corr2.Baselines[b].BaselineRegions.Add(rg.Name, rg.AssemblyId, rg.StartStation, rg.EndStation);
var ast = rg.AdditionalStations();
/*
if (ast.Length > 0) // this is good
{
for (int i = 0; i < ast.Length; i++)
{
corr2.Baselines[b].BaselineRegions[r].AddStation(ast[i],"New"); // causing error.
}
}
*/
try
{
var ti1 = rg.GetTargets();
//var ti2 = corr2.Baselines[b].BaselineRegions[r].GetTargets(); // causing error.
/*
for (int i = 0; i < ti1.Count; i++)
{
if (ti1[i].TargetIds.Count > 0)
{
if (ti1[i].TargetType == ti2[i].TargetType && ti1[i].AssemblyGroupName == ti2[i].AssemblyGroupName && ti1[i].DisplayName == ti2[i].DisplayName)
{
ti2[i].TargetIds = ti2[i].TargetIds;
}
}
}
*/
// corr2.Baselines[b].BaselineRegions[r].SetTargets(ti2);
Solved! Go to Solution.
Solved by NoelRico. Go to Solution.
I think I get it. But please somebody check and confirm as it will be a standard general-purpose code to combine corridors. see my code below. oh one more, how to copy the property settings station interval along tangents, curves, along spirals, and setting for vertical baselines say at high/low point (Yes/no). it is also possible to copy this settings?
using (Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
{
var coor1 = (Corridor)aCorrID.GetObject(OpenMode.ForRead);
var corr2 = (Corridor)aCorrID2.GetObject(OpenMode.ForWrite); // update this corridor.
int b = corr2.Baselines.Count - 1;
foreach (var bl in coor1.Baselines)
{
b++;
corr2.Baselines.Add(bl.Name, bl.AlignmentId, bl.ProfileId); // add new baseline to coor2 with data come from corr1.
int r = -1;
foreach (var rg1 in bl.BaselineRegions)
{
r++;
corr2.Baselines[b].BaselineRegions.Add(rg1.Name, rg1.AssemblyId, rg1.StartStation, rg1.EndStation);
var ast = rg1.AdditionalStations();
for (int i = 0; i < ast.Length; i++)
{
corr2.Baselines[b].BaselineRegions[r].AddStation(ast[i], "New");
}
var ti1 = rg1.GetTargets();
var ti2 = corr2.Baselines[b].BaselineRegions[r].GetTargets();
for (int i = 0; i < ti1.Count; i++)
{
if (ti1[i].TargetIds.Count > 0)
{
ti2[i].TargetIds = ti1[i].TargetIds;
}
}
corr2.Baselines[b].BaselineRegions[r].SetTargets(ti2);
}
}
corr2.Rebuild();
tr.Commit();
Can't find what you're looking for? Ask the community or share your knowledge.