internal void Pack(Model model, SU.EntitiesRef entitiesRef) { CompDef componentDefinition = model.components[ComponentName]; // We might be making a forward reference, so guarantee // that the ComponentDefinition has a SketchUp pointer. componentDefinition.GuaranteeReference(); SU.ComponentDefinitionRef componentDefinitionRef = componentDefinition.componentDefinitionRef; SU.ComponentInstanceRef componentInstanceRef = new SU.ComponentInstanceRef(); SU.ComponentDefinitionCreateInstance( componentDefinitionRef, componentInstanceRef); SU.EntitiesAddInstance( entitiesRef, componentInstanceRef, null); SU.ComponentInstanceSetName( componentInstanceRef, InstanceName); SU.ComponentInstanceSetTransform( componentInstanceRef, Transform.SUTransformation); if (MaterialName != null) { Material material = null; try { material = model.materials[MaterialName]; } catch (Exception e) { string msg = "\nCould not find a material named " + MaterialName; throw new Exception(e.Message + msg); } SU.DrawingElementRef drawingElementRef = SU.ComponentInstanceToDrawingElement(componentInstanceRef); SU.DrawingElementSetMaterial( drawingElementRef, material.suMaterialRef); } }
void AddBlade( int n, SU.ComponentDefinitionRef parent, SU.ComponentDefinitionRef child, double twist, double spin) { // Instance the child. SU.ComponentInstanceRef ci = new SU.ComponentInstanceRef(); SU.ComponentDefinitionCreateInstance(child, ci); // Set its transform. SU.Transformation twistTrans = new SU.Transformation(); SU.TransformationRotation( ref twistTrans, new SU.Point3D { x = 0, y = 0, z = 0 }, new SU.Vector3D { x = 0, y = 0, z = 1 }, twist); SU.Transformation spinTrans = new SU.Transformation(); SU.TransformationRotation( ref spinTrans, new SU.Point3D { x = 0, y = 0, z = 0 }, new SU.Vector3D { x = 0, y = 1, z = 0 }, spin); SU.Transformation trans = new SU.Transformation(); SU.TransformationMultiply(ref spinTrans, ref twistTrans, ref trans); SU.ComponentInstanceSetTransform(ci, trans); SU.ComponentInstanceSetName(ci, $"Blade #{n}"); SU.EntitiesRef parentEnts = new SU.EntitiesRef(); SU.ComponentDefinitionGetEntities(parent, parentEnts); SU.EntitiesAddInstance(parentEnts, ci, null); }