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);
            }
        }
Beispiel #2
0
        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);
        }