Hi.
I want to get all codes in one Code Set Style. (For example: "Básico" style).
that style is:
Vínculo (Link) branch has 2 code (NormalItemType), Mark branch has 2 code (NormalItemType) and Shape has 3 codes (NormalItemType).
However, if I do this:
int indice = comboBox_estilos.SelectedIndex; ObjectId id_estil = coll_Id[indice]; using (Transaction trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction()) { Autodesk.Civil.DatabaseServices.Styles.CodeSetStyle estilo_ConjuntoCode = trans.GetObject(id_estil, OpenMode.ForWrite) as Autodesk.Civil.DatabaseServices.Styles.CodeSetStyle; Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType tipe=estilo_ConjuntoCode.SubentityStyleType; switch (tipe) { case Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType.LinkType: break; case Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType.MarkerType: break; case Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType.ShapeType: break; } //bucle para cada uno de los códigos que contiene for (int i = 0; i <= estilo_ConjuntoCode.Count - 1; i++) { Autodesk.Civil.DatabaseServices.Styles.CodeSetStyleItem codigo = estilo_ConjuntoCode[i]; Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType tipo= codigo.StyleType; }
I only get the "SubEntityStyleType"=MarkerType and its 2 codes.
But, why I can´t get the codes from LinkType and ShapeType?
I know this: This property can't apply to DefaultCode item and NoCode item. I only want NormalItemType.
Moreover;
SubassemblySubentityStyleType Enumeration:
Member name Value
ShapeType | 2 | ||
MarkerType | 0 | ||
LinkType | 1 |
This is an example to .Add() method from API guide:
1// Create a new style set using our previously created styles. 2objId = doc.Styles.ShapeStyles.Add("Style Set 1"); 3CodeSetStyle oCodeSetStyle = ts.GetObject(objId, OpenMode.ForWrite) as CodeSetStyle; 4oCodeSetStyle.Add("TOP", doc.Styles.LinkStyles["Style2"]); 5oCodeSetStyle.Add("BASE", doc.Styles.ShapeStyles["Style3"]); 6 7ts.Commit();
Thanks.
Solved! Go to Solution.
Solved by Jeff_M. Go to Solution.
Hi.
I think I have found other bug:
I have tried to add a new code in LinkType:
using (DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument()) { using (Transaction trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction()) { Autodesk.Civil.DatabaseServices.Styles.CodeSetStyle estilo_ConjuntoCode = trans.GetObject(id_estil, OpenMode.ForWrite) as Autodesk.Civil.DatabaseServices.Styles.CodeSetStyle; estilo_ConjuntoCode.Add("TOPillo", civDoc.Styles.LinkStyles["_Invisible"]); Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType tipe = estilo_ConjuntoCode.SubentityStyleType; switch (tipe) { case Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType.LinkType: break; case Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType.MarkerType: break; case Autodesk.Civil.DatabaseServices.Styles.SubassemblySubentityStyleType.ShapeType: break; } ..............
But I get this:
Although We specified LinkType for new code(TOPillo), it is added in MarkType!!!
For:
estilo_ConjuntoCode.Add("nuevo", civDoc.Styles.ShapeStyles["_Invisible"]);
It happens the same. The new code is added in Mark instead of Shape.
Joan, this should answer both questions at once. You need to set the CodeSetStyle.SubassemblySubentityStyleType to the type you want to work with. See the code below for a graphic example.
[CommandMethod("CodeStyleTest")] public void codestyletest() { //int indice = comboBox_estilos.SelectedIndex; StylesRoot styles = CivilApplication.ActiveDocument.Styles; AcDb.ObjectId id_estil = styles.CodeSetStyles[0]; StringBuilder sb = new StringBuilder(); using (AcDb.Transaction trans = AcDb.HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction()) { CodeSetStyle estilo_ConjuntoCode = trans.GetObject(id_estil, AcDb.OpenMode.ForWrite) as Autodesk.Civil.DatabaseServices.Styles.CodeSetStyle; sb.AppendLine("CodeSetStyle Name: " + estilo_ConjuntoCode.Name); estilo_ConjuntoCode.SubentityStyleType = SubassemblySubentityStyleType.MarkerType; sb.AppendLine("\t\tMarkers - "); estilo_ConjuntoCode.Add("TESTMARKER", styles.MarkerStyles[0]); for (int i = 0; i <= estilo_ConjuntoCode.Count - 1; i++) { CodeSetStyleItem codigo = estilo_ConjuntoCode[i]; sb.AppendLine("\t\t\t" + codigo.Code); } estilo_ConjuntoCode.SubentityStyleType = SubassemblySubentityStyleType.LinkType; sb.AppendLine("\t\tLinks - "); estilo_ConjuntoCode.Add("TESTLINK", styles.LinkStyles[0]); for (int i = 0; i <= estilo_ConjuntoCode.Count - 1; i++) { CodeSetStyleItem codigo = estilo_ConjuntoCode[i]; sb.AppendLine("\t\t\t" + codigo.Code); } estilo_ConjuntoCode.SubentityStyleType = SubassemblySubentityStyleType.ShapeType; sb.AppendLine("\t\tShapes - "); estilo_ConjuntoCode.Add("TESTSHAPE", styles.ShapeStyles[0]); for (int i = 0; i <= estilo_ConjuntoCode.Count - 1; i++) { CodeSetStyleItem codigo = estilo_ConjuntoCode[i]; sb.AppendLine("\t\t\t" + codigo.Code); } trans.Commit(); } Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(sb.ToString()); }
Thanks a lot Jeff!
It works fine.
What do you think about this?
In one Code Set Style we can set (featureLineStyleName) for each code in Marks, but it is only the first thime to create the corridor.
Then, you have to change feature line styles from that form(screenshoot).