@@ -88,7 +88,7 @@ public static Dictionary<string, object> LoadModel(string path, bool includeMesh
8888 /// SketchUp Component Instance Data
8989 /// </summary>
9090 /// <param name="instance">SketchUp Component Instance</param>
91- [ MultiReturn ( new [ ] { "Surfaces" , "Curves" , "Meshes" , "Edges" , "Position" , "Scale" , "Name" , "Parent Name" } ) ]
91+ [ MultiReturn ( new [ ] { "Surfaces" , "Curves" , "Instances" , " Meshes", "Edges" , "Position" , "Scale" , "Name" , "Parent Name" } ) ]
9292 public static Dictionary < string , object > GetInstance ( Instance instance )
9393 {
9494 List < Autodesk . DesignScript . Geometry . Surface > surfaces = new List < Autodesk . DesignScript . Geometry . Surface > ( ) ;
@@ -98,31 +98,69 @@ public static Dictionary<string, object> GetInstance(Instance instance)
9898
9999 Autodesk . DesignScript . Geometry . Point p = Autodesk . DesignScript . Geometry . Point . ByCoordinates ( instance . Transformation . X , instance . Transformation . Y , instance . Transformation . Z ) ;
100100
101- foreach ( Surface srf in instance . Parent . Surfaces )
101+ Component parent = instance . Parent as Component ;
102+
103+ foreach ( Surface srf in parent . Surfaces )
102104 {
103105 surfaces . Add ( srf . ToDSGeo ( instance . Transformation ) ) ;
104106 if ( srf . FaceMesh != null )
105107 meshes . Add ( srf . FaceMesh . ToDSGeo ( instance . Transformation ) ) ;
106108 }
107- foreach ( Curve c in instance . Parent . Curves )
109+ foreach ( Curve c in parent . Curves )
108110 curves . Add ( c . ToDSGeo ( instance . Transformation ) ) ;
109- foreach ( Edge e in instance . Parent . Edges )
111+ foreach ( Edge e in parent . Edges )
110112 edges . Add ( e . ToDSGeo ( instance . Transformation ) ) ;
111113
112114 return new Dictionary < string , object >
113115 {
114116 { "Surfaces" , surfaces } ,
115117 { "Curves" , curves } ,
118+ { "Instances" , parent . Instances } ,
116119 { "Meshes" , meshes } ,
117120 { "Edges" , edges } ,
118121 { "Position" , p } ,
119122 { "Scale" , instance . Transformation . Scale } ,
120123 { "Name" , instance . Name } ,
121- { "Parent Name" , instance . Parent . Name }
124+ { "Parent Name" , parent . Name }
122125
123126 } ;
124127 }
125128
129+ /// <summary>
130+ /// Flatten Instances
131+ /// </summary>
132+ /// <param name="instances"></param>
133+ /// <returns>All Geometries</returns>
134+ public static List < Autodesk . DesignScript . Geometry . Geometry > FlattenInstances ( List < Instance > instances )
135+ {
136+ List < Autodesk . DesignScript . Geometry . Geometry > data = new List < Autodesk . DesignScript . Geometry . Geometry > ( ) ;
137+
138+ foreach ( Instance instance in instances )
139+ FlattenInstance ( instance , ref data ) ;
140+
141+ return data ;
142+ }
143+
144+ private static void FlattenInstance ( Instance instance , ref List < Autodesk . DesignScript . Geometry . Geometry > data )
145+ {
146+ Autodesk . DesignScript . Geometry . Point p = Autodesk . DesignScript . Geometry . Point . ByCoordinates ( instance . Transformation . X , instance . Transformation . Y , instance . Transformation . Z ) ;
147+
148+ Component parent = instance . Parent as Component ;
149+
150+ foreach ( Surface srf in parent . Surfaces )
151+ data . Add ( srf . ToDSGeo ( instance . Transformation ) ) ;
152+
153+ foreach ( Curve c in parent . Curves )
154+ {
155+ var curves = c . ToDSGeo ( instance . Transformation ) ;
156+ foreach ( var curve in curves )
157+ data . Add ( curve ) ;
158+ }
159+
160+ foreach ( Edge e in parent . Edges )
161+ data . Add ( e . ToDSGeo ( instance . Transformation ) ) ;
162+ }
163+
126164 /// <summary>
127165 /// Write SketchUp Model
128166 /// </summary>
@@ -260,21 +298,25 @@ public static Autodesk.DesignScript.Geometry.Mesh ToDSGeo(this SketchUpNET.Mesh
260298 [ IsVisibleInDynamoLibrary ( false ) ]
261299 public static Autodesk . DesignScript . Geometry . Surface ToDSGeo ( this SketchUpNET . Surface v , Transform t = null )
262300 {
263- List < Autodesk . DesignScript . Geometry . Curve > curves = new List < Autodesk . DesignScript . Geometry . Curve > ( ) ;
264- foreach ( Edge c in v . OuterEdges . Edges ) curves . Add ( c . ToDSGeo ( t ) . ToNurbsCurve ( ) ) ;
265- int a = 0 ;
266- Autodesk . DesignScript . Geometry . PolyCurve pc = Autodesk . DesignScript . Geometry . PolyCurve . ByJoinedCurves ( curves ) ;
267- Autodesk . DesignScript . Geometry . Surface s = Autodesk . DesignScript . Geometry . Surface . ByPatch ( pc ) ;
268-
269- List < Autodesk . DesignScript . Geometry . Surface > inner = v . InnerLoops ( t ) ;
270-
271- foreach ( Autodesk . DesignScript . Geometry . Surface srf in inner )
301+ try
272302 {
273- Autodesk . DesignScript . Geometry . Geometry [ ] geo = s . Split ( srf ) ;
274- if ( geo . Count ( ) == 2 ) s = ( Autodesk . DesignScript . Geometry . Surface ) geo [ 0 ] ;
303+ List < Autodesk . DesignScript . Geometry . Curve > curves = new List < Autodesk . DesignScript . Geometry . Curve > ( ) ;
304+ foreach ( Edge c in v . OuterEdges . Edges ) curves . Add ( c . ToDSGeo ( t ) . ToNurbsCurve ( ) ) ;
305+ int a = 0 ;
306+ Autodesk . DesignScript . Geometry . PolyCurve pc = Autodesk . DesignScript . Geometry . PolyCurve . ByJoinedCurves ( curves ) ;
307+ Autodesk . DesignScript . Geometry . Surface s = Autodesk . DesignScript . Geometry . Surface . ByPatch ( pc ) ;
308+
309+ List < Autodesk . DesignScript . Geometry . Surface > inner = v . InnerLoops ( t ) ;
275310
311+ foreach ( Autodesk . DesignScript . Geometry . Surface srf in inner )
312+ {
313+ Autodesk . DesignScript . Geometry . Geometry [ ] geo = s . Split ( srf ) ;
314+ if ( geo . Count ( ) == 2 ) s = ( Autodesk . DesignScript . Geometry . Surface ) geo [ 0 ] ;
315+
316+ }
317+ return s ;
276318 }
277- return s ;
319+ catch { return null ; }
278320 }
279321
280322 [ IsVisibleInDynamoLibrary ( false ) ]
0 commit comments