private void GenerateApplyOutermorphismToVectorMacro(AstFrame frameInfo) { var inputsText = ComposeMacroInputs( "om", DefaultStructure.Outermorphism, "mv", frameInfo.FrameMultivector.Name ); var commandsList = GMacDslSyntaxFactory.SyntaxElementsList( GMacDslSyntaxFactory.AssignToLocalVariable("imageMv", "mv.#E1# * om.ImageV1.@G1@") ); for (var index = 2; index <= frameInfo.VSpaceDimension; index++) { var id = FrameUtils.BasisVectorId(index - 1); commandsList.Add( GMacDslSyntaxFactory.AssignToLocalVariable( "imageMv", "imageMv + mv.#E" + id + "# * om.ImageV" + index + ".@G1@" ) ); } commandsList.AddEmptyLine(); var commandsText = GMacLanguage.CodeGenerator.GenerateCode(commandsList); GenerateMacro( frameInfo, DefaultMacro.Outermorphism.ApplyToVector, inputsText, commandsText, "imageMv" ); }
private void GenerateOutermorphismToLinearTransformMacro(AstFrame frameInfo) { var commandsList = GMacDslSyntaxFactory.SyntaxElementsList( GMacDslSyntaxFactory.DeclareLocalVariable(DefaultStructure.LinearTransform, "newTr"), GMacDslSyntaxFactory.EmptyLine(), GMacDslSyntaxFactory.FixedCode("let newTr.ImageE0 = Multivector(#E0# = '1')"), GMacDslSyntaxFactory.EmptyLine() ); for (var index = 1; index <= frameInfo.VSpaceDimension; index++) { var id = FrameUtils.BasisVectorId(index - 1); commandsList.Add( GMacDslSyntaxFactory.AssignToLocalVariable( "newTr.ImageE" + id, "om.ImageV" + index + ".@G1@" ) ); } commandsList.AddEmptyLine(); for (var grade = 2; grade <= frameInfo.VSpaceDimension; grade++) { var kvSpaceDim = frameInfo.KvSpaceDimension(grade); for (var index = 0; index < kvSpaceDim; index++) { int id = FrameUtils.BasisBladeId(grade, index); int id1, id2; id.SplitBySmallestBasisVectorId(out id1, out id2); commandsList.Add( GMacDslSyntaxFactory.AssignToLocalVariable( "newTr.ImageE" + id, " newTr.ImageE" + id1 + " op newTr.ImageE" + id2 ) ); } commandsList.AddEmptyLine(); } var commandsText = GMacLanguage.CodeGenerator.GenerateCode(commandsList); GenerateMacro( frameInfo, DefaultMacro.Outermorphism.ToLinearTransform, ComposeMacroInputs("om", DefaultStructure.Outermorphism), DefaultStructure.LinearTransform, commandsText, "newTr" ); }