示例#1
0
        public bool Do()
        {
            if (_uid == -1)
            {
                _p   = _sim.MakeParticle(_pos);
                _uid = _p.uid;
                _marker.MakeParticleMarker(_p);
            }
            else
            {
                var current = _sim.uidDistributer.current;

                _p = _sim.MakeParticle(_pos);
                _p.OverrideUID(_uid);

                for (var i = 0; i < _relatedSprings.Count; ++i)
                {
                    var s = _sim.MakeSpringByUID(
                        _relatedSprings[i].a.uid,
                        _relatedSprings[i].b.uid,
                        _relatedSprings[i].stiffness
                        );
                    s.OverrideUID(_relatedSprings[i].uid);
                }

                for (var i = 0; i < _relatedAngles.Count; ++i)
                {
                    var a = _sim.MakeAngleByUID(
                        _relatedAngles[i].a.uid,
                        _relatedAngles[i].b.uid,
                        _relatedAngles[i].m.uid,
                        _relatedAngles[i].stiffness
                        );
                    a.OverrideUID(_relatedAngles[i].uid);
                }
                for (var i = 0; i < _relatedPins.Count; ++i)
                {
                    var a = _sim.MakePinByUID(
                        _relatedPins[i].a.uid,
                        _relatedPins[i].pos
                        );
                    a.OverrideUID(_relatedAngles[i].uid);
                }

                _sim.uidDistributer.SetCounter(current);

                CommandHelper.MakeParticleMarker(_marker, _p, _relatedSprings, _relatedAngles, _relatedPins);
            }
            return(true);
        }
示例#2
0
        /*
         * Particle related
         */

        public static void MakeParticleMarker(
            MarkerManager marker, Particle p,
            List <SpringConstraint> springs, List <AngleConstraint> angles, List <PinConstraint> pins
            )
        {
            marker.MakeParticleMarker(p);
            for (var i = 0; i < springs.Count; ++i)
            {
                marker.MakeSpringMarker(springs[i]);
            }
            for (var i = 0; i < angles.Count; ++i)
            {
                marker.MakeAngleMarker(angles[i]);
            }
            for (var i = 0; i < pins.Count; ++i)
            {
                marker.MakePinMarker(pins[i]);
            }
        }