static void CreateManifoldConstraint(ref Vector3 unitX, ref Vector3 unitY, ref Vector3 unitZ, ref Vector3 offsetB, out Contact4 description)
        {
            description = new Contact4
            {
                //By convention, normal faces from B to A.
                SpringSettings = new SpringSettings
                {
                    NaturalFrequency = (float)(Math.PI * 2 * 60),
                    DampingRatio     = 100f,
                },
                MaximumRecoveryVelocity = 1f,
                FrictionCoefficient     = 1,
                Normal  = unitY,
                OffsetB = offsetB
            };

            for (int contactIndex = 0; contactIndex < 4; ++contactIndex)
            {
                ref var contact = ref Unsafe.Add(ref description.Contact0, contactIndex);

                var x            = (contactIndex & 1) - 0.5f;
                var z            = ((contactIndex & 2) >> 1) - 0.5f;
                var localOffsetA = new Vector3(x, 0.5f, z);
                var localOffsetB = new Vector3(x, -0.5f, z);
                var worldOffsetA = localOffsetA.X * unitX + localOffsetA.Y * unitY + localOffsetA.Z * unitZ;
                var worldOffsetB = localOffsetB.X * unitX + localOffsetB.Y * unitY + localOffsetB.Z * unitZ;
                contact.OffsetA          = worldOffsetA;
                contact.PenetrationDepth = 0.00f;
            }
Esempio n. 2
0
        /// <summary>
        /// Main code activity function
        /// </summary>
        /// <param name="executionContext"></param>
        /// <param name="crmWorkflowContext"></param>
        public override void ExecuteCRMWorkFlowActivity(CodeActivityContext executionContext, LocalWorkflowContext crmWorkflowContext)
        {
            if (crmWorkflowContext == null)
            {
                throw new ArgumentNullException(nameof(crmWorkflowContext));
            }

            TracingService = executionContext.GetExtension <ITracingService>();
            Service        = crmWorkflowContext.OrganizationService;

            // 1. Validation
            var account     = this.Account.Get(executionContext);
            int contactRole = this.ContactRole.Get(executionContext);

            if (account == null)
            {
                TracingService.Trace("Account parameter not set.");

                return;
            }

            if (contactRole < 1)
            {
                TracingService.Trace("Contact Role parameter not set.");
                return;
            }

            TracingService.Trace("Getting Contacts for Account {0} and Contact Role : {1}", account.Id, contactRole);

            // 2. Processing - Query CRM for contacts of a given role and linked to the given account
            DataAccessContact dataAccess = new DataAccessContact(this.Service, this.TracingService);

            EntityReference [] contactEntityReferences = dataAccess.GetAccountContacts(account.Id, (Contact_AccountRoleCode)contactRole);

            // 3. Return contacts found
            if (contactEntityReferences == null)
            {
                // No contacts
                return;
            }

            int contactCount = 0;

            if (contactEntityReferences.Length > contactCount)
            {
                Contact1.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact2.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact3.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact4.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact5.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact6.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact7.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact8.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact9.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact10.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact11.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact12.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact13.Set(executionContext, contactEntityReferences[contactCount++]);
            }

            if (contactEntityReferences.Length > contactCount)
            {
                Contact14.Set(executionContext, contactEntityReferences[contactCount++]);
            }
            if (contactEntityReferences.Length > contactCount)
            {
                Contact15.Set(executionContext, contactEntityReferences[contactCount]);
            }
        }