Community
Civil 3D Customization
Welcome to Autodesk’s AutoCAD Civil 3D Forums. Share your knowledge, ask questions, and explore popular AutoCAD Civil 3D Customization topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Merging Corridor

1 REPLY 1
SOLVED
Reply
Message 1 of 2
NoelRico
546 Views, 1 Reply

Merging Corridor

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);

1 REPLY 1
Message 2 of 2
NoelRico
in reply to: NoelRico

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.

Post to forums  

Rail Community


 

Autodesk Design & Make Report