종단면도
이 절의 주제
- 종단면도
- 종단면도 뷰
- 샘플 프로그램
종단면도
종단면도는 선형의 수직 아날로그 값이다. 선형과 종단면도를 함께하면 3D path를 표현한다.
이 절의 주제
- 지표면에서 종단 생성
- Entities를 사용한 종단 생성
- 수직 교차점 수정
- 종단면도 스타일 생성
지표면에서 종단면도 생성
종단면도는 선형을 따르는 elevation으로 구성되는 object이다. 각 선형은 종단면도의 collection을 포함한다. 이 종단면도는 Alignment.GetProfileIds() 매서드로 접근할수 있다. Profile.CreateFromSurface() 매서드는 새 종단면도를 생성하고 지정된 지표면에서 선형의 경로를 따라 elevation정보를 가져온다.
// Illustrates creating a new profile from a surface
[CommandMethod("ProfileFromSurface")]
public void ProfileFromSurface()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Ask the user to select an alignment
PromptEntityOptions opt = new PromptEntityOptions("\nSelect an Alignment");
opt.SetRejectMessage("\nObject must be an alignment.\n");
opt.AddAllowedClass(typeof(Alignment), true);
ObjectId alignID = ed.GetEntity(opt).ObjectId;
// get layer id from the alignment
Alignment oAlignment = ts.GetObject(alignID, OpenMode.ForRead) as Alignment;
ObjectId layerId = oAlignment.LayerId;
// get first surface in the document
ObjectId surfaceId = doc.GetSurfaceIds()[0];
// get first style in the document
ObjectId styleId = doc.Styles.ProfileStyles[0];
// get the first label set style in the document
ObjectId labelSetId = doc.Styles.LabelSetStyles.ProfileLabelSetStyles[0];
try
{
ObjectId profileId = Profile.CreateFromSurface("My Profile", alignID, surfaceId, layerId, styleId, labelSetId);
ts.Commit();
}
catch (Autodesk.AutoCAD.Runtime.Exception e)
{
ed.WriteMessage(e.Message);
}
}
}
[CommandMethod("ProfileFromSurface")]
public void ProfileFromSurface()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Ask the user to select an alignment
PromptEntityOptions opt = new PromptEntityOptions("\nSelect an Alignment");
opt.SetRejectMessage("\nObject must be an alignment.\n");
opt.AddAllowedClass(typeof(Alignment), true);
ObjectId alignID = ed.GetEntity(opt).ObjectId;
// get layer id from the alignment
Alignment oAlignment = ts.GetObject(alignID, OpenMode.ForRead) as Alignment;
ObjectId layerId = oAlignment.LayerId;
// get first surface in the document
ObjectId surfaceId = doc.GetSurfaceIds()[0];
// get first style in the document
ObjectId styleId = doc.Styles.ProfileStyles[0];
// get the first label set style in the document
ObjectId labelSetId = doc.Styles.LabelSetStyles.ProfileLabelSetStyles[0];
try
{
ObjectId profileId = Profile.CreateFromSurface("My Profile", alignID, surfaceId, layerId, styleId, labelSetId);
ts.Commit();
}
catch (Autodesk.AutoCAD.Runtime.Exception e)
{
ed.WriteMessage(e.Message);
}
}
}
Entities를 사용한 종단면도 생성
Profile.CreateByLayout() 를 오버로드한 다양한 매서드는 elevation 정보 없이 새 종단면도를 만든다. 종단면도의 수직 shape은 entities를 사용해서 지정될 수 있다. Entities는 geometric 요소이다 - 접선 또는 대칭 포물선. 종단면도를 구성하는 모든 entities의 collection은 Profile.Entities collection에 포함된다. ProfileEntityCollection 클래스는 새 entities를 생성하는 모든 매서드도 포함한다.
이 샘플은 선형 “oAlignment”를 따르는 새 종단면도를 만들고, 새개의 entities를 추가하여 종단면도를 정의한다. 2개의 직선 entities가 각 양 끝에 추가되고 대칭 포물선이 중심에 추가되어 그들을 연결하고 오복부를 표현한다.
// Illustrates creating a new profile without elevation data, then adding the elevation
// via the entities collection
[CommandMethod("CreateProfileNoSurface")]
public void CreateProfileNoSurface()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Ask the user to select an alignment
PromptEntityOptions opt = new PromptEntityOptions("\nSelect an Alignment");
opt.SetRejectMessage("\nObject must be an alignment.\n");
opt.AddAllowedClass(typeof(Alignment), false);
ObjectId alignID = ed.GetEntity(opt).ObjectId;
Alignment oAlignment = ts.GetObject(alignID, OpenMode.ForRead) as Alignment;
// use the same layer as the alignment
ObjectId layerId = oAlignment.LayerId;
// get the standard style and label set
// these calls will fail on templates without a style named "Standard"
ObjectId styleId = doc.Styles.ProfileStyles["Standard"];
ObjectId labelSetId = doc.Styles.LabelSetStyles.ProfileLabelSetStyles["Standard"];
ObjectId oProfileId = Profile.CreateByLayout("My Profile", alignID, layerId, styleId, labelSetId);
// Now add the entities that define the profile.
Profile oProfile = ts.GetObject(oProfileId, OpenMode.ForRead) as Profile;
Point3d startPoint = new Point3d(oAlignment.StartingStation, -40, 0);
Point3d endPoint = new Point3d(758.2, -70, 0);
ProfileTangent oTangent1 = oProfile.Entities.AddFixedTangent(startPoint, endPoint);
startPoint = new Point3d(1508.2, -60.0, 0);
endPoint = new Point3d(oAlignment.EndingStation, -4.0, 0);
ProfileTangent oTangent2 =oProfile.Entities.AddFixedTangent(startPoint, endPoint);
oProfile.Entities.AddFreeSymmetricParabolaByLength(oTangent1.EntityId, oTangent2.EntityId, VerticalCurveType.Sag, 900.1, true);
ts.Commit();
}
}
// via the entities collection
[CommandMethod("CreateProfileNoSurface")]
public void CreateProfileNoSurface()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Ask the user to select an alignment
PromptEntityOptions opt = new PromptEntityOptions("\nSelect an Alignment");
opt.SetRejectMessage("\nObject must be an alignment.\n");
opt.AddAllowedClass(typeof(Alignment), false);
ObjectId alignID = ed.GetEntity(opt).ObjectId;
Alignment oAlignment = ts.GetObject(alignID, OpenMode.ForRead) as Alignment;
// use the same layer as the alignment
ObjectId layerId = oAlignment.LayerId;
// get the standard style and label set
// these calls will fail on templates without a style named "Standard"
ObjectId styleId = doc.Styles.ProfileStyles["Standard"];
ObjectId labelSetId = doc.Styles.LabelSetStyles.ProfileLabelSetStyles["Standard"];
ObjectId oProfileId = Profile.CreateByLayout("My Profile", alignID, layerId, styleId, labelSetId);
// Now add the entities that define the profile.
Profile oProfile = ts.GetObject(oProfileId, OpenMode.ForRead) as Profile;
Point3d startPoint = new Point3d(oAlignment.StartingStation, -40, 0);
Point3d endPoint = new Point3d(758.2, -70, 0);
ProfileTangent oTangent1 = oProfile.Entities.AddFixedTangent(startPoint, endPoint);
startPoint = new Point3d(1508.2, -60.0, 0);
endPoint = new Point3d(oAlignment.EndingStation, -4.0, 0);
ProfileTangent oTangent2 =oProfile.Entities.AddFixedTangent(startPoint, endPoint);
oProfile.Entities.AddFreeSymmetricParabolaByLength(oTangent1.EntityId, oTangent2.EntityId, VerticalCurveType.Sag, 900.1, true);
ts.Commit();
}
}
수직 교차점(PVI, VIP)의 점 수정
2개의 인접한 접선이 교차되는 점을 “수직교차점” 또는 “PVI”라 부른다. 이 위치는 종단면도의 geometry를 편집하기에 유용할 수 있다. 왜냐하면 이 한 점이 2개의 접선의 경사와 그들을 연결하는 곡선을 제어하기 때문이다. 종단면도에 있는 모든 PVI의 collection은 Profile.PVIs 속성에 포함된다. 이 collection은 당신이 접근하고, 추가하고, PVI를 종단면도에서 제거할 수 있도록 한다. 그리고 이 collection은 종단면도를 구성하는 entities의 위치와 수를 변경할 수 있게 한다. 각 PVIs(ProfilePVI 타입)은 이름이나 id를 가지고 있지 않다, 그러나 특정 측점과 elevation에 의해서 식별된다. 그 collection 매서드 ProfilePVICollection.GetPVIAt과 ProfilePVICollection.RemoveAt은 둘다 측점과 elevation 파라미터에 근접한 PVI를 접근하거나 삭제하기 때문에 당신은 수정하기를 원하는 PVI의 정확한 위치가 필요 없다.
이 샘플은 지정한 점에 가까운 PVI를 식별한다. 그 다음 ‘Entities를 사용한 종단면도 생성’ 주제에서 생성된 새 PVI를 종단면도에 추가하고, elevation을 조정한다.
[CommandMethod("EditPVI")]
public void EditPVI()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// get first profile of first alignment in document
ObjectId alignID = doc.GetAlignmentIds()[0];
Alignment oAlignment = ts.GetObject(alignID, OpenMode.ForRead) as Alignment;
Profile oProfile = ts.GetObject(oAlignment.GetProfileIds()[0], OpenMode.ForRead) as Profile;
// check to make sure we have a profile:
if (oProfile == null)
{
ed.WriteMessage("Must have at least one alignment with one profile");
return;
}
// Find the PVI close to station 1000 elevation -70.
ProfilePVI oProfilePVI = oProfile.PVIs.GetPVIAt(1000, -70);
ed.WriteMessage("PVI closest to station 1000 is at station: {0}", oProfilePVI.Station);
// Add another PVI and slightly adjust its elevation.
oProfilePVI = oProfile.PVIs.AddPVI(607.4, -64.3);
oProfilePVI.Elevation -= 2.0;
ts.Commit();
}
}
public void EditPVI()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// get first profile of first alignment in document
ObjectId alignID = doc.GetAlignmentIds()[0];
Alignment oAlignment = ts.GetObject(alignID, OpenMode.ForRead) as Alignment;
Profile oProfile = ts.GetObject(oAlignment.GetProfileIds()[0], OpenMode.ForRead) as Profile;
// check to make sure we have a profile:
if (oProfile == null)
{
ed.WriteMessage("Must have at least one alignment with one profile");
return;
}
// Find the PVI close to station 1000 elevation -70.
ProfilePVI oProfilePVI = oProfile.PVIs.GetPVIAt(1000, -70);
ed.WriteMessage("PVI closest to station 1000 is at station: {0}", oProfilePVI.Station);
// Add another PVI and slightly adjust its elevation.
oProfilePVI = oProfile.PVIs.AddPVI(607.4, -64.3);
oProfilePVI.Elevation -= 2.0;
ts.Commit();
}
}
종단면도 스타일 생성
종단면도 스타일은 ProfileStyle 타입의 object인데, 이것은 종단면도의 시각적 표시를 정의한다. document에 있는 모든 그런 스타일의 Collection은 CivilDocument.Styles.ProfileStyles collection에 저장된다. 그 Style은 DisplayStyle 타입의 속성을 포함한다. DisplayStyle은 선형 방향을 보여주는 화살표와 종단을 구성하는 직선, 확장직선, 곡선, 확장포물선, 대칭 포물선 그리고 비대칭 포물선의 화살표의 표시를 제어한다. 새 종단면도 스타일의 속성은 document’s의 ambient setting에 의해서 정의된다.
// Illustrates creating a new profile style
[CommandMethod("CreateProfileStyle")]
public void CreateProfileStyle()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
ObjectId profileStyleId = doc.Styles.ProfileStyles.Add("New Profile Style");
ProfileStyle oProfileStyle = ts.GetObject(profileStyleId, OpenMode.ForRead) as ProfileStyle;
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Arrow).Visible = true;
// set to yellow:
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Line).Color = Color.FromColorIndex(ColorMethod.ByAci, 50);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Line).Visible = true;
// grey
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.LineExtension).Color = Color.FromColorIndex(ColorMethod.ByAci, 251);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.LineExtension).Visible = true;
// green
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Curve).Color = Color.FromColorIndex(ColorMethod.ByAci, 80);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Curve).Visible = true;
// grey
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.ParabolicCurveExtension).Color = Color.FromColorIndex(ColorMethod.ByAci, 251);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.ParabolicCurveExtension).Visible = true;
// green
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.SymmetricalParabola).Color = Color.FromColorIndex(ColorMethod.ByAci, 81);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.SymmetricalParabola).Visible = true;
// green
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.AsymmetricalParabola).Color = Color.FromColorIndex(ColorMethod.ByAci, 83);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.AsymmetricalParabola).Visible = true;
// properties for 3D should also be set
}
}
[CommandMethod("CreateProfileStyle")]
public void CreateProfileStyle()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
ObjectId profileStyleId = doc.Styles.ProfileStyles.Add("New Profile Style");
ProfileStyle oProfileStyle = ts.GetObject(profileStyleId, OpenMode.ForRead) as ProfileStyle;
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Arrow).Visible = true;
// set to yellow:
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Line).Color = Color.FromColorIndex(ColorMethod.ByAci, 50);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Line).Visible = true;
// grey
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.LineExtension).Color = Color.FromColorIndex(ColorMethod.ByAci, 251);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.LineExtension).Visible = true;
// green
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Curve).Color = Color.FromColorIndex(ColorMethod.ByAci, 80);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.Curve).Visible = true;
// grey
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.ParabolicCurveExtension).Color = Color.FromColorIndex(ColorMethod.ByAci, 251);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.ParabolicCurveExtension).Visible = true;
// green
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.SymmetricalParabola).Color = Color.FromColorIndex(ColorMethod.ByAci, 81);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.SymmetricalParabola).Visible = true;
// green
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.AsymmetricalParabola).Color = Color.FromColorIndex(ColorMethod.ByAci, 83);
oProfileStyle.GetDisplayStyleProfile(ProfileDisplayStyleProfileType.AsymmetricalParabola).Visible = true;
// properties for 3D should also be set
}
}
종단면도 뷰
이 절은 종단면도 뷰의 생성과 표시를 설명한다. 종단면도 뷰는 관련 선형의 길이에 따라 종단면도의 elevation을 표시하는 그래프이다.
이 절의 주제
- 종단면도 뷰의 생성
- 종단면도 뷰 스타일의 생성
- 종단면도 뷰 스타일의 설정
종단면도 뷰 생성
ProfileView 클래스는 새 ProfileView object를 그리기 위해 추가하는 ProfileView::Create() 매서드의 2가지 버전이 있다. 각 매서드 오버로드는 CivilDrainage object의 참조, 새 종단면도 뷰의 이름, 그리고 종단면도 뷰가 삽입되는 도면에서의 위치인 Point3d를 취한다. 그들은 밴드 셋 스타일과 선형도 취한다. 한가지 버전은 이 선형들을 ObjectIds로 취하고 다른 한가지는 문자열로 취한다.
이 예제는 새 ProfileView 생성을 보여준다.
[CommandMethod("CreateProfileView")]
public void CreateProfileView()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Ask the user to select an alignment
PromptEntityOptions opt = new PromptEntityOptions("\nSelect an Alignment");
opt.SetRejectMessage("\nObject must be an alignment.\n");
opt.AddAllowedClass(typeof(Alignment), false);
ObjectId alignID = ed.GetEntity(opt).ObjectId;
// Create insertion point:
Point3d ptInsert = new Point3d(100, 100, 0);
// Get profile view band set style ID:
ObjectId pfrVBSStyleId = doc.Styles.ProfileViewBandSetStyles["Standard"];
// If this doesn't exist, get the first style in the collection
if (pfrVBSStyleId == null) pfrVBSStyleId = doc.Styles.ProfileViewBandSetStyles[0];
ObjectId ProfileViewId = ProfileView.Create(doc, "New Profile View", pfrVBSStyleId, alignID, ptInsert);
ts.Commit();
}
}
public void CreateProfileView()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Ask the user to select an alignment
PromptEntityOptions opt = new PromptEntityOptions("\nSelect an Alignment");
opt.SetRejectMessage("\nObject must be an alignment.\n");
opt.AddAllowedClass(typeof(Alignment), false);
ObjectId alignID = ed.GetEntity(opt).ObjectId;
// Create insertion point:
Point3d ptInsert = new Point3d(100, 100, 0);
// Get profile view band set style ID:
ObjectId pfrVBSStyleId = doc.Styles.ProfileViewBandSetStyles["Standard"];
// If this doesn't exist, get the first style in the collection
if (pfrVBSStyleId == null) pfrVBSStyleId = doc.Styles.ProfileViewBandSetStyles[0];
ObjectId ProfileViewId = ProfileView.Create(doc, "New Profile View", pfrVBSStyleId, alignID, ptInsert);
ts.Commit();
}
}
종단면도 뷰 스타일 생성
ProfileViewStyle 타입의 object인 종단면도 뷰 스타일은 그래프 축, 텍스트, 제목이 그려지느 방식의 모든 측면을 제어한다. ProfileViewStyle안에는 상, 하, 좌, 그리고 우 축과 함께 움직이는 object가 있다; 종단면도내의 geometric 위치에 있는 선과께 움직이는 object; 그리고 전체 그래프와 함께 움직이는 그래프이다. document에 있는 모든 종단면도 뷰 스타일은 CivilDocumentProfileViewStyles collection에 저장된다. 새 스타일은 새 스타일의 이름과 함께 collection의 Add 매서드를 사용해서 생성된다.
ObjectId profileViewStyleId = doc.Styles.ProfileViewStyles.Add("New Profile View Style");
ProfileViewStyle oProfileViewStyle = ts.GetObject(profileViewStyleId, OpenMode.ForRead) as ProfileViewStyle;
ProfileViewStyle oProfileViewStyle = ts.GetObject(profileViewStyleId, OpenMode.ForRead) as ProfileViewStyle;
종단면도 뷰 스타일 설정
종단면도 뷰 스타일 object는 4개의 축 각각에 대해서 분할된 object와, 전체 그래프를 위한 하나의 object와 수평 geometry points에 표시된 그리드 라인을 위한 DisplayStyle object(GetDisplayStylePlan() 매서드로 접근된)로 구성된다. 축 스타일과 그래프 스타일 역시 subobject를 포함하는데, tick 마크와 제목의 스타일을 지정하기 위한 것이다.
이 절의 주제
- 축 스타일의 설정
- 그래프 스타일의 설정
- 해치 영역 작업
- 종단면도 뷰 스타일 예제
축 스타일 설정
모든 축 스타일은 AxisStyle 클래스를 기반으로 한다. 축 스타일 object는 축 자체, 스타일 표시를 제어하고, 탁 마크와 축을 따라 배치되는 텍스트를 제어하고, 축의 목적을 설명하는 텍스트 주석을 제어한다. 주석 텍스트, 위치, 그리고 크기는 AxisStyle.TitleStyle 속성을 통해서 설정되고, AxisStyle.TitleStyle은 AxisTitleStyle 타입의 object이다. 주석 텍스트는 다음 속성 필드의 어떤것이든 사용할 수 있다.
Valid property fields for AxisTitleStyle.Text
|
<[Profile View Minimum Elevation(Uft|P3|RN|AP|Sn|OF)]>
|
<[Profile View Maximum Elevation(Uft|P3|RN|AP|Sn|OF)]>
|
<[Profile View Start Station(Uft|FS|P2|RN|AP|Sn|TP|B2|EN|W0|OF)]>
|
<[Profile View End Station(Uft|FS|P2|RN|AP|Sn|TP|B2|EN|W0|OF)]>
|
축 눈금 표시
각 축스타일안에는 축을 따라 배치되는 눈금표시 지정을 위한 속성이 있다. 주 눈금표시와 부눈금 표시 모두 AxisTickStyle 타입의 object에 의해서 표현된다. AxisTickStyle 클래스는 위치, 크기, 시각적 스타일을 관리하는데, 그것의 Interval, Size 그리고 다른 속성을 통해서 관리한다. 대부분의 스타일 속성은 도면단위를 사용하고, Interval 속성은 지표면의 실제 지상 단위를 사용한다. AxisTickStyle object는 각 눈금에 표시되는 텍스트를 결정하는데, 다음 속성 필드를 포함한다 :
Valid property fields for TickStyle.Text
|
Axis
|
<[Station Value(Uft|FS|P0|RN|AP|Sn|TP|B2|EN|W0|OF)]>
|
horizontal
|
<[Raw Station(Uft|FS|P2|RN|AP|Sn|TP|B2|EN|W0|OF)]>
|
horizontal
|
<[Graph View Abscissa Value(Uft|P4|RN|AP|Sn|OF)]>
|
horizontal
|
<[Profile View Point Elevation(Uft|P1|RN|AP|Sn|OF)]>
|
vertical
|
<[Graph View Ordinate Value(Uft|P3|RN|AP|Sn|OF)]>
|
vertical
|
그래프 스타일 설정
그래프는 GraphStyle과 GridStyle 타입의 object에 의해서 관리된다. 이 object들은 축척, 제목, 그래프의 그리드를 변경하는데 사용될 수 있다.
그리드는 ProfileViewStyle.GridStyle 속성에 의해서 제어된다. 이것은 GridStyle 타입의 object이다. 그리드 스타일은 단면도의 테두리 위와 아래 빈공간의 크기를 설정하는데, GridStyle.GridPaddingAbove와 GridStyle.GridPaddingBottom 속성을 통해서 설정한다. 그리드 스타일은 주/부 수직, 수평 그리드 라인의 선 스타일을 관리한다. 이때는 DisplayStyle.PlotStyle 속성을 사용하고, 이 속성은 GetDisplayStylePlan() 매서드에 의해서 접근된다.
Graph Title그래프 제목
그래프의 제목은 GraphStyle.TitleStyle 속성에 의해서 제어된다. 이 속성은 GraphTitleStyle 타입의 object이다. 제목 스타일 object는 위치, 스타일 그리고 제목의 외곽선을 조정할 수 있다. 제목의 텍스트는 다음 속성 필드 어떤것이라도 포함할 수 있다.:
Valid property fields for GraphTitleStyle.Text
|
<[Graph View Name(CP)]>
|
<[Parent Alignment(CP)]>
|
<[Drawing Scale(P4|RN|AP|OF)]>
|
<[Graph View Vertical Scale(P4|RN|AP|OF)]>
|
<[Graph View Vertical Exaggeration(P4|RN|AP|OF)]>
|
<[Profile View Start Station(Uft|FS|P2|RN|AP|Sn|TP|B2|EN|W0|OF)]>
|
<[Profile View End Station(Uft|FS|P2|RN|AP|Sn|TP|B2|EN|W0|OF)]>
|
<[Profile View Minimum Elevation(Uft|P2|RN|AP|Sn|OF)]>
|
<[Profile View Maximum Elevation(Uft|P3|RN|AP|Sn|OF)]>
|
해치 영역 작업
해치영역은 종단면도 뷰의 기능인데, 이것은 스타일을 절/성 영역에 적용해서 그들을 강조표시 하는 기능이다. 절성외에, 해치영역은 2개의 정의된 종단면도 사이의 교차된 영역을 강조표시 할 수 있다.
Profileview object를 위한 해칭 기능은 HatchAreas 속성에 의해서 노출된다. 이것은 모든 ProfileHatchArea의 collection이다. object는 ProfileView를 위해서 정의되고, 추가 해치영역에 접근하거나 추가하는데 사용될 수 있다.
각 ProfileHatchArea는 기준(ProfileCriteria object)의 셋을 가지는데, 이 기준셋은 종단면도 지정하는데, 이 종단면도는 해치영역의 상한 하한 경계를 정의한다. 이 기준은 ShapeStyle object도 참조한다. 이것은 해치영역이 종단면도 뷰에 스타일되는 방식을 정의한다.
이 코드 샘플은 종단면도 뷰를 위한 해치영역에 접근하는 방식을 보여주고, 각 ProfileHatchArea object의 기준에 대한 몇몇 정보를 출력한다 :
[CommandMethod("ProfileHatching")]
public void ProfileHatching () {
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using ( Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction() ) {
// Ask the user to select a profile view
PromptEntityOptions opt = new PromptEntityOptions("\nSelect a profile view");
opt.SetRejectMessage("\nObject must be a profile view.\n");
opt.AddAllowedClass(typeof(ProfileView), false);
ObjectId profileViewID = ed.GetEntity(opt).ObjectId;
ProfileView oProfileView = ts.GetObject(profileViewID, OpenMode.ForRead) as ProfileView;
ed.WriteMessage("\nHatch areas defined in this profile view: \n");
foreach ( ProfileHatchArea oProfileHatchArea in oProfileView.HatchAreas ) {
ed.WriteMessage(" Hatch area: " + oProfileHatchArea.Name + " shape style: " + oProfileHatchArea.ShapeStyleName + "\n");
foreach ( ProfileCriteria oProfileCriteria in oProfileHatchArea.Criteria ) {
ed.WriteMessage(string.Format(" Criteria: type: {0} profile: {1}\n", oProfileCriteria.BoundaryType.ToString(), oProfileCriteria.ProfileName) );
}
}
}
}
public void ProfileHatching () {
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using ( Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction() ) {
// Ask the user to select a profile view
PromptEntityOptions opt = new PromptEntityOptions("\nSelect a profile view");
opt.SetRejectMessage("\nObject must be a profile view.\n");
opt.AddAllowedClass(typeof(ProfileView), false);
ObjectId profileViewID = ed.GetEntity(opt).ObjectId;
ProfileView oProfileView = ts.GetObject(profileViewID, OpenMode.ForRead) as ProfileView;
ed.WriteMessage("\nHatch areas defined in this profile view: \n");
foreach ( ProfileHatchArea oProfileHatchArea in oProfileView.HatchAreas ) {
ed.WriteMessage(" Hatch area: " + oProfileHatchArea.Name + " shape style: " + oProfileHatchArea.ShapeStyleName + "\n");
foreach ( ProfileCriteria oProfileCriteria in oProfileHatchArea.Criteria ) {
ed.WriteMessage(string.Format(" Criteria: type: {0} profile: {1}\n", oProfileCriteria.BoundaryType.ToString(), oProfileCriteria.ProfileName) );
}
}
}
}
종단면도 뷰 스타일 예제
이 예제는 기존 종단면도 뷰 스타일을 위하고, 그것의 top 축과 제목을 수정한다:
[CommandMethod("ModProfileViewStyle")]
public void ModProfileViewStyle()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Get the first style in the document's collection of styles
ObjectId profileViewStyleId = doc.Styles.ProfileViewStyles[0];
ProfileViewStyle oProfileViewStyle = ts.GetObject(profileViewStyleId, OpenMode.ForRead) as ProfileViewStyle;
// Adjust the top axis. Put station information here, with the title
// at the far left.
oProfileViewStyle.GetDisplayStylePlan(ProfileViewDisplayStyleType.TopAxis).Visible = true;
oProfileViewStyle.TopAxis.MajorTickStyle.LabelText = "<[Station Value(Um|FD|P1)]> m";
oProfileViewStyle.TopAxis.MajorTickStyle.Interval = 164.041995;
oProfileViewStyle.TopAxis.TitleStyle.OffsetX = 0.13;
oProfileViewStyle.TopAxis.TitleStyle.OffsetY = 0.0;
oProfileViewStyle.TopAxis.TitleStyle.Text = "Meters";
oProfileViewStyle.TopAxis.TitleStyle.Location = Autodesk.Civil.DatabaseServices.Styles.AxisTitleLocationType.TopOrLeft;
// Adjust the title to show the alignment name
oProfileViewStyle.GraphStyle.TitleStyle.Text = "Profile View of:<[Parent Alignment(CP)]>";
ts.Commit();
}
}
public void ModProfileViewStyle()
{
doc = CivilApplication.ActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Get the first style in the document's collection of styles
ObjectId profileViewStyleId = doc.Styles.ProfileViewStyles[0];
ProfileViewStyle oProfileViewStyle = ts.GetObject(profileViewStyleId, OpenMode.ForRead) as ProfileViewStyle;
// Adjust the top axis. Put station information here, with the title
// at the far left.
oProfileViewStyle.GetDisplayStylePlan(ProfileViewDisplayStyleType.TopAxis).Visible = true;
oProfileViewStyle.TopAxis.MajorTickStyle.LabelText = "<[Station Value(Um|FD|P1)]> m";
oProfileViewStyle.TopAxis.MajorTickStyle.Interval = 164.041995;
oProfileViewStyle.TopAxis.TitleStyle.OffsetX = 0.13;
oProfileViewStyle.TopAxis.TitleStyle.OffsetY = 0.0;
oProfileViewStyle.TopAxis.TitleStyle.Text = "Meters";
oProfileViewStyle.TopAxis.TitleStyle.Location = Autodesk.Civil.DatabaseServices.Styles.AxisTitleLocationType.TopOrLeft;
// Adjust the title to show the alignment name
oProfileViewStyle.GraphStyle.TitleStyle.Text = "Profile View of:<[Parent Alignment(CP)]>";
ts.Commit();
}
}
샘플 프로그램
종단면도 샘플
이 샘플은 <install directory>\Sample\Civil 3D API\DotNet\VB.NET\ProfileSample\ 에 있다. 이 샘플이 설명하는 것은 다음과 같다:
- 종단면도를 만드는 방법
- 종단면도 스타일과 종단면도 뷰 생성
댓글 없음:
댓글 쓰기