├── RhinoLinkLogo.png ├── RhinoLink ├── Libraries │ ├── Rhino │ │ ├── ml32i4.dll │ │ ├── ml64i4.dll │ │ ├── Wolfram.NETLink.dll │ │ └── WolframScripting.rhp │ └── Grasshopper │ │ ├── WolframGrasshopperSupport.dll │ │ └── WolframGrasshopperComponents.gha ├── PacletInfo.m ├── Files │ ├── AssemblyInfo.cs │ └── Component.cs └── Documentation │ └── English │ ├── ReferencePages │ └── Symbols │ │ ├── RhinoDocObjects.nb │ │ ├── InstallRhinoPlugin.nb │ │ └── ToRhino.nb │ └── Guides │ └── RhinoLink.nb ├── Source ├── WolframGrasshopperSupport │ ├── Wolfram.NETLink.dll │ ├── ExprParam.cs │ ├── LinkParam.cs │ ├── LinkType.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── ExprType.cs │ └── Utils.cs ├── WolframGrasshopperComponents │ ├── Resources │ │ ├── Spikey.bmp │ │ ├── f1Icon.png │ │ ├── f2Icon.png │ │ ├── fnIcon.png │ │ ├── codeIcon.png │ │ ├── spikeyIcon.png │ │ └── wolfieIcon.png │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── WolframGrasshopperComponentsInfo.cs │ ├── WolframCode.cs │ ├── WolframF.cs │ ├── WolframFx.cs │ └── WolframFxy.cs └── WolframScripting │ ├── WolframStopScripting.cs │ ├── WolframStartScripting.cs │ ├── Properties │ └── AssemblyInfo.cs │ ├── KernelLinkProvider.cs │ └── WolframScriptingPlugIn.cs ├── .project ├── VisualStudioBuild ├── RhinoLinkBuildProperties.proj ├── RhinoLink.sln ├── WolframGrasshopperSupport │ └── WolframGrasshopperSupport.csproj ├── WolframScripting │ └── WolframScripting.csproj └── WolframGrasshopperComponents │ └── WolframGrasshopperComponents.csproj ├── COPYING.md ├── BUILDING.md ├── CONTRIBUTING.md └── README.md /RhinoLinkLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/RhinoLinkLogo.png -------------------------------------------------------------------------------- /RhinoLink/Libraries/Rhino/ml32i4.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/RhinoLink/Libraries/Rhino/ml32i4.dll -------------------------------------------------------------------------------- /RhinoLink/Libraries/Rhino/ml64i4.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/RhinoLink/Libraries/Rhino/ml64i4.dll -------------------------------------------------------------------------------- /RhinoLink/Libraries/Rhino/Wolfram.NETLink.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/RhinoLink/Libraries/Rhino/Wolfram.NETLink.dll -------------------------------------------------------------------------------- /RhinoLink/Libraries/Rhino/WolframScripting.rhp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/RhinoLink/Libraries/Rhino/WolframScripting.rhp -------------------------------------------------------------------------------- /Source/WolframGrasshopperSupport/Wolfram.NETLink.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/Source/WolframGrasshopperSupport/Wolfram.NETLink.dll -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Resources/Spikey.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/Source/WolframGrasshopperComponents/Resources/Spikey.bmp -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Resources/f1Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/Source/WolframGrasshopperComponents/Resources/f1Icon.png -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Resources/f2Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/Source/WolframGrasshopperComponents/Resources/f2Icon.png -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Resources/fnIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/Source/WolframGrasshopperComponents/Resources/fnIcon.png -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Resources/codeIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/Source/WolframGrasshopperComponents/Resources/codeIcon.png -------------------------------------------------------------------------------- /RhinoLink/Libraries/Grasshopper/WolframGrasshopperSupport.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/RhinoLink/Libraries/Grasshopper/WolframGrasshopperSupport.dll -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Resources/spikeyIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/Source/WolframGrasshopperComponents/Resources/spikeyIcon.png -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Resources/wolfieIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/Source/WolframGrasshopperComponents/Resources/wolfieIcon.png -------------------------------------------------------------------------------- /RhinoLink/Libraries/Grasshopper/WolframGrasshopperComponents.gha: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WolframResearch/RhinoLink/HEAD/RhinoLink/Libraries/Grasshopper/WolframGrasshopperComponents.gha -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | GrasshopperLink 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /VisualStudioBuild/RhinoLinkBuildProperties.proj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | c:\Program Files\Rhino 6 6 | 7 | -------------------------------------------------------------------------------- /COPYING.md: -------------------------------------------------------------------------------- 1 | RhinoLink is Copyright (C) 2018, Wolfram Research, Inc. 2 | 3 | --- 4 | 5 | [![Create Commons License](https://i.creativecommons.org/l/by-nc/4.0/88x31.png)](http://creativecommons.org/licenses/by-nc/4.0/) 6 | 7 | 8 | This work is licensed under a [Creative Commons Attribution-NonCommercial 4.0 International License](http://creativecommons.org/licenses/by-nc/4.0/). 9 | 10 | -------------------------------------------------------------------------------- /RhinoLink/PacletInfo.m: -------------------------------------------------------------------------------- 1 | (* Paclet Info File *) 2 | 3 | (* created 2018/05/31*) 4 | 5 | Paclet[ 6 | Name -> "RhinoLink", 7 | Version -> "0.9.0", 8 | Description -> "Wolfram Language interface to Rhino3D", 9 | MathematicaVersion -> "11+", 10 | Extensions -> 11 | { 12 | {"Documentation", Language -> "English", MainPage -> "Guides/RhinoLink"}, 13 | {"Kernel", Root -> "Kernel", Context -> 14 | {"RhinoLink`"} 15 | } 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperSupport/ExprParam.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using Grasshopper.Kernel; 7 | using Grasshopper.Kernel.Types; 8 | 9 | 10 | namespace Wolfram.Grasshopper { 11 | 12 | public class ExprParam : GH_Param { 13 | 14 | // We need to supply a constructor without arguments that calls the base class constructor. 15 | public ExprParam() : base("E", "E", "Represents an arbitrary Wolfram Engine expression", "Params", "Wolfram", GH_ParamAccess.item) { } 16 | 17 | public override System.Guid ComponentGuid { 18 | get { return new Guid("{c88e2237-48a8-4372-8b56-d65254239171}"); } 19 | } 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperSupport/LinkParam.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using Grasshopper.Kernel; 7 | using Grasshopper.Kernel.Types; 8 | 9 | // This lives in the WolframGrasshopperSupport assembly instead of the WolframGrasshopperComponents assembly because I 10 | // don't think we want it to show up in the GHrasshopper GUI. 11 | 12 | namespace Wolfram.Grasshopper { 13 | 14 | public class LinkParam : GH_Param { 15 | 16 | // We need to supply a constructor without arguments that calls the base class constructor. 17 | public LinkParam() : base("L", "L", "The link to the Wolfram Engine", "Params", "Wolfram", GH_ParamAccess.item) { } 18 | 19 | public override System.Guid ComponentGuid { 20 | get { return new Guid("{b8c0e44f-f815-40f7-9e08-dae4da0813a2}"); } 21 | } 22 | 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /Source/WolframScripting/WolframStopScripting.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Rhino; 3 | using Rhino.Commands; 4 | 5 | namespace Wolfram.Rhino 6 | { 7 | [System.Runtime.InteropServices.Guid("1d22d85d-1455-426e-af9a-184cd3b9630e")] 8 | public class WolframStopScripting : Command 9 | { 10 | static WolframStopScripting _instance; 11 | public WolframStopScripting() 12 | { 13 | _instance = this; 14 | } 15 | 16 | ///The only instance of the WolframStopScripting command. 17 | public static WolframStopScripting Instance 18 | { 19 | get { return _instance; } 20 | } 21 | 22 | public override string EnglishName 23 | { 24 | get { return "WolframDisconnect"; } 25 | } 26 | 27 | protected override Result RunCommand(RhinoDoc doc, RunMode mode) 28 | { 29 | WolframScriptingPlugIn.Instance.StopReaderThread(); 30 | return Result.Success; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Source/WolframScripting/WolframStartScripting.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | 4 | using Rhino; 5 | using Rhino.Commands; 6 | 7 | namespace Wolfram.Rhino 8 | { 9 | [System.Runtime.InteropServices.Guid("fcb07020-5dd7-4dae-a832-facef0bc6c5c")] 10 | public class WolframStartScripting : Command 11 | { 12 | static WolframStartScripting _instance; 13 | public WolframStartScripting() 14 | { 15 | _instance = this; 16 | } 17 | 18 | ///The only instance of the WolframStartScripting command. 19 | public static WolframStartScripting Instance 20 | { 21 | get { return _instance; } 22 | } 23 | 24 | public override string EnglishName 25 | { 26 | get { return "WolframConnect"; } 27 | } 28 | 29 | protected override Result RunCommand(RhinoDoc doc, RunMode mode) 30 | { 31 | WolframScriptingPlugIn.Instance.StartReaderThread(); 32 | return Result.Success; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperSupport/LinkType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using Wolfram.NETLink; 6 | using Grasshopper.Kernel; 7 | using Grasshopper.Kernel.Types; 8 | 9 | namespace Wolfram.Grasshopper { 10 | 11 | 12 | public class LinkType : GH_Goo { 13 | 14 | public LinkType() { 15 | Value = null; 16 | } 17 | 18 | public LinkType(IKernelLink link) { 19 | Value = link; 20 | } 21 | 22 | // Copy Constructor 23 | public LinkType(LinkType source) { 24 | Value = source.Value; 25 | } 26 | 27 | public override IGH_Goo Duplicate() { 28 | return new LinkType(this); 29 | } 30 | 31 | // I think this determines whether an input will fire. I don't want unassigned links to fire, right? 32 | public override bool IsValid { 33 | get { return Value != null; } 34 | } 35 | 36 | public override string TypeName { 37 | get { return "Wolfram Link"; } 38 | } 39 | 40 | public override string TypeDescription { 41 | get { return "The link to the Wolfram Engine"; } 42 | } 43 | 44 | public override string ToString() { 45 | return Value.ToString(); 46 | } 47 | 48 | } 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /BUILDING.md: -------------------------------------------------------------------------------- 1 | 2 | ## How to build RhinoLink 3 | 4 | RhinoLink has several buildable components, including documentation. This document covers building everything but the documentation. 5 | 6 | #### Prerequisites 7 | * Version 11.0 or greater of Mathematica or Wolfram Desktop 8 | * Version 6 or greater of Rhinoceros 9 | * Visual Studio (eg, Community Edition) 10 | 11 | #### Building RhinoLink 12 | * Start Visual Studio and open the project file `RhinoLink\VisualStudioBuild\RhinoLink.sln`. 13 | * Choose Build > Rebuild Solution. 14 | 15 | #### Installing RhinoLink 16 | * In Mathematica, run `PacletInstall["your\path\RhinoLink\RhinoLink"]`. 17 | * Load the RhinoLink package with `Get["RhinoLink"]`. 18 | * Install RhinoLink components by evaluating `InstallRhinoPlugin[]`. 19 | 20 | #### Running RhinoLink 21 | * Start Rhino and run the command `WolframConnect`. 22 | * Start Mathematica, create a new notebook, and set the notebook's kernel to RhinoAttach by choosing Evaluation > Notebook's Kernel > RhinoAttach. 23 | * Test if RhinoLink is running by evaluating `RhinoDocObjects[]`. It should return an empty list (or a non-empty list if you have a non-empty Rhino document). 24 | * In the Help Browser (Help > Wolfram Documentation), search for RhinoLink to bring up the guide page, which contains links to the complete documentation. 25 | -------------------------------------------------------------------------------- /RhinoLink/Files/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using Grasshopper.Kernel; 4 | 5 | namespace Wolfram.Grasshopper 6 | { 7 | public class `Name`Info : GH_AssemblyInfo 8 | { 9 | public override string Name 10 | { 11 | get 12 | { 13 | return "`Name`"; 14 | } 15 | } 16 | public override Bitmap Icon 17 | { 18 | get 19 | { 20 | //Return a 24x24 pixel bitmap to represent this GHA library. 21 | return `Bitmap`; 22 | } 23 | } 24 | public override string Description 25 | { 26 | get 27 | { 28 | //Return a short string describing the purpose of this GHA library. 29 | return "`Description`"; 30 | } 31 | } 32 | public override Guid Id 33 | { 34 | get 35 | { 36 | return new Guid("`GUID`"); 37 | } 38 | } 39 | 40 | public override string AuthorName 41 | { 42 | get 43 | { 44 | //Return a string identifying you or your company. 45 | return "`AuthorName`"; 46 | } 47 | } 48 | public override string AuthorContact 49 | { 50 | get 51 | { 52 | //Return a string representing your preferred contact details. 53 | return "`AuthorContact`"; 54 | } 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Wolfram® 2 | 3 | Thank you for taking the time to contribute to the [Wolfram Research](https://github.com/wolframresearch) repos on GitHub. 4 | 5 | ## Licensing of Contributions 6 | 7 | By contributing to Wolfram, you agree and affirm that: 8 | 9 | > Wolfram may release your contribution under the terms of the [MIT license](https://opensource.org/licenses/MIT); and 10 | 11 | > You have read and agreed to the [Developer Certificate of Origin](http://developercertificate.org/), version 1.1 or later. 12 | 13 | Please see [COPYING.md](COPYING.md) for licensing conditions pertaining 14 | to individual repositories. 15 | 16 | 17 | ## Bug reports 18 | 19 | ### Security Bugs 20 | 21 | Please **DO NOT** file a public issue regarding a security issue. 22 | Rather, send your report privately to security@wolfram.com. Security 23 | reports are appreciated and we will credit you for it. We do not offer 24 | a security bounty, but the forecast in your neighborhood will be cloudy 25 | with a chance of Wolfram schwag! 26 | 27 | ### General Bugs 28 | 29 | Please use the repository issues page to submit general bug issues. 30 | 31 | Please do not duplicate issues. 32 | 33 | Please do send a complete and well-written report to us. Note: **the 34 | thoroughness of your report will positively correlate to our willingness 35 | and ability to address it**. 36 | 37 | When reporting issues, always include: 38 | 39 | * Your version of *Mathematica*® or the Wolfram Language. 40 | * Your version of Rhino. 41 | * Your operating system. 42 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperSupport/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Wolfram.Rhino.Support 0.1")] 9 | [assembly: AssemblyDescription("Support classes for Wolfram RhinoLink")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Wolfram Research, Inc.")] 12 | [assembly: AssemblyProduct("Wolfram RhinoLink")] 13 | [assembly: AssemblyCopyright("Copyright (c) 2014, Wolfram Research, Inc.")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("55d4f466-64de-4100-8ce0-69948b64bcb0")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("0.1.0.0")] 36 | [assembly: AssemblyFileVersion("0.1.0.0")] 37 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Rhino.PlugIns; 5 | 6 | 7 | // General Information about an assembly is controlled through the following 8 | // set of attributes. Change these attribute values to modify the information 9 | // associated with an assembly. 10 | [assembly: AssemblyTitle("WolframGrasshopperComponents")] 11 | [assembly: AssemblyDescription("")] 12 | [assembly: AssemblyConfiguration("")] 13 | [assembly: AssemblyCompany("")] 14 | [assembly: AssemblyProduct("WolframGrasshopperComponents")] 15 | [assembly: AssemblyCopyright("Copyright © 2014")] 16 | [assembly: AssemblyTrademark("")] 17 | [assembly: AssemblyCulture("")] 18 | 19 | // Setting ComVisible to false makes the types in this assembly not visible 20 | // to COM components. If you need to access a type in this assembly from 21 | // COM, set the ComVisible attribute to true on that type. 22 | [assembly: ComVisible(false)] 23 | 24 | // The following GUID is for the ID of the typelib if this project is exposed to COM 25 | [assembly: Guid("b0bddc6b-e4ea-4eed-9476-41e8e08a06ef")] // This will also be the Guid of the Rhino plug-in 26 | 27 | // Version information for an assembly consists of the following four values: 28 | // 29 | // Major Version 30 | // Minor Version 31 | // Build Number 32 | // Revision 33 | // 34 | // You can specify all the values or you can default the Build and Revision Numbers 35 | // by using the '*' as shown below: 36 | // [assembly: AssemblyVersion("1.0.*")] 37 | [assembly: AssemblyVersion("1.0.0.0")] 38 | [assembly: AssemblyFileVersion("1.0.0.0")] 39 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/WolframGrasshopperComponentsInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using Grasshopper.Kernel; 4 | 5 | namespace WolframGrasshopperComponents 6 | { 7 | public class WolframGrasshopperComponentsInfo : GH_AssemblyInfo 8 | { 9 | public override string Name 10 | { 11 | get 12 | { 13 | return "WolframComponents"; 14 | } 15 | } 16 | public override Bitmap Icon 17 | { 18 | get 19 | { 20 | //Return a 24x24 pixel bitmap to represent this GHA library. 21 | System.Resources.ResourceManager temp = new System.Resources.ResourceManager("WolframGrasshopperComponents.Resources", typeof(WolframGrasshopperComponentsInfo).Assembly); 22 | object obj = temp.GetObject("wolfieIcon"); 23 | return ((System.Drawing.Bitmap)(obj)); 24 | } 25 | } 26 | public override string Description 27 | { 28 | get 29 | { 30 | //Return a short string describing the purpose of this GHA library. 31 | return ""; 32 | } 33 | } 34 | public override Guid Id 35 | { 36 | get 37 | { 38 | return new Guid("{01232c5d-6656-4c8d-ace0-6625841871e0}"); 39 | } 40 | } 41 | 42 | public override string AuthorName 43 | { 44 | get 45 | { 46 | //Return a string identifying you or your company. 47 | return "Wolfram Research, Inc."; 48 | } 49 | } 50 | public override string AuthorContact 51 | { 52 | get 53 | { 54 | //Return a string representing your preferred contact details. 55 | return ""; 56 | } 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Source/WolframScripting/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Rhino.PlugIns; 5 | 6 | 7 | // Plug-in Description Attributes - all of these are optional 8 | // These will show in Rhino's option dialog, in the tab Plug-ins 9 | [assembly: PlugInDescription(DescriptionType.Address, "-")] 10 | [assembly: PlugInDescription(DescriptionType.Country, "-")] 11 | [assembly: PlugInDescription(DescriptionType.Email, "-")] 12 | [assembly: PlugInDescription(DescriptionType.Phone, "-")] 13 | [assembly: PlugInDescription(DescriptionType.Fax, "-")] 14 | [assembly: PlugInDescription(DescriptionType.Organization, "-")] 15 | [assembly: PlugInDescription(DescriptionType.UpdateUrl, "-")] 16 | [assembly: PlugInDescription(DescriptionType.WebSite, "-")] 17 | 18 | 19 | // General Information about an assembly is controlled through the following 20 | // set of attributes. Change these attribute values to modify the information 21 | // associated with an assembly. 22 | [assembly: AssemblyTitle("WolframScripting")] // Plug-In title is extracted from this 23 | [assembly: AssemblyDescription("")] 24 | [assembly: AssemblyConfiguration("")] 25 | [assembly: AssemblyCompany("")] 26 | [assembly: AssemblyProduct("WolframScripting")] 27 | [assembly: AssemblyCopyright("Copyright © 2014")] 28 | [assembly: AssemblyTrademark("")] 29 | [assembly: AssemblyCulture("")] 30 | 31 | // Setting ComVisible to false makes the types in this assembly not visible 32 | // to COM components. If you need to access a type in this assembly from 33 | // COM, set the ComVisible attribute to true on that type. 34 | [assembly: ComVisible(false)] 35 | 36 | // The following GUID is for the ID of the typelib if this project is exposed to COM 37 | [assembly: Guid("82e2b1fb-069d-4d38-af39-b8fd85bdba4a")] // This will also be the Guid of the Rhino plug-in 38 | 39 | // Version information for an assembly consists of the following four values: 40 | // 41 | // Major Version 42 | // Minor Version 43 | // Build Number 44 | // Revision 45 | // 46 | // You can specify all the values or you can default the Build and Revision Numbers 47 | // by using the '*' as shown below: 48 | // [assembly: AssemblyVersion("1.0.*")] 49 | [assembly: AssemblyVersion("1.0.0.0")] 50 | [assembly: AssemblyFileVersion("1.0.0.0")] 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # RhinoLink for Wolfram Language 3 | 4 | ![RhinoLinkLogo](RhinoLinkLogo.png) 5 | 6 | RhinoLink is a prototype Wolfram Language paclet that provides a two-way communication link between McNeel and Associates' [Rhino](https://www.rhino3d.com/) and [Mathematica](http://www.wolfram.com/mathematica/) or [Wolfram Desktop](https://www.wolfram.com/desktop/). With RhinoLink you can: 7 | 8 | * script Rhino with Wolfram Language code 9 | * create Grasshopper components that encapsulate Wolfram Language code 10 | * control Rhino content with Wolfram Language interfaces 11 | * source Rhino geometry from Mathematica 12 | * include Wolfram Language code directly in Grasshopper structures 13 | * use Rhino as a geometry server from Wolfram Language 14 | 15 | RhinoLink currently supports Rhino 6 for Windows and Mathematica versions 11.0+. 16 | 17 | ### Installing the RhinoLink release 18 | 19 | The RhinoLink release comes in the form of a `.paclet` file, which contains the entire package and its documentation. Download the latest release from the [GitHub repo's releases page](https://github.com/WolframResearch/RhinoLink/releases). To permanently install the RhinoLink paclet, run the following commands in the Wolfram Language: 20 | 21 | PacletInstall["/full/path/to/RhinoLink.paclet"] 22 | < Notebook's Kernel. 29 | 30 | To get an overview of RhinoLink functionality, search for RhinoLink in the help browser, which should bring up the RhinoLink guide page. The guide page contains links to documentation of all RhinoLink functions as well as links to tutorials to help get you started. 31 | 32 | Start with the "Control a Parametric Surface in Rhino with a Manipulate Interface in Mathematica" or "Create Box Structures in Rhino with an Interface in Mathematica" tutorials to see how to use RhinoLink with Rhino. For a basic example of creating a Grasshopper component, start with "Make a Grasshopper Component that Translates Graphics3D Output to Rhino Meshes". The basics of .NET programming with Wolfram Language are explained in the "Use NETLink to Examine and Create Objects in Rhino" tutorial. 33 | 34 | ### Who is behind this? 35 | 36 | RhinoLink is maintained by [Christopher Carlson](https://github.com/carlsongithub) and Todd Gayley of [Wolfram Research](http://wolfram.com/). Todd created RhinoLink on top of his [.NET/Link](http://reference.wolfram.com/language/NETLink/tutorial/Overview.html) package, and Chris created the examples, RhinoLink utilities, and documentation. 37 | 38 | ### How can you help? 39 | 40 | The 0.9 release of RhinoLink has a basic set of utilities that convert between Rhino and Wolfram Language data types. The richer that set, the more useful RhinoLink will become. We welcome contributions from outside developers. 41 | 42 | ### Further information 43 | 44 | See the following files for more information: 45 | 46 | * [COPYING.md](COPYING.md) - RhinoLink license 47 | * [CONTRIBUTING.md](CONTRIBUTING.md) - Guidelines for contributing to RhinoLink 48 | * [BUILDING.md](BUILDING.md) - Instructions for building and debugging RhinoLink 49 | -------------------------------------------------------------------------------- /VisualStudioBuild/RhinoLink.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27428.2015 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WolframGrasshopperSupport", "WolframGrasshopperSupport\WolframGrasshopperSupport.csproj", "{4E0950C0-62CE-454C-B403-B5115D0153D7}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WolframGrasshopperComponents", "WolframGrasshopperComponents\WolframGrasshopperComponents.csproj", "{666A7B86-A665-447A-AEE6-83556CD118F7}" 9 | ProjectSection(ProjectDependencies) = postProject 10 | {4E0950C0-62CE-454C-B403-B5115D0153D7} = {4E0950C0-62CE-454C-B403-B5115D0153D7} 11 | EndProjectSection 12 | EndProject 13 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WolframScripting", "WolframScripting\WolframScripting.csproj", "{69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}" 14 | EndProject 15 | Global 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 17 | Debug|Any CPU = Debug|Any CPU 18 | Debug32|Any CPU = Debug32|Any CPU 19 | Debug64|Any CPU = Debug64|Any CPU 20 | Release|Any CPU = Release|Any CPU 21 | EndGlobalSection 22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 23 | {4E0950C0-62CE-454C-B403-B5115D0153D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 24 | {4E0950C0-62CE-454C-B403-B5115D0153D7}.Debug|Any CPU.Build.0 = Debug|Any CPU 25 | {4E0950C0-62CE-454C-B403-B5115D0153D7}.Debug32|Any CPU.ActiveCfg = Debug|Any CPU 26 | {4E0950C0-62CE-454C-B403-B5115D0153D7}.Debug32|Any CPU.Build.0 = Debug|Any CPU 27 | {4E0950C0-62CE-454C-B403-B5115D0153D7}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU 28 | {4E0950C0-62CE-454C-B403-B5115D0153D7}.Debug64|Any CPU.Build.0 = Debug|Any CPU 29 | {4E0950C0-62CE-454C-B403-B5115D0153D7}.Release|Any CPU.ActiveCfg = Release|Any CPU 30 | {4E0950C0-62CE-454C-B403-B5115D0153D7}.Release|Any CPU.Build.0 = Release|Any CPU 31 | {666A7B86-A665-447A-AEE6-83556CD118F7}.Debug|Any CPU.ActiveCfg = Debug64|Any CPU 32 | {666A7B86-A665-447A-AEE6-83556CD118F7}.Debug|Any CPU.Build.0 = Debug64|Any CPU 33 | {666A7B86-A665-447A-AEE6-83556CD118F7}.Debug32|Any CPU.ActiveCfg = Debug32|Any CPU 34 | {666A7B86-A665-447A-AEE6-83556CD118F7}.Debug32|Any CPU.Build.0 = Debug32|Any CPU 35 | {666A7B86-A665-447A-AEE6-83556CD118F7}.Debug64|Any CPU.ActiveCfg = Debug64|Any CPU 36 | {666A7B86-A665-447A-AEE6-83556CD118F7}.Debug64|Any CPU.Build.0 = Debug64|Any CPU 37 | {666A7B86-A665-447A-AEE6-83556CD118F7}.Release|Any CPU.ActiveCfg = Release|Any CPU 38 | {666A7B86-A665-447A-AEE6-83556CD118F7}.Release|Any CPU.Build.0 = Release|Any CPU 39 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}.Debug|Any CPU.ActiveCfg = Debug64|Any CPU 40 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}.Debug|Any CPU.Build.0 = Debug64|Any CPU 41 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}.Debug32|Any CPU.ActiveCfg = Debug32|Any CPU 42 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}.Debug32|Any CPU.Build.0 = Debug32|Any CPU 43 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}.Debug64|Any CPU.ActiveCfg = Debug64|Any CPU 44 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}.Debug64|Any CPU.Build.0 = Debug64|Any CPU 45 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}.Release|Any CPU.ActiveCfg = Release|Any CPU 46 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2}.Release|Any CPU.Build.0 = Release|Any CPU 47 | EndGlobalSection 48 | GlobalSection(SolutionProperties) = preSolution 49 | HideSolutionNode = FALSE 50 | EndGlobalSection 51 | GlobalSection(ExtensibilityGlobals) = postSolution 52 | SolutionGuid = {972223A3-82DE-4E09-B7CF-49EE794DC9D5} 53 | EndGlobalSection 54 | EndGlobal 55 | -------------------------------------------------------------------------------- /VisualStudioBuild/WolframGrasshopperSupport/WolframGrasshopperSupport.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | 8.0.30703 8 | 2.0 9 | {4E0950C0-62CE-454C-B403-B5115D0153D7} 10 | Library 11 | Properties 12 | WolframGrasshopperSupport 13 | WolframGrasshopperSupport 14 | v4.5 15 | 512 16 | 17 | 18 | 19 | true 20 | full 21 | false 22 | bin\Debug\ 23 | DEBUG;TRACE 24 | prompt 25 | 4 26 | false 27 | 28 | 29 | pdbonly 30 | true 31 | bin\Release\ 32 | TRACE 33 | prompt 34 | 4 35 | false 36 | 37 | 38 | 39 | False 40 | $(RhinoPath)\Plug-ins\Grasshopper\GH_IO.dll 41 | 42 | 43 | False 44 | $(RhinoPath)\Plug-ins\Grasshopper\GH_Util.dll 45 | 46 | 47 | False 48 | $(RhinoPath)\Plug-ins\Grasshopper\Grasshopper.dll 49 | False 50 | 51 | 52 | False 53 | $(RhinoPath)\System\RhinoCommon.dll 54 | False 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | ..\..\RhinoLink\Libraries\Rhino\Wolfram.NETLink.dll 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | Copy "$(TargetPath)" "$(TargetDir)..\..\..\..\RhinoLink\libraries\grasshopper\$(ProjectName).dll" 79 | 80 | 87 | 88 | -------------------------------------------------------------------------------- /VisualStudioBuild/WolframScripting/WolframScripting.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug32 6 | AnyCPU 7 | 8.0.30703 8 | 2.0 9 | {69AF1AB5-B098-4384-A6F0-CFC5FADBA4C2} 10 | Library 11 | Properties 12 | WolframScripting 13 | WolframScripting 14 | v4.5 15 | 512 16 | false 17 | 18 | 19 | 20 | true 21 | full 22 | false 23 | bin\ 24 | DEBUG;TRACE 25 | prompt 26 | 4 27 | 28 | 29 | true 30 | full 31 | false 32 | bin\ 33 | DEBUG;TRACE 34 | prompt 35 | false 36 | 37 | 38 | pdbonly 39 | true 40 | bin\ 41 | TRACE 42 | prompt 43 | 4 44 | false 45 | 46 | 47 | 48 | $(RhinoPath)\System\RhinoCommon.dll 49 | False 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | False 59 | ..\..\RhinoLink\Libraries\Rhino\Wolfram.NETLink.dll 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 77 | 78 | Copy "$(TargetPath)" "$(TargetDir)$(ProjectName).rhp" 79 | 80 | Echo "$(TargetDir)..\..\..\RhinoLink\Libraries\Rhino\$(ProjectName).rhp" 81 | Copy "$(TargetPath)" "$(TargetDir)..\..\..\RhinoLink\Libraries\Rhino\$(ProjectName).rhp" 82 | 83 | Erase "$(TargetPath)" 84 | 85 | 86 | 87 | 88 | Program 89 | c:\Program Files\Rhino 6\System\Rhino.exe 90 | false 91 | 92 | 93 | en-US 94 | 95 | 96 | c:\Program Files\Rhino 6\System\Rhino.exe 97 | 98 | 99 | Program 100 | false 101 | 102 | 103 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/WolframCode.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | using Grasshopper.Kernel; 5 | using Rhino.Geometry; 6 | 7 | using Wolfram.NETLink; 8 | 9 | 10 | namespace Wolfram.Grasshopper 11 | { 12 | public class WolframCodeComponent : GH_Component 13 | { 14 | /// 15 | /// Initializes a new instance of the CodeComponent class. 16 | /// 17 | public WolframCodeComponent() 18 | : base("WL Code", "WL Code", 19 | "Evaluate Wolfram Language code", 20 | "Wolfram", "Code") 21 | { 22 | } 23 | 24 | /// 25 | /// Registers all the input parameters for this component. 26 | /// 27 | protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) 28 | { 29 | pManager.AddTextParameter("Expr", "E", "The Wolfram Language expression to execute", GH_ParamAccess.item); 30 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 31 | pManager[1].Optional = true; 32 | } 33 | 34 | /// 35 | /// Registers all the output parameters for this component. 36 | /// 37 | protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) 38 | { 39 | pManager.AddGenericParameter("Result", "R", "The result", GH_ParamAccess.item); 40 | pManager.AddParameter(new ExprParam(), "Expr", "E", "The entire result, as an Expr, for debugging", GH_ParamAccess.item); 41 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 42 | } 43 | 44 | /// 45 | /// This is the method that actually does the work. 46 | /// 47 | /// The DA object is used to retrieve from inputs and store in outputs. 48 | protected override void SolveInstance(IGH_DataAccess DA) 49 | { 50 | string code = null; 51 | LinkType linkType = null; 52 | 53 | // Use the DA object to retrieve the data inside the first input parameter. 54 | // If the retieval fails (for example if there is no data) we need to abort. 55 | if (!DA.GetData(0, ref code)) { return; } 56 | // Link arg is optional. 57 | DA.GetData(1, ref linkType); 58 | 59 | // If the retrieved data is Nothing, we need to abort. 60 | if (code == null) { return; } 61 | 62 | IKernelLink ml = linkType != null ? linkType.Value : Utils.GetLink(); 63 | 64 | ml.PutFunction("EvaluatePacket", 1); 65 | ml.PutFunction("ToExpression", 1); 66 | ml.Put(code); 67 | ml.EndPacket(); 68 | 69 | try { 70 | ml.WaitForAnswer(); 71 | } catch (MathLinkException) { 72 | ml.ClearError(); 73 | AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Error on the link."); 74 | ml.NewPacket(); 75 | return; 76 | } 77 | 78 | // This is the (likely) temporary feature that puts the Expr result on the second output. 79 | Expr debuggingExpr = ml.PeekExpr(); 80 | DA.SetData(1, new ExprType(debuggingExpr)); 81 | 82 | if (!Utils.ReadAndStoreResult("Any", 0, ml, DA, GH_ParamAccess.item, this)) 83 | return; 84 | 85 | // 2 is the index here because 1 was used (temporarily) for the debugging feature above. 86 | DA.SetData(2, new LinkType(ml)); 87 | } 88 | 89 | /// 90 | /// Provides an Icon for the component. 91 | /// 92 | protected override System.Drawing.Bitmap Icon 93 | { 94 | get 95 | { 96 | System.Resources.ResourceManager temp = new System.Resources.ResourceManager("WolframGrasshopperComponents.Resources", typeof(WolframCodeComponent).Assembly); 97 | object obj = temp.GetObject("codeIcon"); 98 | return ((System.Drawing.Bitmap)(obj)); 99 | } 100 | } 101 | 102 | /// 103 | /// The Exposure property controls where in the panel a component icon 104 | /// will appear. There are seven possible locations (primary to septenary), 105 | /// each of which can be combined with the GH_Exposure.obscure flag, which 106 | /// ensures the component will only be visible on panel dropdowns. 107 | /// 108 | public override GH_Exposure Exposure 109 | { 110 | get { return GH_Exposure.primary; } 111 | } 112 | 113 | /// 114 | /// Gets the unique ID for this component. Do not change this ID after release. 115 | /// 116 | public override Guid ComponentGuid 117 | { 118 | get { return new Guid("{aa15eaab-5801-421a-a937-bfdfa4768b64}"); } 119 | } 120 | } 121 | } -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/WolframF.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | using Grasshopper.Kernel; 5 | using Grasshopper.Kernel.Types; 6 | using Rhino.Geometry; 7 | 8 | using Wolfram.NETLink; 9 | 10 | namespace Wolfram.Grasshopper 11 | { 12 | public class WolframFComponent : GH_Component 13 | { 14 | /// 15 | /// Initializes a new instance of the ObjectComponent class. 16 | /// 17 | public WolframFComponent() 18 | : base("WL F[]", "WL F[]", 19 | "Evaluate a zero-argument function", 20 | "Wolfram", "Code") 21 | { 22 | } 23 | 24 | /// 25 | /// Registers all the input parameters for this component. 26 | /// 27 | protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) 28 | { 29 | pManager.AddGenericParameter("Head", "H", "The head of the function being computed", GH_ParamAccess.item); 30 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 31 | pManager[1].Optional = true; 32 | } 33 | 34 | /// 35 | /// Registers all the output parameters for this component. 36 | /// 37 | protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) 38 | { 39 | pManager.AddGenericParameter("R", "Result", "The result of the Wolfram Engine computation", GH_ParamAccess.item); 40 | pManager.AddParameter(new ExprParam(), "Expr", "E", "The entire result, as an Expr, for debugging", GH_ParamAccess.item); 41 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 42 | } 43 | 44 | /// 45 | /// This is the method that actually does the work. 46 | /// 47 | /// The DA object is used to retrieve from inputs and store in outputs. 48 | protected override void SolveInstance(IGH_DataAccess DA) 49 | { 50 | IGH_Goo head = null; 51 | LinkType linkType = null; 52 | 53 | if (!DA.GetData(0, ref head)) { return; } 54 | // Link arg is optional. 55 | DA.GetData(1, ref linkType); 56 | 57 | // If the retrieved data is Nothing, we need to abort. 58 | if (head == null) { return; } 59 | 60 | IKernelLink ml = linkType != null ? linkType.Value : Utils.GetLink(); 61 | 62 | ml.PutFunction("EvaluatePacket", 1); 63 | ml.PutNext(ExpressionType.Function); 64 | ml.PutArgCount(0); 65 | Utils.SendInputParam(head, ml, GH_ParamAccess.item, true); 66 | ml.EndPacket(); 67 | 68 | try { 69 | ml.WaitForAnswer(); 70 | } catch (MathLinkException) { 71 | ml.ClearError(); 72 | AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Error on the link."); 73 | ml.NewPacket(); 74 | return; 75 | } 76 | 77 | // This is the (likely) temporary feature that puts the Expr result on the second output. 78 | Expr debuggingExpr = ml.PeekExpr(); 79 | DA.SetData(1, new ExprType(debuggingExpr)); 80 | 81 | if (!Utils.ReadAndStoreResult("Any", 0, ml, DA, GH_ParamAccess.item, this)) 82 | return; 83 | 84 | DA.SetData(2, new LinkType(ml)); 85 | } 86 | 87 | /// 88 | /// Provides an Icon for the component. 89 | /// 90 | protected override System.Drawing.Bitmap Icon 91 | { 92 | get 93 | { 94 | //You can add image files to your project resources and access them like this: 95 | // return Resources.IconForThisComponent; 96 | System.Resources.ResourceManager temp = new System.Resources.ResourceManager("WolframGrasshopperComponents.Resources", typeof(WolframFComponent).Assembly); 97 | object obj = temp.GetObject("SpikeyIcon"); 98 | return ((System.Drawing.Bitmap)(obj)); 99 | } 100 | } 101 | 102 | /// 103 | /// The Exposure property controls where in the panel a component icon 104 | /// will appear. There are seven possible locations (primary to septenary), 105 | /// each of which can be combined with the GH_Exposure.obscure flag, which 106 | /// ensures the component will only be visible on panel dropdowns. 107 | /// 108 | public override GH_Exposure Exposure 109 | { 110 | get { return GH_Exposure.hidden; } 111 | } 112 | 113 | /// 114 | /// Gets the unique ID for this component. Do not change this ID after release. 115 | /// 116 | public override Guid ComponentGuid 117 | { 118 | get { return new Guid("{c6d82532-c9f3-4f65-920f-5c09c84117bc}"); } 119 | } 120 | } 121 | } -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/WolframFx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | using Grasshopper.Kernel; 5 | using Grasshopper.Kernel.Types; 6 | using Rhino.Geometry; 7 | 8 | using Wolfram.NETLink; 9 | 10 | namespace Wolfram.Grasshopper 11 | { 12 | public class WolframFxComponent : GH_Component 13 | { 14 | /// 15 | /// Initializes a new instance of the ObjectComponent class. 16 | /// 17 | public WolframFxComponent() 18 | : base("WL F[x]", "WL F[x]", 19 | "Evaluate a one-argument function", 20 | "Wolfram", "Code") 21 | { 22 | } 23 | 24 | /// 25 | /// Registers all the input parameters for this component. 26 | /// 27 | protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) 28 | { 29 | pManager.AddGenericParameter("Head", "H", "The head of the function being computed", GH_ParamAccess.item); 30 | pManager.AddGenericParameter("Argument", "A", "The argument of the function being computed", GH_ParamAccess.item); 31 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 32 | pManager[2].Optional = true; 33 | } 34 | 35 | /// 36 | /// Registers all the output parameters for this component. 37 | /// 38 | protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) 39 | { 40 | pManager.AddGenericParameter("Result", "R", "The result of the Wolfram Engine computation", GH_ParamAccess.item); 41 | pManager.AddParameter(new ExprParam(), "Expr", "E", "The entire result, as an Expr, for debugging", GH_ParamAccess.item); 42 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 43 | } 44 | 45 | /// 46 | /// This is the method that actually does the work. 47 | /// 48 | /// The DA object is used to retrieve from inputs and store in outputs. 49 | protected override void SolveInstance(IGH_DataAccess DA) 50 | { 51 | IGH_Goo head = null; 52 | IGH_Goo arg = null; 53 | LinkType linkType = null; 54 | 55 | if (!DA.GetData(0, ref head)) { return; } 56 | // obj comes in as a wrapper class like GH_Integer or GH_Circle. 57 | if (!DA.GetData(1, ref arg)) { return; } 58 | // Link arg is optional. 59 | DA.GetData(2, ref linkType); 60 | 61 | // If the retrieved data is Nothing, we need to abort. 62 | if (head == null || arg == null) { return; } 63 | 64 | IKernelLink ml = linkType != null ? linkType.Value : Utils.GetLink(); 65 | 66 | ml.PutFunction("EvaluatePacket", 1); 67 | ml.PutNext(ExpressionType.Function); 68 | ml.PutArgCount(1); 69 | Utils.SendInputParam(head, ml, GH_ParamAccess.item, true); 70 | Utils.SendInputParam(arg, ml, GH_ParamAccess.item, false); 71 | ml.EndPacket(); 72 | 73 | try { 74 | ml.WaitForAnswer(); 75 | } catch (MathLinkException) { 76 | ml.ClearError(); 77 | AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Error on the link."); 78 | ml.NewPacket(); 79 | return; 80 | } 81 | 82 | // This is the (likely) temporary feature that puts the Expr result on the second output. 83 | Expr debuggingExpr = ml.PeekExpr(); 84 | DA.SetData(1, new ExprType(debuggingExpr)); 85 | 86 | if (!Utils.ReadAndStoreResult("Any", 0, ml, DA, GH_ParamAccess.item, this)) 87 | return; 88 | 89 | DA.SetData(2, new LinkType(ml)); 90 | } 91 | 92 | /// 93 | /// Provides an Icon for the component. 94 | /// 95 | protected override System.Drawing.Bitmap Icon 96 | { 97 | get 98 | { 99 | //You can add image files to your project resources and access them like this: 100 | // return Resources.IconForThisComponent; 101 | System.Resources.ResourceManager temp = new System.Resources.ResourceManager("WolframGrasshopperComponents.Resources", typeof(WolframFxComponent).Assembly); 102 | object obj = temp.GetObject("f1Icon"); 103 | return ((System.Drawing.Bitmap)(obj)); 104 | } 105 | } 106 | 107 | /// 108 | /// The Exposure property controls where in the panel a component icon 109 | /// will appear. There are seven possible locations (primary to septenary), 110 | /// each of which can be combined with the GH_Exposure.obscure flag, which 111 | /// ensures the component will only be visible on panel dropdowns. 112 | /// 113 | public override GH_Exposure Exposure 114 | { 115 | get { return GH_Exposure.primary; } 116 | } 117 | 118 | /// 119 | /// Gets the unique ID for this component. Do not change this ID after release. 120 | /// 121 | public override Guid ComponentGuid 122 | { 123 | get { return new Guid("{b56a2532-c9f3-4fa5-910f-5c09aaaf67bc}"); } 124 | } 125 | } 126 | } -------------------------------------------------------------------------------- /VisualStudioBuild/WolframGrasshopperComponents/WolframGrasshopperComponents.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug32 6 | AnyCPU 7 | 8.0.30703 8 | 2.0 9 | {666A7B86-A665-447A-AEE6-83556CD118F7} 10 | Library 11 | Properties 12 | WolframGrasshopperComponents 13 | WolframGrasshopperComponents 14 | v4.5 15 | 512 16 | false 17 | 18 | 19 | 20 | true 21 | full 22 | false 23 | bin\ 24 | DEBUG;TRACE 25 | prompt 26 | 4 27 | 28 | 29 | true 30 | full 31 | false 32 | bin\ 33 | DEBUG;TRACE 34 | prompt 35 | false 36 | 37 | 38 | pdbonly 39 | true 40 | bin\ 41 | TRACE 42 | prompt 43 | 4 44 | false 45 | 46 | 47 | 48 | $(RhinoPath)\Plug-ins\Grasshopper\GH_IO.dll 49 | 50 | 51 | $(RhinoPath)\Plug-ins\Grasshopper\Grasshopper.dll 52 | 53 | 54 | $(RhinoPath)\System\RhinoCommon.dll 55 | False 56 | 57 | 58 | 59 | 60 | 61 | 62 | ..\..\RhinoLink\Libraries\Rhino\Wolfram.NETLink.dll 63 | 64 | 65 | ..\WolframGrasshopperSupport\bin\Debug\WolframGrasshopperSupport.dll 66 | 67 | 68 | 69 | 70 | Resources.Designer.cs 71 | True 72 | True 73 | Resources.resx 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | ResXFileCodeGenerator 85 | Designer 86 | Resources.Designer.cs 87 | 88 | 89 | 90 | 97 | 98 | Copy "$(TargetPath)" "$(TargetDir)$(ProjectName).gha" 99 | Copy "$(TargetPath)" "$(TargetDir)..\..\..\RhinoLink\libraries\grasshopper\$(ProjectName).gha" 100 | Erase "$(TargetPath)" 101 | 102 | 103 | 104 | 105 | Program 106 | c:\Program Files\Rhino 6\System\Rhino.exe 107 | false 108 | 109 | 110 | en-US 111 | 112 | 113 | c:\Program Files\Rhino 6\System\Rhino.exe 114 | 115 | 116 | Program 117 | false 118 | 119 | -------------------------------------------------------------------------------- /Source/WolframScripting/KernelLinkProvider.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.IO; 6 | using Wolfram.NETLink; 7 | 8 | using RhinoNamespace = Rhino; 9 | 10 | namespace Wolfram.Rhino { 11 | 12 | public class KernelLinkProvider { 13 | 14 | private static IKernelLink mainLink = null; 15 | private static IKernelLink readerLink = null; 16 | private static volatile string[] linkArgs = null; 17 | private static object linkLock = new object(); 18 | private static bool appLoadSucceeded = true; 19 | 20 | 21 | public static IKernelLink Link 22 | { 23 | get 24 | { 25 | WolframScriptingPlugIn.DebugPrint("entering Link getter"); 26 | lock (linkLock) 27 | { 28 | if (mainLink == null) 29 | { 30 | if (LinkArguments == null) 31 | { 32 | string thisAssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 33 | string kernelPath = File.ReadAllText(Path.Combine(thisAssemblyPath, "kernelPath.txt")); 34 | LinkArguments = new string[]{"-linkmode", "launch", "-linkname", "\"" + kernelPath + "\" -wstp"}; 35 | } 36 | WolframScriptingPlugIn.DebugPrint("CreateKernelLink(LinkArguments)"); 37 | mainLink = MathLinkFactory.CreateKernelLink(LinkArguments); 38 | 39 | WolframScriptingPlugIn.DebugPrint("waiting for response"); 40 | mainLink.WaitAndDiscardAnswer(); 41 | mainLink.EnableObjectReferences(); 42 | StdLink.Link = mainLink; 43 | WolframScriptingPlugIn.DebugPrint("back from M launch"); 44 | 45 | //mainLink.Evaluate("PacletDirectoryAdd[\"c:/users/tgayley/documents/workspace/rhinolink\"]"); 46 | //mainLink.WaitAndDiscardAnswer(); 47 | 48 | mainLink.Evaluate("Needs[\"RhinoLink`\"]"); 49 | mainLink.WaitForAnswer(); 50 | Expr res = mainLink.GetExpr(); 51 | if (res.ToString() != "Null") 52 | { 53 | appLoadSucceeded = false; 54 | RhinoNamespace.RhinoApp.WriteLine(res.ToString()); 55 | RhinoNamespace.RhinoApp.WriteLine( 56 | "Error: Failed to load the RhinoLink application into the Wolfram Engine. Scripting from the Wolfram Engine will not function."); 57 | } 58 | 59 | mainLink.Evaluate("2+2"); 60 | mainLink.WaitForAnswer(); 61 | int i = mainLink.GetInteger(); 62 | WolframScriptingPlugIn.DebugPrint("2+2=" + i); 63 | } 64 | return mainLink; 65 | } 66 | } 67 | } 68 | 69 | public static IKernelLink ReaderLink 70 | { 71 | get 72 | { 73 | lock (linkLock) 74 | { 75 | if (readerLink == null && appLoadSucceeded) 76 | { 77 | // Call the link getter to ensure the kernel has launched. 78 | IKernelLink link = Link; 79 | 80 | WolframScriptingPlugIn.DebugPrint("about to call setupLinksFromRhino"); 81 | link.Evaluate("RhinoLink`Private`setupRhinoAttachLink[]"); 82 | link.WaitAndDiscardAnswer(); 83 | WolframScriptingPlugIn.DebugPrint("back from setupLinksFromRhino"); 84 | // Start the Reader link, so named because it mimics the Reader thread in standard .NET/Link. This is the link 85 | // that handles calls like NETNew from Wolfram, enabling "scripting" of Unity from M. 86 | link.Evaluate("RhinoLink`Private`setupReaderLink[]"); 87 | // Not the "result"; sent manually so we can connect the link from both sides before the startReader[] function returns. 88 | string readerLinkName = link.GetString(); 89 | readerLink = MathLinkFactory.CreateKernelLink("-linkmode connect -linkname " + readerLinkName); 90 | WolframScriptingPlugIn.DebugPrint("about to connect readerLink"); 91 | readerLink.Connect(); 92 | WolframScriptingPlugIn.DebugPrint("back from connecting readerLink"); 93 | link.WaitAndDiscardAnswer(); 94 | 95 | // This causes the reader and main links to share the same CallPacketHandler/ObjectHandler. 96 | ((KernelLinkImpl)readerLink).copyStateFrom((KernelLinkImpl)link); 97 | 98 | WolframScriptingPlugIn.DebugPrint("back from startReader[]"); 99 | } 100 | return readerLink; 101 | } 102 | } 103 | } 104 | 105 | // Returns null if default. 106 | public static string[] LinkArguments { 107 | get { return linkArgs; } 108 | set { linkArgs = value; } 109 | } 110 | 111 | 112 | public static void CloseLinks() 113 | { 114 | CloseReaderLink(); 115 | if (mainLink != null) 116 | { 117 | mainLink.Close(); 118 | mainLink = null; 119 | } 120 | } 121 | 122 | public static void CloseReaderLink() 123 | { 124 | if (readerLink != null) 125 | { 126 | // TODO: What needs to be done here? Send something to kernel to have it close the RhinoAttach link? 127 | if (mainLink != null) 128 | { 129 | } 130 | readerLink.Close(); 131 | readerLink = null; 132 | } 133 | } 134 | } 135 | 136 | } 137 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/WolframFxy.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | using Grasshopper.Kernel; 5 | using Grasshopper.Kernel.Types; 6 | using Rhino.Geometry; 7 | 8 | using Wolfram.NETLink; 9 | 10 | namespace Wolfram.Grasshopper 11 | { 12 | public class WolframFxyComponent : GH_Component 13 | { 14 | /// 15 | /// Initializes a new instance of the ObjectComponent class. 16 | /// 17 | public WolframFxyComponent() 18 | : base("WL F[x,y]", "WL F[x,y]", 19 | "Evaluate a two-argument function", 20 | "Wolfram", "Code") 21 | { 22 | } 23 | 24 | /// 25 | /// Registers all the input parameters for this component. 26 | /// 27 | protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) 28 | { 29 | pManager.AddGenericParameter("Head", "H", "The head of the function being computed", GH_ParamAccess.item); 30 | pManager.AddGenericParameter("Argument1", "A1", "The first argument of the function being computed", GH_ParamAccess.item); 31 | pManager.AddGenericParameter("Argument2", "A2", "The second argument of the function being computed", GH_ParamAccess.item); 32 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 33 | pManager[3].Optional = true; 34 | } 35 | 36 | /// 37 | /// Registers all the output parameters for this component. 38 | /// 39 | protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) 40 | { 41 | pManager.AddGenericParameter("Result", "R", "The result of the Wolfram Engine computation", GH_ParamAccess.item); 42 | pManager.AddParameter(new ExprParam(), "Expr", "E", "The entire result, as an Expr, for debugging", GH_ParamAccess.item); 43 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 44 | } 45 | 46 | /// 47 | /// This is the method that actually does the work. 48 | /// 49 | /// The DA object is used to retrieve from inputs and store in outputs. 50 | protected override void SolveInstance(IGH_DataAccess DA) 51 | { 52 | IGH_Goo head = null; 53 | IGH_Goo arg1 = null; 54 | IGH_Goo arg2 = null; 55 | LinkType linkType = null; 56 | 57 | if (!DA.GetData(0, ref head)) { return; } 58 | // arg comes in as a wrapper class like GH_Integer or GH_Circle. 59 | if (!DA.GetData(1, ref arg1)) { return; } 60 | if (!DA.GetData(2, ref arg2)) { return; } 61 | // Link arg is optional. 62 | DA.GetData(3, ref linkType); 63 | 64 | // If the retrieved data is Nothing, we need to abort. 65 | if (head == null || arg1 == null || arg2 == null) { return; } 66 | 67 | IKernelLink ml = linkType != null ? linkType.Value : Utils.GetLink(); 68 | 69 | ml.PutFunction("EvaluatePacket", 1); 70 | ml.PutNext(ExpressionType.Function); 71 | ml.PutArgCount(2); 72 | Utils.SendInputParam(head, ml, GH_ParamAccess.item, true); 73 | Utils.SendInputParam(arg1, ml, GH_ParamAccess.item, false); 74 | Utils.SendInputParam(arg2, ml, GH_ParamAccess.item, false); 75 | ml.EndPacket(); 76 | 77 | try { 78 | ml.WaitForAnswer(); 79 | } catch (MathLinkException) { 80 | ml.ClearError(); 81 | AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Error on the link."); 82 | ml.NewPacket(); 83 | return; 84 | } 85 | 86 | // This is the (likely) temporary feature that puts the Expr result on the second output. 87 | Expr debuggingExpr = ml.PeekExpr(); 88 | DA.SetData(1, new ExprType(debuggingExpr)); 89 | 90 | if (!Utils.ReadAndStoreResult("Any", 0, ml, DA, GH_ParamAccess.item, this)) 91 | return; 92 | 93 | DA.SetData(2, new LinkType(ml)); 94 | } 95 | 96 | /// 97 | /// Provides an Icon for the component. 98 | /// 99 | protected override System.Drawing.Bitmap Icon 100 | { 101 | get 102 | { 103 | //You can add image files to your project resources and access them like this: 104 | // return Resources.IconForThisComponent; 105 | System.Resources.ResourceManager temp = new System.Resources.ResourceManager("WolframGrasshopperComponents.Resources", typeof(WolframFxyComponent).Assembly); 106 | object obj = temp.GetObject("f2Icon"); 107 | return ((System.Drawing.Bitmap)(obj)); 108 | } 109 | } 110 | 111 | /// 112 | /// The Exposure property controls where in the panel a component icon 113 | /// will appear. There are seven possible locations (primary to septenary), 114 | /// each of which can be combined with the GH_Exposure.obscure flag, which 115 | /// ensures the component will only be visible on panel dropdowns. 116 | /// 117 | public override GH_Exposure Exposure 118 | { 119 | get { return GH_Exposure.primary; } 120 | } 121 | 122 | /// 123 | /// Gets the unique ID for this component. Do not change this ID after release. 124 | /// 125 | public override Guid ComponentGuid 126 | { 127 | get { return new Guid("{b7d82532-c9f3-4f65-910f-5c09c84f67bc}"); } 128 | } 129 | } 130 | } -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace WolframGrasshopperComponents { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WolframGrasshopperComponents.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap codeIcon { 67 | get { 68 | object obj = ResourceManager.GetObject("codeIcon", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap f1Icon { 77 | get { 78 | object obj = ResourceManager.GetObject("f1Icon", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap f2Icon { 87 | get { 88 | object obj = ResourceManager.GetObject("f2Icon", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | 93 | /// 94 | /// Looks up a localized resource of type System.Drawing.Bitmap. 95 | /// 96 | internal static System.Drawing.Bitmap fnIcon { 97 | get { 98 | object obj = ResourceManager.GetObject("fnIcon", resourceCulture); 99 | return ((System.Drawing.Bitmap)(obj)); 100 | } 101 | } 102 | 103 | /// 104 | /// Looks up a localized resource of type System.Drawing.Bitmap. 105 | /// 106 | internal static System.Drawing.Bitmap Spikey { 107 | get { 108 | object obj = ResourceManager.GetObject("Spikey", resourceCulture); 109 | return ((System.Drawing.Bitmap)(obj)); 110 | } 111 | } 112 | 113 | /// 114 | /// Looks up a localized resource of type System.Drawing.Bitmap. 115 | /// 116 | internal static System.Drawing.Bitmap SpikeyIcon { 117 | get { 118 | object obj = ResourceManager.GetObject("SpikeyIcon", resourceCulture); 119 | return ((System.Drawing.Bitmap)(obj)); 120 | } 121 | } 122 | 123 | /// 124 | /// Looks up a localized resource of type System.Drawing.Bitmap. 125 | /// 126 | internal static System.Drawing.Bitmap wolfieIcon { 127 | get { 128 | object obj = ResourceManager.GetObject("wolfieIcon", resourceCulture); 129 | return ((System.Drawing.Bitmap)(obj)); 130 | } 131 | } 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /RhinoLink/Files/Component.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | 5 | using Grasshopper; 6 | using Grasshopper.Kernel; 7 | using Grasshopper.Kernel.Types; 8 | using Grasshopper.Kernel.Data; 9 | 10 | using Wolfram.NETLink; 11 | 12 | 13 | namespace Wolfram.Grasshopper 14 | { 15 | public class `Name` : GH_Component 16 | { 17 | public `Name`() 18 | : base("`Name`", "`Nickname`", 19 | "`Description`", 20 | "`Category`", "`Subcategory`") 21 | { 22 | } 23 | 24 | protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) 25 | { 26 | `RegisterInputParams` 27 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 28 | pManager[pManager.ParamCount - 1].Optional = true; 29 | } 30 | 31 | protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) 32 | { 33 | `RegisterOutputParams` 34 | pManager.AddParameter(new ExprParam(), "Expr", "E", "The entire result, as an Expr, for debugging", GH_ParamAccess.item); 35 | pManager.AddParameter(new LinkParam(), "Link", "L", "The link to the Wolfram Engine", GH_ParamAccess.item); 36 | } 37 | 38 | protected override void SolveInstance(IGH_DataAccess DA) 39 | { 40 | `GetData` 41 | 42 | // Final, optional link input param is always present. 43 | LinkType linkType = null; 44 | DA.GetData(`InputArgCount`, ref linkType); 45 | 46 | IKernelLink link = linkType != null ? linkType.Value : Utils.GetLink(); 47 | 48 | // Send initialization code and saved defs. 49 | try { 50 | if (`UseInit`) { 51 | link.Evaluate("ReleaseHold[\"" + `Initialization` + "\"]"); 52 | link.WaitAndDiscardAnswer(); 53 | } 54 | if (`UseDefs`) { 55 | link.Evaluate(`Definitions`); 56 | link.WaitAndDiscardAnswer(); 57 | } 58 | } catch (MathLinkException exc) { 59 | link.ClearError(); 60 | AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "WSTPException communicating with Wolfram Engine: " + exc); 61 | return; 62 | } 63 | 64 | // Now begin sending the actual computation. 65 | try { 66 | link.PutFunction("EvaluatePacket", 1); 67 | link.PutNext(ExpressionType.Function); 68 | link.PutArgCount(`InputArgCount`); 69 | 70 | if (`HeadIsSymbol`) { 71 | link.PutSymbol("`Func`"); 72 | } else { 73 | // pure function 74 | link.PutFunction("ToExpression", 1); 75 | link.Put("`Func`"); 76 | } 77 | 78 | `SendInputParams` 79 | 80 | link.EndPacket(); 81 | link.WaitForAnswer(); 82 | } catch (MathLinkException exc) { 83 | link.ClearError(); 84 | link.NewPacket(); 85 | AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "WSTPException communicating with Wolfram Engine: " + exc); 86 | return; 87 | } 88 | 89 | // This is one part of a (likely) temporary feature that puts the Expr result on the second output. 90 | Expr debuggingExpr = link.PeekExpr(); 91 | 92 | // Read the result(s) and store them in the DA object. 93 | ILinkMark mark = link.CreateMark(); 94 | // TODO: ghResultCount is not used, but if we are going to allow multiple outputs, then we have to protect against 95 | // users specifying more than one, but only one arrives. This will hang reading the second one. 96 | int ghResultCount = 0; 97 | bool isGHResult = false; 98 | try { 99 | ghResultCount = link.CheckFunction("GHResult") - 1; 100 | isGHResult = true; 101 | } catch (MathLinkException) { 102 | link.SeekMark(mark); 103 | } finally { 104 | link.DestroyMark(mark); 105 | } 106 | try { 107 | if (isGHResult) { 108 | `ReadAndStoreResults` 109 | } else { 110 | `ReadAndStoreResults` 111 | } 112 | 113 | // This is the second part of the temporary feature that puts the entire result as an Expr on a second output port. 114 | DA.SetData(++ghResultCount, new ExprType(debuggingExpr)); 115 | 116 | // Last output item is always the link. 117 | DA.SetData(ghResultCount + 1, new LinkType(link)); 118 | } catch (MathLinkException exc) { 119 | link.ClearError(); 120 | AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "WSTPException communicating with Wolfram Engine while reading results: " + exc); 121 | } finally { 122 | link.NewPacket(); 123 | } 124 | } 125 | 126 | 127 | 128 | 129 | protected override System.Drawing.Bitmap Icon 130 | { 131 | get 132 | { 133 | System.Resources.ResourceManager rm = new System.Resources.ResourceManager("gh", typeof(`Name`).Assembly); 134 | byte[] array = (byte[]) rm.GetObject("Icon"); 135 | return new System.Drawing.Bitmap(new System.IO.MemoryStream(array)); 136 | } 137 | } 138 | 139 | public override Guid ComponentGuid 140 | { 141 | get { return new Guid("{`GUID`}"); } 142 | } 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperSupport/ExprType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using Wolfram.NETLink; 6 | using Grasshopper.Kernel; 7 | using Grasshopper.Kernel.Types; 8 | 9 | namespace Wolfram.Grasshopper { 10 | 11 | 12 | public class ExprType : GH_Goo { 13 | 14 | public ExprType() { 15 | Value = null; 16 | } 17 | 18 | public ExprType(Expr e) { 19 | Value = e; 20 | } 21 | 22 | // Copy Constructor 23 | public ExprType(ExprType source) { 24 | Value = source.Value; 25 | } 26 | 27 | public override IGH_Goo Duplicate() { 28 | return new ExprType(this); 29 | } 30 | 31 | // I think this determines whether an input will fire. I don't want unassigned Exprs to fire, right? 32 | public override bool IsValid { 33 | get { return Value != null; } 34 | } 35 | 36 | public override string TypeName { 37 | get { return "Expr"; } 38 | } 39 | 40 | public override string TypeDescription { 41 | get { return "An arbitrary Wolfram Engine expression"; } 42 | } 43 | 44 | public override string ToString() { 45 | return Value.ToString(); 46 | } 47 | 48 | ////////////////////////////// CastTo //////////////////////////////////// 49 | 50 | public override bool CastTo(ref Q target) { 51 | 52 | if (typeof(Q).IsAssignableFrom(typeof(string))) { 53 | object s = Value.ToString(); 54 | target = (Q)s; 55 | return true; 56 | } 57 | if (Value.IntegerQ()) { 58 | if (typeof(Q).IsAssignableFrom(typeof(Int32))) { 59 | object i = (int) Value; 60 | target = (Q)i; 61 | return true; 62 | } else if (typeof(Q).IsAssignableFrom(typeof(Int64))) { 63 | object i = Value.AsInt64(); 64 | target = (Q)i; 65 | return true; 66 | } else if (typeof(Q).IsAssignableFrom(typeof(GH_Integer))) { 67 | object ptr = new GH_Integer((int) Value.AsInt64()); 68 | target = (Q)ptr; 69 | return true; 70 | } else if (typeof(Q).IsAssignableFrom(typeof(Double))) { 71 | object d = Value.AsDouble(); 72 | target = (Q)d; 73 | return true; 74 | } else if (typeof(Q).IsAssignableFrom(typeof(GH_Number))) { 75 | object d = new GH_Number(Value.AsDouble()); 76 | target = (Q)d; 77 | return true; 78 | } 79 | } 80 | if (Value.NumberQ()) { 81 | if (typeof(Q).IsAssignableFrom(typeof(Double))) { 82 | object d = Value.AsDouble(); 83 | target = (Q)d; 84 | return true; 85 | } 86 | else if (typeof(Q).IsAssignableFrom(typeof(GH_Number))) { 87 | object d = new GH_Number(Value.AsDouble()); 88 | target = (Q)d; 89 | return true; 90 | } 91 | } 92 | if (Value.StringQ() || Value.SymbolQ()) { 93 | if (typeof(Q).IsAssignableFrom(typeof(string))) { 94 | object s = Value.ToString(); 95 | target = (Q)s; 96 | return true; 97 | } else if (typeof(Q).IsAssignableFrom(typeof(GH_String))) { 98 | object s = new GH_String(Value.ToString()); 99 | target = (Q)s; 100 | return true; 101 | } 102 | } 103 | if (Value.TrueQ() || Value.SymbolQ() && Value.ToString() == "False") { 104 | if (typeof(Q).IsAssignableFrom(typeof(bool))) { 105 | object s = Value.TrueQ() ? true : false; 106 | target = (Q)s; 107 | return true; 108 | } else if (typeof(Q).IsAssignableFrom(typeof(GH_Boolean))) { 109 | object s = new GH_Boolean(Value.TrueQ() ? true : false); 110 | target = (Q)s; 111 | return true; 112 | } 113 | } 114 | // Try to convert to an array. 115 | // TODO. This is not yet implemented. Any why am Idoing Array? Shouldn't this be List or GH_Structure? 116 | object dataArray = null; 117 | try 118 | { 119 | if (Value.Head.Equals(SYM_LIST)) 120 | { 121 | int[] dims = Value.Dimensions; 122 | if (dims.Length == 1) 123 | { 124 | try 125 | { 126 | dataArray = Value.AsArray(ExpressionType.Integer, 1); 127 | } 128 | catch (Exception) 129 | { 130 | dataArray = Value.AsArray(ExpressionType.Real, 1); 131 | } 132 | if (dataArray != null) 133 | { 134 | target = (Q)dataArray; 135 | return true; 136 | } 137 | } 138 | else if (dims.Length == 2) 139 | { 140 | // TODO 141 | } 142 | } 143 | } 144 | catch (Exception) 145 | { 146 | } 147 | // TODO: More types, like ComplexNumber. 148 | 149 | return false; 150 | } 151 | 152 | private static readonly Expr SYM_LIST = new Expr(ExpressionType.Symbol, "List"); 153 | 154 | ///////////////////////////////////////// CastFrom ////////////////////////////////////////// 155 | 156 | public override bool CastFrom(object source) { 157 | 158 | //Abort immediately on bogus data. 159 | if (source == null) { return false; } 160 | 161 | //Type t = source.GetType(); 162 | 163 | // I don't yet understand this method very well. If I use a recommended conversion like: 164 | // GH_Convert.ToInt32(source, out val, GH_Conversion.Both) 165 | // I think I will get reals converted to ints (?). Likewise, if I do GH_Convert.ToDouble(), I think 166 | // I will get integers converted to reals. I don't want either of these, so instead I first try 167 | // inspecting the raw type. LAter I fall through to GH_Convert methods. 168 | 169 | // I don't know what types Grasshopper will ever give me. Maybe it never uses float, for example? What about, say, char or uint? 170 | if (source is int || source is long || source is float || source is double || source is bool || source is string) { 171 | Value = new Expr(source); 172 | return true; 173 | } else if (source is GH_Integer) { 174 | int val; 175 | GH_Convert.ToInt32(source, out val, GH_Conversion.Both); 176 | this.Value = new Expr(val); 177 | return true; 178 | } else if (source is GH_Number) { 179 | double val; 180 | GH_Convert.ToDouble(source, out val, GH_Conversion.Both); 181 | this.Value = new Expr(val); 182 | return true; 183 | } else if (source is GH_Boolean) { 184 | bool val; 185 | GH_Convert.ToBoolean(source, out val, GH_Conversion.Both); 186 | this.Value = new Expr(val); 187 | return true; 188 | } 189 | 190 | // Try a series of conversions. 191 | double dval; 192 | if (GH_Convert.ToDouble(source, out dval, GH_Conversion.Both)) { 193 | this.Value = new Expr(dval); 194 | return true; 195 | } 196 | 197 | int ival; 198 | if (GH_Convert.ToInt32(source, out ival, GH_Conversion.Both)) { 199 | this.Value = new Expr(ival); 200 | return true; 201 | } 202 | 203 | string str = null; 204 | if (GH_Convert.ToString(source, out str, GH_Conversion.Both)) { 205 | this.Value = new Expr(str); 206 | return true; 207 | } 208 | 209 | return false; 210 | } 211 | 212 | } 213 | 214 | 215 | } 216 | -------------------------------------------------------------------------------- /Source/WolframGrasshopperComponents/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\Spikey.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\spikeyIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\codeIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\Resources\f1Icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\Resources\f2Icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\Resources\fnIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | 140 | ..\Resources\wolfieIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 141 | 142 | 143 | -------------------------------------------------------------------------------- /Source/WolframScripting/WolframScriptingPlugIn.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Windows.Threading; 3 | using System.Collections.Generic; 4 | using System.Drawing; 5 | 6 | using RhinoNamespace = Rhino; 7 | 8 | using Wolfram.NETLink; 9 | using Rhino.Geometry; 10 | 11 | namespace Wolfram.Rhino 12 | { 13 | /// 14 | /// Every RhinoCommon .rhp assembly must have one and only one PlugIn-derived 15 | /// class. DO NOT create instances of this class yourself. It is the 16 | /// responsibility of Rhino to create an instance of this class. 17 | /// To complete plug-in information, please also see all PlugInDescription 18 | /// attributes in AssemblyInfo.cs (you might need to click "Project" -> 19 | /// "Show All Files" to see it in the "Solution Explorer" window). 20 | /// 21 | public class WolframScriptingPlugIn : RhinoNamespace.PlugIns.PlugIn 22 | { 23 | 24 | private const bool DEBUG = false; 25 | 26 | private volatile bool isReaderThreadRunning = false; 27 | private volatile bool keepRunning = false; 28 | Dispatcher dispatcher; 29 | 30 | public WolframScriptingPlugIn() 31 | { 32 | Instance = this; 33 | } 34 | 35 | ///Gets the only instance of the WolframScriptingPlugIn plug-in. 36 | public static WolframScriptingPlugIn Instance 37 | { 38 | get; 39 | private set; 40 | } 41 | 42 | // You can override methods here to change the plug-in behavior on 43 | // loading and shut down, add options pages to the Rhino _Option command 44 | // and mantain plug-in wide options in a document. 45 | 46 | public override object GetPlugInObject() 47 | { 48 | return KernelLinkProvider.Link; 49 | } 50 | 51 | 52 | 53 | public void StartReaderThread() 54 | { 55 | if (!isReaderThreadRunning) { 56 | keepRunning = true; 57 | Thread readerThread = new System.Threading.Thread(new System.Threading.ThreadStart(RunReader)); 58 | dispatcher = Dispatcher.CurrentDispatcher; 59 | readerThread.Start(); 60 | isReaderThreadRunning = true; 61 | } 62 | } 63 | 64 | public void StopReaderThread() 65 | { 66 | keepRunning = false; 67 | } 68 | 69 | 70 | public delegate void ReaderMethodCaller(PacketType pkt); 71 | 72 | public void RunReader() 73 | { 74 | 75 | IKernelLink readerLink = KernelLinkProvider.ReaderLink; 76 | while (keepRunning) { 77 | // we only wait if there is already something on the link. 78 | if (readerLink.Ready) 79 | { 80 | //stopWatch.Reset(); 81 | //stopWatch.Start(); 82 | 83 | //while (stopWatch.ElapsedMilliseconds <= loopMillis) 84 | //{ 85 | // if (readerLink.Ready) 86 | // { 87 | try 88 | { 89 | DebugPrint("Packet arriving on Reader link"); 90 | PacketType pkt = readerLink.NextPacket(); 91 | var readerDelegate = new ReaderMethodCaller(readerLink.HandlePacket); 92 | DebugPrint("calling BeginInvoke"); 93 | DispatcherOperation op = dispatcher.BeginInvoke(readerDelegate, new object[] { pkt }); 94 | DebugPrint("calling Wait()"); 95 | op.Wait(); // also has a millis arg 96 | DebugPrint("back from Wait()"); 97 | readerLink.NewPacket(); 98 | DebugPrint("Finished handling packet on Reader link"); 99 | // if we got a packet, we reset the watch 100 | //stopWatch.Reset(); 101 | //stopWatch.Start(); 102 | } 103 | catch (MathLinkException e) 104 | { 105 | // 11 is "other side closed link"; not sure why this succeeds clearError, but it does. 106 | if (e.ErrCode == 11 || !readerLink.ClearError()) 107 | { 108 | DebugPrint("Exception on Wolfram Reader link: " + e); 109 | KernelLinkProvider.CloseLinks(); 110 | keepRunning = false; 111 | } 112 | else 113 | { 114 | readerLink.NewPacket(); 115 | } 116 | } 117 | // } 118 | // else if (sleepMillis >= 0) 119 | // { 120 | // System.Threading.Thread.Sleep(sleepMillis); 121 | // } 122 | // } 123 | } 124 | else 125 | { 126 | System.Threading.Thread.Sleep(1); 127 | } 128 | } 129 | isReaderThreadRunning = false; 130 | } 131 | 132 | 133 | public static void DebugPrint(string s) 134 | { 135 | if (DEBUG) 136 | { 137 | RhinoNamespace.RhinoApp.WriteLine(s); 138 | 139 | // poor man's Pause 140 | // for (double x = 0; x < 100000000.0; x++) { x -= .1; } 141 | } 142 | } 143 | 144 | // 145 | // Rhino Utilities 146 | // 147 | 148 | public static RhinoNamespace.Geometry.Mesh ToRhinoMesh(double[,] vertices, int[,] faces) 149 | { 150 | Mesh mesh = new RhinoNamespace.Geometry.Mesh(); 151 | 152 | for (int i = 0; i < vertices.GetLength(0); i++) { 153 | mesh.Vertices.Add(vertices[i,0], vertices[i,1], vertices[i,2]); 154 | } 155 | 156 | if (faces.GetLength(1) == 3) 157 | { 158 | for (int i = 0; i < faces.GetLength(0); i++) 159 | { 160 | mesh.Faces.AddFace(faces[i, 0], faces[i, 1], faces[i, 2]); 161 | } 162 | } 163 | else // (faces.GetLength(1) == 4) 164 | { 165 | for (int i = 0; i < faces.GetLength(0); i++) 166 | { 167 | mesh.Faces.AddFace(faces[i, 0], faces[i, 1], faces[i, 2], faces[i, 3]); 168 | } 169 | } 170 | 171 | mesh.Normals.ComputeNormals(); 172 | mesh.Compact(); 173 | 174 | return mesh; 175 | } 176 | 177 | public static double[,] RhinoMeshVertices(RhinoNamespace.Geometry.Mesh mesh) 178 | { 179 | int n = mesh.Vertices.Count; 180 | double[,] vertexCoordinates = new double[n, 3]; 181 | var e = mesh.Vertices.GetEnumerator(); 182 | 183 | for (int i = 0; i < n; i++) 184 | { 185 | e.MoveNext(); 186 | vertexCoordinates[i, 0] = e.Current.X; 187 | vertexCoordinates[i, 1] = e.Current.Y; 188 | vertexCoordinates[i, 2] = e.Current.Z; 189 | } 190 | 191 | return vertexCoordinates; 192 | } 193 | 194 | public static int[][] RhinoMeshFaces(RhinoNamespace.Geometry.Mesh mesh) 195 | { 196 | int n = mesh.Faces.Count; 197 | int[][] vertexIndices = new int[n][]; 198 | var e = mesh.Faces.GetEnumerator(); 199 | 200 | for (int i=0; i < n; i++) { 201 | e.MoveNext(); 202 | if (e.Current.IsTriangle) 203 | { 204 | vertexIndices[i] = new int[3]; 205 | vertexIndices[i][0] = e.Current.A + 1; 206 | vertexIndices[i][1] = e.Current.B + 1; 207 | vertexIndices[i][2] = e.Current.C + 1; 208 | } 209 | else 210 | { 211 | vertexIndices[i] = new int[4]; 212 | vertexIndices[i][0] = e.Current.A + 1; 213 | vertexIndices[i][1] = e.Current.B + 1; 214 | vertexIndices[i][2] = e.Current.C + 1; 215 | vertexIndices[i][3] = e.Current.D + 1; 216 | } 217 | } 218 | 219 | return vertexIndices; 220 | } 221 | 222 | public static RhinoNamespace.Geometry.Point3d[] ToRhinoPoint3dArray(double[,] data) 223 | { 224 | RhinoNamespace.Geometry.Point3d[] result = new RhinoNamespace.Geometry.Point3d[data.GetLength(0)]; 225 | 226 | for (int i = 0; i < data.GetLength(0); i++) 227 | { 228 | result[i] = new RhinoNamespace.Geometry.Point3d(data[i, 0], data[i, 1], data[i, 2]); 229 | } 230 | 231 | return result; 232 | } 233 | 234 | public static System.Drawing.Color[] ToRhinoColorList(double[,] data) 235 | { 236 | System.Drawing.Color[] result = new System.Drawing.Color[data.GetLength(0)]; 237 | 238 | for (int i = 0; i < data.GetLength(0); i++) 239 | { 240 | result[i] = System.Drawing.Color.FromArgb((int)(255 * data[i, 0]), (int)(255 * data[i, 1]), (int)(255 * data[i, 2])); 241 | } 242 | 243 | return result; 244 | } 245 | 246 | } 247 | } -------------------------------------------------------------------------------- /Source/WolframGrasshopperSupport/Utils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | using Grasshopper; 8 | using Grasshopper.Kernel; 9 | using Grasshopper.Kernel.Types; 10 | using Grasshopper.Kernel.Data; 11 | using Rhino; 12 | 13 | using Wolfram.NETLink; 14 | 15 | namespace Wolfram.Grasshopper 16 | { 17 | 18 | public class Utils { 19 | 20 | 21 | private static IKernelLink link = null; 22 | private static object pluginLock = new object(); 23 | 24 | // This is the property that GH components use to acquire the link to the kernel, which is 25 | // held in the WolframScripting Rhino plugin. 26 | public static IKernelLink GetLink() { 27 | lock (pluginLock) 28 | { 29 | if (link == null) 30 | link = (IKernelLink) RhinoApp.GetPlugInObject("WolframScripting"); 31 | return link; 32 | } 33 | } 34 | 35 | 36 | public static object readArbitraryResult(IKernelLink ml, GH_Component component) { 37 | 38 | Object exprOrObjectResult = null; 39 | ILinkMark mark = ml.CreateMark(); 40 | try { 41 | exprOrObjectResult = ml.GetObject(); 42 | } catch (MathLinkException) { 43 | ml.ClearError(); 44 | ml.SeekMark(mark); 45 | // Technically, GetExpr() should never throw MathLinkException. But there was at least one bug I found and fixed where it did. 46 | // So to be safe we leave this try/catch here, otherwise the link will get in a bad state. 47 | try { 48 | Expr ex = ml.GetExpr(); 49 | exprOrObjectResult = new ExprType(ex); 50 | } catch (MathLinkException) { 51 | ml.ClearError(); 52 | component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Error reading result as an Expr. This is a bug in RhinoLink, not the user program."); 53 | } 54 | } finally { 55 | ml.DestroyMark(mark); 56 | ml.NewPacket(); 57 | } 58 | 59 | return exprOrObjectResult; 60 | } 61 | 62 | 63 | public static void SendInputParam(object arg, IKernelLink link, GH_ParamAccess accessType, bool isFunctionHead) 64 | { 65 | // ScriptVariable() is the method that extracts the wrapped Rhino object from the GH_Goo wrapper. e.g., GH_Text --> string, 66 | // or GH_Circle to Rhino.Geometry.Circle. 67 | if (accessType == GH_ParamAccess.list) 68 | { 69 | List list = (List)arg; 70 | link.PutFunction("List", list.Count); 71 | foreach (IGH_Goo obj in list) { 72 | object o = obj.ScriptVariable(); 73 | link.Put(o); 74 | } 75 | } 76 | else if (accessType == GH_ParamAccess.tree) 77 | { 78 | // TODO: Is this right? Do I need to worry about Invalid paths? Should I do this on a loopback link? 79 | GH_Structure structure = (GH_Structure)arg; 80 | IList> data = structure.Branches; 81 | link.PutFunction("List", data.Count); 82 | foreach (List row in data) 83 | { 84 | link.PutFunction("List", row.Count); 85 | foreach (IGH_Goo obj in row) { 86 | object o = obj.ScriptVariable(); 87 | link.Put(o); 88 | } 89 | } 90 | } 91 | else 92 | { 93 | object native = (arg is IGH_Goo) ? ((IGH_Goo)arg).ScriptVariable() : arg; 94 | // isFunctionHead lets us treat strings as symbols or pure functions for the head (but not used for args). 95 | // Need a better way to differentiate strings and symbols. Perhaps a WolframSymbol component that takes a string and emits a symbol. 96 | if (isFunctionHead && (native is string || native is Expr && ((Expr)native).StringQ())) { 97 | link.PutFunction("ToExpression", 1); 98 | link.Put(native); 99 | } else { 100 | link.Put(native); 101 | } 102 | } 103 | } 104 | 105 | 106 | // M code must ensure that the only types that can arrive in this function are ones that are currently handled here. 107 | public static bool ReadAndStoreResult(string type, int index, IKernelLink link, IGH_DataAccess DA, GH_ParamAccess accessType, GH_Component component) 108 | { 109 | 110 | try 111 | { 112 | switch (accessType) 113 | { 114 | case GH_ParamAccess.item: 115 | { 116 | object res = ReadSingleItemAsType(type, link); 117 | DA.SetData(index, res); 118 | break; 119 | } 120 | case GH_ParamAccess.list: 121 | { 122 | ILinkMark mark = link.CreateMark(); 123 | int length = 1; 124 | bool isList = false; 125 | try 126 | { 127 | length = link.CheckFunction("List"); 128 | isList = true; 129 | } 130 | catch (MathLinkException) 131 | { 132 | link.ClearError(); 133 | } 134 | finally 135 | { 136 | link.SeekMark(mark); 137 | link.DestroyMark(mark); 138 | } 139 | if (isList) 140 | { 141 | IList list = ReadListOfItemsAsType(type, link); 142 | DA.SetDataList(index, list); 143 | } 144 | else 145 | { 146 | object item = ReadSingleItemAsType(type, link); 147 | DA.SetData(index, item); 148 | } 149 | break; 150 | } 151 | case GH_ParamAccess.tree: 152 | { 153 | // Quick and dirty method. Only support numbers. Read as Expr, then use Dimensions, etc. 154 | // TODO: Handle objects. See how it is done in ReadSingleItemAsType(). 155 | // This read-as-expr method shows problems for tree type. It would be better, for tree, to not use 156 | // the expr, but rather re-read the data from the link (as is done for item, list). In the curremt 157 | // method, I don't see any good way to handle "Any". 158 | // WAIT, IT'S WORSE. Expr.AsArray() only does Integer, Real, and only up to depth 2. 159 | ILinkMark mark = link.CreateMark(); 160 | try 161 | { 162 | Expr e = link.GetExpr(); 163 | int[] dims = e.Dimensions; 164 | if (dims.Length == 0) 165 | { 166 | link.SeekMark(mark); 167 | object res = ReadSingleItemAsType(type, link); 168 | DA.SetData(index, res); 169 | } 170 | else if (dims.Length == 1) 171 | { 172 | link.SeekMark(mark); 173 | IList list = ReadListOfItemsAsType(type, link); 174 | DA.SetDataList(index, list); 175 | } 176 | else if (dims.Length == 2) 177 | { 178 | // This code could be cleaner with GH_Structure, but I dont quite understand that class... 179 | switch (type) 180 | { 181 | case "Number": 182 | { 183 | DataTree tree = new DataTree(); 184 | Array dataArray = e.AsArray(ExpressionType.Real, 2); 185 | for (int i = 0; i < dims[0]; i++) 186 | { 187 | GH_Path pth = new GH_Path(i); 188 | for (int j = 0; j < dims[1]; j++) 189 | { 190 | tree.Add((double)dataArray.GetValue(i, j), pth); 191 | } 192 | } 193 | DA.SetDataTree(index, tree); 194 | break; 195 | } 196 | case "Integer": 197 | { 198 | DataTree tree = new DataTree(); 199 | Array dataArray = e.AsArray(ExpressionType.Integer, 2); 200 | for (int i = 0; i < dims[0]; i++) 201 | { 202 | GH_Path pth = new GH_Path(i); 203 | for (int j = 0; j < dims[1]; j++) 204 | { 205 | tree.Add((int)dataArray.GetValue(i, j), pth); 206 | } 207 | } 208 | DA.SetDataTree(index, tree); 209 | break; 210 | } 211 | default: 212 | // Can't handle this. 213 | return false; 214 | } 215 | } 216 | else 217 | { 218 | // TODO. At least set a RuntimeMessage before returning false. 219 | return false; 220 | } 221 | } 222 | finally 223 | { 224 | link.DestroyMark(mark); 225 | } 226 | break; 227 | 228 | // Problem with the read-and-fill-element-by-element approach is that this is a GH_Structure, 229 | // so I need to create an IGH_Goo pbjectout of every piece of data. But there are zillions of IGH_Goo 230 | // objects out there. I don't want to map every object to its IGH_Goo type (e.g., Circle --> GH_Circle). 231 | // For lists, I could simply create a List and apparently it gets converted to the appopriate 232 | // IGH_Goo object later on. But with trees, I don't see the corresponding technique. Compare the signature 233 | // of DA.SetDataList() and DA.SetDataTree(). 234 | /* 235 | ILinkMark mark3 = link.CreateMark(); 236 | int length = 1; 237 | try { 238 | length = link.CheckFunction("List"); 239 | // Don't catch; allow to fail. Must be a list arriving for tree results. 240 | } finally { 241 | link.DestroyMark(mark3); 242 | } 243 | GH_Structure structure = new GH_Structure(); 244 | GH_Path path = new GH_Path(0); 245 | int pathLen = 1; 246 | int pathIndex = 0; 247 | for (int i = 0; i < length; i++) { 248 | if (isListWaitingOnLink(link)) { 249 | path. 250 | } else { 251 | structure.Append( 252 | } 253 | } 254 | */ 255 | } 256 | } 257 | } 258 | catch (Exception) 259 | { 260 | component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Unexpected type of result from Wolfram Engine"); 261 | link.ClearError(); 262 | link.NewPacket(); 263 | return false; 264 | } 265 | return true; 266 | } 267 | 268 | 269 | private static object ReadSingleItemAsType(string type, IKernelLink link) 270 | { 271 | 272 | object res = null; 273 | switch (type) 274 | { 275 | case "Text": 276 | { 277 | res = link.GetString(); 278 | break; 279 | } 280 | case "Integer": 281 | { 282 | res = link.GetInteger(); 283 | break; 284 | } 285 | case "Number": 286 | { 287 | res = link.GetDouble(); 288 | break; 289 | } 290 | case "Boolean": 291 | { 292 | res = link.GetBoolean(); 293 | break; 294 | } 295 | case "Any": 296 | { 297 | res = ReadAsAny(link); 298 | break; 299 | } 300 | case "Expr": 301 | { 302 | res = new ExprType(link.GetExpr()); 303 | break; 304 | } 305 | } 306 | return res; 307 | } 308 | 309 | 310 | private static ArrayList ReadListOfItemsAsType(string type, IKernelLink link) 311 | { 312 | int length = link.CheckFunction("List"); 313 | ArrayList res = new ArrayList(length); 314 | for (int i = 0; i < length; i++) 315 | { 316 | switch (type) 317 | { 318 | case "Text": 319 | { 320 | res.Add(link.GetString()); 321 | break; 322 | } 323 | case "Integer": 324 | { 325 | res.Add(link.GetInteger()); 326 | break; 327 | } 328 | case "Number": 329 | { 330 | res.Add(link.GetDouble()); 331 | break; 332 | } 333 | case "Boolean": 334 | { 335 | res.Add(link.GetBoolean()); 336 | break; 337 | } 338 | case "Any": 339 | { 340 | object obj = ReadAsAny(link); 341 | res.Add(obj); 342 | break; 343 | } 344 | case "Expr": 345 | { 346 | res.Add(new ExprType(link.GetExpr())); 347 | break; 348 | } 349 | } 350 | } 351 | return res; 352 | } 353 | 354 | // Special method for reading results typed as "Any". We want native objects for simple types like int, double, 355 | // arbitrary object refs as objects (let Grasshopper internals worry about wrapping in IGH_Goo), and Expr for anything else. 356 | // Note that we don't have to worry here about list/tree access type, because this is only called either for 357 | // leaf elements, or to get whole nested lists as a single item for DataAccess.item slots. 358 | private static object ReadAsAny(IKernelLink link) { 359 | 360 | ILinkMark mark = link.CreateMark(); 361 | try { 362 | ExpressionType leafExprType = link.GetNextExpressionType(); 363 | link.SeekMark(mark); 364 | switch (leafExprType) { 365 | case ExpressionType.Integer: 366 | return link.GetInteger(); 367 | case ExpressionType.Real: 368 | return link.GetDouble(); 369 | case ExpressionType.String: 370 | case ExpressionType.Symbol: 371 | return link.GetString(); 372 | case ExpressionType.Object: 373 | return link.GetObject(); 374 | case ExpressionType.Boolean: 375 | return link.GetBoolean(); 376 | case ExpressionType.Complex: 377 | // TODO: Don't have any idea how this is handled elsewhere 378 | return link.GetComplex(); 379 | case ExpressionType.Function: 380 | return new ExprType(link.GetExpr()); 381 | default: 382 | // Just to satisfy the compiler. 383 | return null; 384 | } 385 | } finally { 386 | link.DestroyMark(mark); 387 | } 388 | } 389 | 390 | 391 | } 392 | } 393 | -------------------------------------------------------------------------------- /RhinoLink/Documentation/English/ReferencePages/Symbols/RhinoDocObjects.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 11.3' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 158, 7] 13 | NotebookDataLength[ 19762, 523] 14 | NotebookOptionsPosition[ 12464, 368] 15 | NotebookOutlinePosition[ 13172, 394] 16 | CellTagsIndexPosition[ 13093, 389] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | Cell[TextData[{ 22 | "New in: ", 23 | Cell["11.3", "HistoryData", 24 | CellTags->"New",ExpressionUUID->"49b0b437-c495-4bec-8dcc-c08d8c761c18"], 25 | " | Modified in: ", 26 | Cell[" ", "HistoryData", 27 | CellTags->"Modified",ExpressionUUID->"cad17d9c-2d05-4628-8435-82d316b85c0a"], 28 | " | Obsolete in: ", 29 | Cell[" ", "HistoryData", 30 | CellTags->"Obsolete",ExpressionUUID->"f781d60b-3c41-435b-bea0-a5077f9398f2"], 31 | " | Excised in: ", 32 | Cell[" ", "HistoryData", 33 | CellTags->"Excised",ExpressionUUID->"814867c7-2645-4b70-afef-c44031234ee2"] 34 | }], "History", 35 | CellChangeTimes->{{3.7368690785146475`*^9, 3.736869078891137*^9}}, 36 | CellID->1247902091,ExpressionUUID->"9e06f0a0-aa29-47d6-b6dd-7bd80be0b865"], 37 | 38 | Cell[CellGroupData[{ 39 | 40 | Cell["Categorization", "CategorizationSection", 41 | CellID->1122911449,ExpressionUUID->"4eb690c7-5223-4bca-ac38-66f1fcc9a603"], 42 | 43 | Cell["Symbol", "Categorization", 44 | CellLabel->"Entity Type", 45 | CellID->686433507,ExpressionUUID->"2d31068c-0f24-4195-a51b-0405bd2d6dc2"], 46 | 47 | Cell["RhinoLink", "Categorization", 48 | CellLabel->"Paclet Name", 49 | CellID->605800465,ExpressionUUID->"9dbd7759-3510-4184-9186-e6e0bdd265d2"], 50 | 51 | Cell["RhinoLink`", "Categorization", 52 | CellLabel->"Context", 53 | CellID->468444828,ExpressionUUID->"fa5b1fca-a16c-46ea-8c26-85be97f9fbb0"], 54 | 55 | Cell["RhinoLink/ref/RhinoDocObjects", "Categorization", 56 | CellLabel->"URI",ExpressionUUID->"992b2816-09df-452e-9c3b-70bdafdffb8f"] 57 | }, Closed]], 58 | 59 | Cell[CellGroupData[{ 60 | 61 | Cell["Keywords", "KeywordsSection", 62 | CellID->477174294,ExpressionUUID->"e352a20c-bcfe-4084-aa92-de36329512e8"], 63 | 64 | Cell["XXXX", "Keywords", 65 | CellID->1164421360,ExpressionUUID->"938acac4-93d6-43a2-9366-bdeabd9a9513"] 66 | }, Closed]], 67 | 68 | Cell[CellGroupData[{ 69 | 70 | Cell["Syntax Templates", "TemplatesSection", 71 | CellID->1872225408,ExpressionUUID->"6d1156df-4e76-4289-b424-304a772670e0"], 72 | 73 | Cell[BoxData[""], "Template", 74 | CellLabel->"Additional Function Template", 75 | CellID->1562036412,ExpressionUUID->"719bb730-6804-4a8e-a039-6907033638c9"], 76 | 77 | Cell[BoxData[""], "Template", 78 | CellLabel->"Arguments Pattern", 79 | CellID->158391909,ExpressionUUID->"abcd4710-1d15-4bfe-9b5f-41e134307ec7"], 80 | 81 | Cell[BoxData[""], "Template", 82 | CellLabel->"Local Variables", 83 | CellID->1360575930,ExpressionUUID->"a03c443e-4259-47cb-8d1c-c578b072ef21"], 84 | 85 | Cell[BoxData[""], "Template", 86 | CellLabel->"Color Equal Signs", 87 | CellID->793782254,ExpressionUUID->"6017b6ef-03a3-49a1-a5fb-996537bb2385"] 88 | }, Closed]], 89 | 90 | Cell[CellGroupData[{ 91 | 92 | Cell["Details", "DetailsSection", 93 | CellID->307771771,ExpressionUUID->"fb1dc596-ee4e-4459-baf7-5193753e2d91"], 94 | 95 | Cell["XXXX", "Details", 96 | CellLabel->"Lead", 97 | CellID->670882175,ExpressionUUID->"a23fe317-e252-47dc-b4b5-0987c3fd182b"], 98 | 99 | Cell["XXXX", "Details", 100 | CellLabel->"Developers", 101 | CellID->350963985,ExpressionUUID->"707caf19-4736-4f62-8f3b-6af357814c24"], 102 | 103 | Cell["XXXX", "Details", 104 | CellLabel->"Authors", 105 | CellID->8391405,ExpressionUUID->"880574d8-42bb-4287-a682-a3ebe84c8df3"], 106 | 107 | Cell["XXXX", "Details", 108 | CellLabel->"Feature Name", 109 | CellID->3610269,ExpressionUUID->"962b6bae-27dd-4c7c-9af8-f53ba8a2f6e3"], 110 | 111 | Cell["XXXX", "Details", 112 | CellLabel->"QA", 113 | CellID->401364205,ExpressionUUID->"0f56c700-7d6e-4833-8f5b-884ed0ae17cb"], 114 | 115 | Cell["XXXX", "Details", 116 | CellLabel->"DA", 117 | CellID->350204745,ExpressionUUID->"32c75c03-c77a-4fb6-b23d-22b948af67b0"], 118 | 119 | Cell["XXXX", "Details", 120 | CellLabel->"Docs", 121 | CellID->732958810,ExpressionUUID->"c59da13b-6124-4f48-a08a-a35c87a21a79"], 122 | 123 | Cell["XXXX", "Details", 124 | CellLabel->"Features Page Notes", 125 | CellID->222905350,ExpressionUUID->"c14423d3-145b-4754-95d4-5466dae9cfc0"], 126 | 127 | Cell["XXXX", "Details", 128 | CellLabel->"Comments", 129 | CellID->240026365,ExpressionUUID->"b6bff645-c553-4252-9c33-0c90d13bac72"] 130 | }, Closed]], 131 | 132 | Cell[CellGroupData[{ 133 | 134 | Cell["RhinoDocObjects", "ObjectName", 135 | CellID->1224892054,ExpressionUUID->"c9f518ed-89e9-4b1b-b2b2-06637171101e"], 136 | 137 | Cell[TextData[{ 138 | Cell[" ", "ModInfo",ExpressionUUID->"634f7bb0-b69c-4c84-b7b7-517953829e40"], 139 | Cell[BoxData[ 140 | RowBox[{"RhinoDocObjects", "[", "]"}]], "InlineFormula",ExpressionUUID-> 141 | "a2f74397-fdfc-4d6a-ad7e-d315bce0e330"], 142 | " \[LineSeparator]returns a list of the objects in the active Rhino \ 143 | document" 144 | }], "Usage", 145 | CellChangeTimes->{{3.7368478234375963`*^9, 3.736847837578566*^9}, 146 | 3.736848086882701*^9}, 147 | CellID->982511436,ExpressionUUID->"adb3284f-bf16-40b7-9bb1-4fbd07f939ff"], 148 | 149 | Cell[TextData[{ 150 | Cell[BoxData[ 151 | ButtonBox["RhinoDocObjects", 152 | BaseStyle->"Link", 153 | ButtonData->"paclet:RhinoLink/ref/RhinoDocObjects"]], "InlineFormula", 154 | ExpressionUUID->"cbf1e828-1f3f-4731-b0fb-24637b9fb301"], 155 | " returns a list of Rhino objects." 156 | }], "Notes", 157 | CellChangeTimes->{{3.73684809486056*^9, 3.736848113596726*^9}, { 158 | 3.736868435378046*^9, 3.7368684505646987`*^9}, 3.736879971877474*^9, { 159 | 3.737377141718001*^9, 3.7373771419125443`*^9}}, 160 | CellID->1067943069,ExpressionUUID->"eb1e3cd6-dab5-4d5a-ab13-0dabde89c5f9"] 161 | }, Open ]], 162 | 163 | Cell[CellGroupData[{ 164 | 165 | Cell["Tutorials", "TutorialsSection", 166 | CellID->250839057,ExpressionUUID->"1bbcb72b-1ede-4eb6-9c8b-c8c62f634859"], 167 | 168 | Cell[TextData[ButtonBox["Use NETLink to Examine and Create Objects in Rhino", 169 | BaseStyle->"Link", 170 | ButtonData-> 171 | "paclet:RhinoLink/tutorial/ManualInteractionWithRhinoObjects"]], "Tutorials", 172 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 173 | CellID->292544750,ExpressionUUID->"364940bf-72a7-4b07-98ca-6213a67a30ca"] 174 | }, Open ]], 175 | 176 | Cell[CellGroupData[{ 177 | 178 | Cell["Related Demonstrations", "RelatedDemonstrationsSection", 179 | CellID->1268215905,ExpressionUUID->"6cca8595-45c4-4a67-92dc-6a23584866cb"], 180 | 181 | Cell["XXXX", "RelatedDemonstrations", 182 | CellID->1129518860,ExpressionUUID->"09705d83-1f3a-4f95-b16b-bc0001930d7e"] 183 | }, Open ]], 184 | 185 | Cell[CellGroupData[{ 186 | 187 | Cell["Related Links", "RelatedLinksSection", 188 | CellID->1584193535,ExpressionUUID->"da27c570-db55-4f46-bec2-12fc43813cdf"], 189 | 190 | Cell["XXXX", "RelatedLinks", 191 | CellID->1038487239,ExpressionUUID->"e9c2e26f-d939-4db6-ada4-369cf33a09b4"] 192 | }, Open ]], 193 | 194 | Cell[CellGroupData[{ 195 | 196 | Cell["See Also", "SeeAlsoSection", 197 | CellID->1255426704,ExpressionUUID->"d1624e41-622a-4b91-91b3-01c861798726"], 198 | 199 | Cell[TextData[{ 200 | Cell[BoxData[ 201 | ButtonBox["RhinoShow", 202 | BaseStyle->"Link", 203 | ButtonData->"paclet:RhinoLink/ref/RhinoShow"]], "InlineFormula", 204 | ExpressionUUID->"d34d6959-1cda-40d8-b3b2-a80d0eb8844f"], 205 | " \[EmptyVerySmallSquare] ", 206 | Cell[BoxData[ 207 | ButtonBox["RhinoUnshow", 208 | BaseStyle->"Link", 209 | ButtonData->"paclet:RhinoLink/ref/RhinoUnshow"]], "InlineFormula", 210 | ExpressionUUID->"47b3084c-516b-4d3c-8ca6-bce6eb775991"], 211 | " \[EmptyVerySmallSquare] ", 212 | Cell[BoxData[ 213 | ButtonBox["RhinoReshow", 214 | BaseStyle->"Link", 215 | ButtonData->"paclet:RhinoLink/ref/RhinoReshow"]], "InlineFormula", 216 | ExpressionUUID->"3469c50e-6beb-48c3-ab46-b1c6de853ed6"] 217 | }], "SeeAlso", 218 | CellChangeTimes->{{3.736848423340839*^9, 3.7368484325635653`*^9}, { 219 | 3.737377145498584*^9, 3.737377147642035*^9}}, 220 | CellID->929782353,ExpressionUUID->"70321a95-d5a7-4098-b62d-9287b8209cc8"] 221 | }, Open ]], 222 | 223 | Cell[CellGroupData[{ 224 | 225 | Cell["More About", "MoreAboutSection", 226 | CellID->38303248,ExpressionUUID->"a96010f8-786e-4898-aa84-f73db7c96dee"], 227 | 228 | Cell["XXXX", "MoreAbout", 229 | CellID->1665078683,ExpressionUUID->"de20ff2f-c087-409d-b442-ddeb7bec21f6"] 230 | }, Open ]], 231 | 232 | Cell[CellGroupData[{ 233 | 234 | Cell[BoxData[ 235 | InterpretationBox[GridBox[{ 236 | { 237 | StyleBox["Examples", "PrimaryExamplesSection"], 238 | ButtonBox[ 239 | RowBox[{ 240 | RowBox[{"More", " ", "Examples"}], " ", "\[RightTriangle]"}], 241 | BaseStyle->"ExtendedExamplesLink", 242 | ButtonData:>"ExtendedExamples"]} 243 | }], 244 | $Line = 0; Null]], "PrimaryExamplesSection", 245 | CellID->880084151,ExpressionUUID->"ec007f17-8e25-44f1-9532-88f30241136c"], 246 | 247 | Cell["\<\ 248 | (The following examples will only work in a notebook whose kernel has been \ 249 | set to RhinoAttach, and when WolframConnect has been executed in Rhino to \ 250 | establish communication between Rhino and Mathematica.)\ 251 | \>", "ExampleText", 252 | CellChangeTimes->{{3.7368686201435127`*^9, 3.736868692964159*^9}, { 253 | 3.736868747368617*^9, 3.736868758930406*^9}}, 254 | CellID->125237741,ExpressionUUID->"76c006ce-9132-4fad-934a-f0dee1920580"], 255 | 256 | Cell["Get a list of the objects in the active Rhino document:", "ExampleText", 257 | CellChangeTimes->{{3.736868629763883*^9, 3.736868641294139*^9}}, 258 | CellID->377833685,ExpressionUUID->"f048c27d-2457-4700-b1eb-66305f9f228f"], 259 | 260 | Cell[CellGroupData[{ 261 | 262 | Cell[BoxData[ 263 | RowBox[{"RhinoDocObjects", "[", "]"}]], "Input", 264 | CellChangeTimes->{{3.736848370364489*^9, 3.736848373251605*^9}}, 265 | CellLabel->"In[6]:=", 266 | CellID->2034124534,ExpressionUUID->"d31bcfab-3990-4bd5-9a2f-6afc64cdc249"], 267 | 268 | Cell[BoxData[ 269 | RowBox[{"{", 270 | RowBox[{ 271 | InterpretationBox[ 272 | RowBox[{"\[LeftGuillemet]", 273 | RowBox[{"NETObject", "[", 274 | RowBox[{"Rhino", ".", "DocObjects", ".", "PointObject"}], "]"}], 275 | "\[RightGuillemet]"}], 276 | NETLink`Objects`NETObject$2799865692161], ",", 277 | InterpretationBox[ 278 | RowBox[{"\[LeftGuillemet]", 279 | RowBox[{"NETObject", "[", 280 | RowBox[{"Rhino", ".", "DocObjects", ".", "MeshObject"}], "]"}], 281 | "\[RightGuillemet]"}], 282 | NETLink`Objects`NETObject$25198808006657]}], "}"}]], "Output", 283 | CellChangeTimes->{3.7368684834065375`*^9}, 284 | CellLabel->"Out[6]=", 285 | CellID->1149411,ExpressionUUID->"bb968d55-5d5a-437f-a5f2-e67ef1a5a66f"] 286 | }, Open ]] 287 | }, Open ]], 288 | 289 | Cell[CellGroupData[{ 290 | 291 | Cell["More Examples", "ExtendedExamplesSection", 292 | CellTags->"ExtendedExamples", 293 | CellID->1854448968,ExpressionUUID->"375444f8-6898-4b57-b5a6-c70ab06a0094"], 294 | 295 | Cell[BoxData[ 296 | InterpretationBox[Cell[ 297 | "Scope", "ExampleSection",ExpressionUUID-> 298 | "c962e678-a307-4b4b-88e1-cf0d17ab44a7"], 299 | $Line = 0; Null]], "ExampleSection", 300 | CellID->1293636265,ExpressionUUID->"cf6829c2-39c4-4a6f-88d8-0d96fd5768df"], 301 | 302 | Cell[BoxData[ 303 | InterpretationBox[Cell[ 304 | "Generalizations & Extensions", "ExampleSection",ExpressionUUID-> 305 | "ec1399a1-737e-4b00-92ce-9d156330f557"], 306 | $Line = 0; Null]], "ExampleSection", 307 | CellID->1020263627,ExpressionUUID->"1be13985-5e78-4ad3-9076-2053cf66307e"], 308 | 309 | Cell[CellGroupData[{ 310 | 311 | Cell[BoxData[ 312 | InterpretationBox[Cell[ 313 | "Options", "ExampleSection",ExpressionUUID-> 314 | "f01d3632-ad5b-4a7d-9aaa-1cbd58cd2fbd"], 315 | $Line = 0; Null]], "ExampleSection", 316 | CellID->2061341341,ExpressionUUID->"733b1854-b62e-473b-a607-09f54c4ff4e9"], 317 | 318 | Cell[BoxData[ 319 | InterpretationBox[Cell[ 320 | "XXXX", "ExampleSubsection",ExpressionUUID-> 321 | "908d5557-315a-446e-807b-cb580f8cf398"], 322 | $Line = 0; Null]], "ExampleSubsection", 323 | CellID->1757724783,ExpressionUUID->"beee22aa-4f34-40d5-b581-ec255adb2e15"], 324 | 325 | Cell[BoxData[ 326 | InterpretationBox[Cell[ 327 | "XXXX", "ExampleSubsection",ExpressionUUID-> 328 | "506717b1-7cab-4e15-9e24-3b3e00f02f57"], 329 | $Line = 0; Null]], "ExampleSubsection", 330 | CellID->1295379749,ExpressionUUID->"55535f19-3e13-4837-b655-9838baec7ff2"] 331 | }, Closed]], 332 | 333 | Cell[BoxData[ 334 | InterpretationBox[Cell[ 335 | "Applications", "ExampleSection",ExpressionUUID-> 336 | "cf1395d8-2ea3-4fc4-be92-cb3247c539f3"], 337 | $Line = 0; Null]], "ExampleSection", 338 | CellID->258228157,ExpressionUUID->"85c2c387-25fb-412f-9b8b-cce449bbe0ce"], 339 | 340 | Cell[BoxData[ 341 | InterpretationBox[Cell[ 342 | "Properties & Relations", "ExampleSection",ExpressionUUID-> 343 | "00fa241f-c217-4a56-9b02-d79d63511ddb"], 344 | $Line = 0; Null]], "ExampleSection", 345 | CellID->2123667759,ExpressionUUID->"619b5e3a-728b-4753-b170-df0e0e818ca4"], 346 | 347 | Cell[BoxData[ 348 | InterpretationBox[Cell[ 349 | "Possible Issues", "ExampleSection",ExpressionUUID-> 350 | "8886f313-8df2-4cfc-b016-37876fc1d80a"], 351 | $Line = 0; Null]], "ExampleSection", 352 | CellID->1305812373,ExpressionUUID->"8a3dec07-a39a-47d1-aa6d-6d3e7328cc78"], 353 | 354 | Cell[BoxData[ 355 | InterpretationBox[Cell[ 356 | "Interactive Examples", "ExampleSection",ExpressionUUID-> 357 | "1e951724-1736-489e-8334-9467d74d44d4"], 358 | $Line = 0; Null]], "ExampleSection", 359 | CellID->1653164318,ExpressionUUID->"73a86c02-be76-47a0-b24b-aca793d3242b"], 360 | 361 | Cell[BoxData[ 362 | InterpretationBox[Cell[ 363 | "Neat Examples", "ExampleSection",ExpressionUUID-> 364 | "a6f07433-c875-40f6-b7ed-15db85080f2e"], 365 | $Line = 0; Null]], "ExampleSection", 366 | CellID->589267740,ExpressionUUID->"142c603f-0877-49d5-95b9-681f45e86b1c"] 367 | }, Open ]] 368 | }, 369 | Evaluator->"RhinoAttach", 370 | WindowSize->{700, 770}, 371 | WindowMargins->{{4, Automatic}, {Automatic, 0}}, 372 | CellContext->"Global`", 373 | FrontEndVersion->"11.3 for Mac OS X x86 (32-bit, 64-bit Kernel) (March 5, \ 374 | 2018)", 375 | StyleDefinitions->FrontEnd`FileName[{"Wolfram"}, "FunctionPageStyles.nb", 376 | CharacterEncoding -> "UTF-8"] 377 | ] 378 | (* End of Notebook Content *) 379 | 380 | (* Internal cache information *) 381 | (*CellTagsOutline 382 | CellTagsIndex->{ 383 | "ExtendedExamples"->{ 384 | Cell[9719, 290, 155, 2, 56, "ExtendedExamplesSection",ExpressionUUID->"375444f8-6898-4b57-b5a6-c70ab06a0094", 385 | CellTags->"ExtendedExamples", 386 | CellID->1854448968]} 387 | } 388 | *) 389 | (*CellTagsIndex 390 | CellTagsIndex->{ 391 | {"ExtendedExamples", 12900, 382} 392 | } 393 | *) 394 | (*NotebookFileOutline 395 | Notebook[{ 396 | Cell[558, 20, 669, 15, 24, "History",ExpressionUUID->"9e06f0a0-aa29-47d6-b6dd-7bd80be0b865", 397 | CellID->1247902091], 398 | Cell[CellGroupData[{ 399 | Cell[1252, 39, 123, 1, 29, "CategorizationSection",ExpressionUUID->"4eb690c7-5223-4bca-ac38-66f1fcc9a603", 400 | CellID->1122911449], 401 | Cell[1378, 42, 134, 2, 70, "Categorization",ExpressionUUID->"2d31068c-0f24-4195-a51b-0405bd2d6dc2", 402 | CellID->686433507], 403 | Cell[1515, 46, 137, 2, 70, "Categorization",ExpressionUUID->"9dbd7759-3510-4184-9186-e6e0bdd265d2", 404 | CellID->605800465], 405 | Cell[1655, 50, 134, 2, 70, "Categorization",ExpressionUUID->"fa5b1fca-a16c-46ea-8c26-85be97f9fbb0", 406 | CellID->468444828], 407 | Cell[1792, 54, 129, 1, 70, "Categorization",ExpressionUUID->"992b2816-09df-452e-9c3b-70bdafdffb8f"] 408 | }, Closed]], 409 | Cell[CellGroupData[{ 410 | Cell[1958, 60, 110, 1, 19, "KeywordsSection",ExpressionUUID->"e352a20c-bcfe-4084-aa92-de36329512e8", 411 | CellID->477174294], 412 | Cell[2071, 63, 100, 1, 70, "Keywords",ExpressionUUID->"938acac4-93d6-43a2-9366-bdeabd9a9513", 413 | CellID->1164421360] 414 | }, Closed]], 415 | Cell[CellGroupData[{ 416 | Cell[2208, 69, 120, 1, 19, "TemplatesSection",ExpressionUUID->"6d1156df-4e76-4289-b424-304a772670e0", 417 | CellID->1872225408], 418 | Cell[2331, 72, 149, 2, 70, "Template",ExpressionUUID->"719bb730-6804-4a8e-a039-6907033638c9", 419 | CellID->1562036412], 420 | Cell[2483, 76, 137, 2, 70, "Template",ExpressionUUID->"abcd4710-1d15-4bfe-9b5f-41e134307ec7", 421 | CellID->158391909], 422 | Cell[2623, 80, 136, 2, 70, "Template",ExpressionUUID->"a03c443e-4259-47cb-8d1c-c578b072ef21", 423 | CellID->1360575930], 424 | Cell[2762, 84, 137, 2, 70, "Template",ExpressionUUID->"6017b6ef-03a3-49a1-a5fb-996537bb2385", 425 | CellID->793782254] 426 | }, Closed]], 427 | Cell[CellGroupData[{ 428 | Cell[2936, 91, 108, 1, 19, "DetailsSection",ExpressionUUID->"fb1dc596-ee4e-4459-baf7-5193753e2d91", 429 | CellID->307771771], 430 | Cell[3047, 94, 118, 2, 70, "Details",ExpressionUUID->"a23fe317-e252-47dc-b4b5-0987c3fd182b", 431 | CellID->670882175], 432 | Cell[3168, 98, 124, 2, 70, "Details",ExpressionUUID->"707caf19-4736-4f62-8f3b-6af357814c24", 433 | CellID->350963985], 434 | Cell[3295, 102, 119, 2, 70, "Details",ExpressionUUID->"880574d8-42bb-4287-a682-a3ebe84c8df3", 435 | CellID->8391405], 436 | Cell[3417, 106, 124, 2, 70, "Details",ExpressionUUID->"962b6bae-27dd-4c7c-9af8-f53ba8a2f6e3", 437 | CellID->3610269], 438 | Cell[3544, 110, 116, 2, 70, "Details",ExpressionUUID->"0f56c700-7d6e-4833-8f5b-884ed0ae17cb", 439 | CellID->401364205], 440 | Cell[3663, 114, 116, 2, 70, "Details",ExpressionUUID->"32c75c03-c77a-4fb6-b23d-22b948af67b0", 441 | CellID->350204745], 442 | Cell[3782, 118, 118, 2, 70, "Details",ExpressionUUID->"c59da13b-6124-4f48-a08a-a35c87a21a79", 443 | CellID->732958810], 444 | Cell[3903, 122, 133, 2, 70, "Details",ExpressionUUID->"c14423d3-145b-4754-95d4-5466dae9cfc0", 445 | CellID->222905350], 446 | Cell[4039, 126, 122, 2, 70, "Details",ExpressionUUID->"b6bff645-c553-4252-9c33-0c90d13bac72", 447 | CellID->240026365] 448 | }, Closed]], 449 | Cell[CellGroupData[{ 450 | Cell[4198, 133, 113, 1, 63, "ObjectName",ExpressionUUID->"c9f518ed-89e9-4b1b-b2b2-06637171101e", 451 | CellID->1224892054], 452 | Cell[4314, 136, 491, 10, 76, "Usage",ExpressionUUID->"adb3284f-bf16-40b7-9bb1-4fbd07f939ff", 453 | CellID->982511436], 454 | Cell[4808, 148, 533, 11, 28, "Notes",ExpressionUUID->"eb1e3cd6-dab5-4d5a-ab13-0dabde89c5f9", 455 | CellID->1067943069] 456 | }, Open ]], 457 | Cell[CellGroupData[{ 458 | Cell[5378, 164, 112, 1, 44, "TutorialsSection",ExpressionUUID->"1bbcb72b-1ede-4eb6-9c8b-c8c62f634859", 459 | CellID->250839057], 460 | Cell[5493, 167, 332, 5, 16, "Tutorials",ExpressionUUID->"364940bf-72a7-4b07-98ca-6213a67a30ca", 461 | CellID->292544750] 462 | }, Open ]], 463 | Cell[CellGroupData[{ 464 | Cell[5862, 177, 138, 1, 31, "RelatedDemonstrationsSection",ExpressionUUID->"6cca8595-45c4-4a67-92dc-6a23584866cb", 465 | CellID->1268215905], 466 | Cell[6003, 180, 113, 1, 16, "RelatedDemonstrations",ExpressionUUID->"09705d83-1f3a-4f95-b16b-bc0001930d7e", 467 | CellID->1129518860] 468 | }, Open ]], 469 | Cell[CellGroupData[{ 470 | Cell[6153, 186, 120, 1, 31, "RelatedLinksSection",ExpressionUUID->"da27c570-db55-4f46-bec2-12fc43813cdf", 471 | CellID->1584193535], 472 | Cell[6276, 189, 104, 1, 16, "RelatedLinks",ExpressionUUID->"e9c2e26f-d939-4db6-ada4-369cf33a09b4", 473 | CellID->1038487239] 474 | }, Open ]], 475 | Cell[CellGroupData[{ 476 | Cell[6417, 195, 110, 1, 31, "SeeAlsoSection",ExpressionUUID->"d1624e41-622a-4b91-91b3-01c861798726", 477 | CellID->1255426704], 478 | Cell[6530, 198, 856, 21, 22, "SeeAlso",ExpressionUUID->"70321a95-d5a7-4098-b62d-9287b8209cc8", 479 | CellID->929782353] 480 | }, Open ]], 481 | Cell[CellGroupData[{ 482 | Cell[7423, 224, 112, 1, 31, "MoreAboutSection",ExpressionUUID->"a96010f8-786e-4898-aa84-f73db7c96dee", 483 | CellID->38303248], 484 | Cell[7538, 227, 101, 1, 16, "MoreAbout",ExpressionUUID->"de20ff2f-c087-409d-b442-ddeb7bec21f6", 485 | CellID->1665078683] 486 | }, Open ]], 487 | Cell[CellGroupData[{ 488 | Cell[7676, 233, 411, 11, 70, "PrimaryExamplesSection",ExpressionUUID->"ec007f17-8e25-44f1-9532-88f30241136c", 489 | CellID->880084151], 490 | Cell[8090, 246, 431, 7, 52, "ExampleText",ExpressionUUID->"76c006ce-9132-4fad-934a-f0dee1920580", 491 | CellID->125237741], 492 | Cell[8524, 255, 219, 2, 22, "ExampleText",ExpressionUUID->"f048c27d-2457-4700-b1eb-66305f9f228f", 493 | CellID->377833685], 494 | Cell[CellGroupData[{ 495 | Cell[8768, 261, 228, 4, 27, "Input",ExpressionUUID->"d31bcfab-3990-4bd5-9a2f-6afc64cdc249", 496 | CellID->2034124534], 497 | Cell[8999, 267, 671, 17, 46, "Output",ExpressionUUID->"bb968d55-5d5a-437f-a5f2-e67ef1a5a66f", 498 | CellID->1149411] 499 | }, Open ]] 500 | }, Open ]], 501 | Cell[CellGroupData[{ 502 | Cell[9719, 290, 155, 2, 56, "ExtendedExamplesSection",ExpressionUUID->"375444f8-6898-4b57-b5a6-c70ab06a0094", 503 | CellTags->"ExtendedExamples", 504 | CellID->1854448968], 505 | Cell[9877, 294, 242, 5, 33, "ExampleSection",ExpressionUUID->"cf6829c2-39c4-4a6f-88d8-0d96fd5768df", 506 | CellID->1293636265], 507 | Cell[10122, 301, 265, 5, 21, "ExampleSection",ExpressionUUID->"1be13985-5e78-4ad3-9076-2053cf66307e", 508 | CellID->1020263627], 509 | Cell[CellGroupData[{ 510 | Cell[10412, 310, 244, 5, 21, "ExampleSection",ExpressionUUID->"733b1854-b62e-473b-a607-09f54c4ff4e9", 511 | CellID->2061341341], 512 | Cell[10659, 317, 247, 5, 70, "ExampleSubsection",ExpressionUUID->"beee22aa-4f34-40d5-b581-ec255adb2e15", 513 | CellID->1757724783], 514 | Cell[10909, 324, 247, 5, 70, "ExampleSubsection",ExpressionUUID->"55535f19-3e13-4837-b655-9838baec7ff2", 515 | CellID->1295379749] 516 | }, Closed]], 517 | Cell[11171, 332, 248, 5, 21, "ExampleSection",ExpressionUUID->"85c2c387-25fb-412f-9b8b-cce449bbe0ce", 518 | CellID->258228157], 519 | Cell[11422, 339, 259, 5, 21, "ExampleSection",ExpressionUUID->"619b5e3a-728b-4753-b170-df0e0e818ca4", 520 | CellID->2123667759], 521 | Cell[11684, 346, 252, 5, 21, "ExampleSection",ExpressionUUID->"8a3dec07-a39a-47d1-aa6d-6d3e7328cc78", 522 | CellID->1305812373], 523 | Cell[11939, 353, 257, 5, 21, "ExampleSection",ExpressionUUID->"73a86c02-be76-47a0-b24b-aca793d3242b", 524 | CellID->1653164318], 525 | Cell[12199, 360, 249, 5, 21, "ExampleSection",ExpressionUUID->"142c603f-0877-49d5-95b9-681f45e86b1c", 526 | CellID->589267740] 527 | }, Open ]] 528 | } 529 | ] 530 | *) 531 | 532 | -------------------------------------------------------------------------------- /RhinoLink/Documentation/English/Guides/RhinoLink.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 11.3' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 158, 7] 13 | NotebookDataLength[ 23024, 557] 14 | NotebookOptionsPosition[ 16002, 416] 15 | NotebookOutlinePosition[ 16427, 433] 16 | CellTagsIndexPosition[ 16384, 430] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | Cell[TextData[{ 22 | "New in: ", 23 | Cell["0.9", "HistoryData", 24 | CellTags->"New",ExpressionUUID->"dd4a74c6-f88e-4917-bfce-7a6d35cc103a"], 25 | " | Modified in: ", 26 | Cell[" ", "HistoryData", 27 | CellTags->"Modified",ExpressionUUID->"d5d86c97-6436-4d46-b657-2810e3775e8b"], 28 | " | Obsolete in: ", 29 | Cell[" ", "HistoryData", 30 | CellTags->"Obsolete",ExpressionUUID->"e79169e5-83e5-4781-bcb5-221a181cd450"], 31 | " | Excised in: ", 32 | Cell[" ", "HistoryData", 33 | CellTags->"Excised",ExpressionUUID->"213bca75-d0ab-4a2e-ba30-2c90488d1010"] 34 | }], "History", 35 | CellID->1247902091,ExpressionUUID->"14cef046-f3af-4e3f-a8b5-ceb4f0ed8aff"], 36 | 37 | Cell[CellGroupData[{ 38 | 39 | Cell["Categorization", "CategorizationSection", 40 | CellID->1122911449,ExpressionUUID->"1f7fa7a1-93fc-4ea9-96cb-46fea4c04723"], 41 | 42 | Cell["Guide", "Categorization", 43 | CellLabel->"Entity Type", 44 | CellID->686433507,ExpressionUUID->"fbf0b17e-e107-4706-898d-d57892dd7c8e"], 45 | 46 | Cell["RhinoLink", "Categorization", 47 | CellLabel->"Paclet Name", 48 | CellID->605800465,ExpressionUUID->"ce3266a8-739e-45ce-811e-ba8b96160d60"], 49 | 50 | Cell["RhinoLink`", "Categorization", 51 | CellLabel->"Context", 52 | CellID->468444828,ExpressionUUID->"67d6742f-cee9-4b89-a004-1247e6335e71"], 53 | 54 | Cell["RhinoLink/guide/RhinoLink", "Categorization", 55 | CellLabel->"URI",ExpressionUUID->"49c7000e-7aea-4d2f-b406-bc79fd5cffa2"] 56 | }, Closed]], 57 | 58 | Cell[CellGroupData[{ 59 | 60 | Cell["Keywords", "KeywordsSection", 61 | CellID->1427428552,ExpressionUUID->"a3ca5380-4631-4ce4-8623-56d9d1fde692"], 62 | 63 | Cell["XXXX", "Keywords", 64 | CellID->1251852827,ExpressionUUID->"d7936553-9001-4135-9d15-da2f8de60cce"] 65 | }, Closed]], 66 | 67 | Cell[CellGroupData[{ 68 | 69 | Cell["Details", "DetailsSection", 70 | CellID->307771771,ExpressionUUID->"3f5c6149-78f5-49d2-b235-2f635f770fbe"], 71 | 72 | Cell["XXXX", "Details", 73 | CellLabel->"Lead", 74 | CellID->795394057,ExpressionUUID->"8a7c4fc4-664d-432a-84af-85214633b843"], 75 | 76 | Cell["XXXX", "Details", 77 | CellLabel->"Developers", 78 | CellID->350963985,ExpressionUUID->"8c4c9d86-25e5-40a8-b33d-faba8c6eda13"], 79 | 80 | Cell["XXXX", "Details", 81 | CellLabel->"Authors", 82 | CellID->802101,ExpressionUUID->"d9d482a2-af61-4c47-b791-e9976fd5817a"], 83 | 84 | Cell["XXXX", "Details", 85 | CellLabel->"Feature Name", 86 | CellID->509823116,ExpressionUUID->"bd3ebbe3-8e1e-4417-952d-b89ef45759e5"], 87 | 88 | Cell["XXXX", "Details", 89 | CellLabel->"QA", 90 | CellID->199884516,ExpressionUUID->"a9b115b8-999e-4f6b-9ab6-dfef7ed4533a"], 91 | 92 | Cell["XXXX", "Details", 93 | CellLabel->"DA", 94 | CellID->463951815,ExpressionUUID->"10fec028-63dc-4068-b8cf-a22971dda03f"], 95 | 96 | Cell["XXXX", "Details", 97 | CellLabel->"Docs", 98 | CellID->8237523,ExpressionUUID->"e73357f6-1c7f-4193-9801-26c8fd348a37"], 99 | 100 | Cell["XXXX", "Details", 101 | CellLabel->"Features Page Notes", 102 | CellID->813936640,ExpressionUUID->"2471ad6a-517d-41d5-bdd5-bcb5385d57ca"], 103 | 104 | Cell["XXXX", "Details", 105 | CellLabel->"Comments", 106 | CellID->240026365,ExpressionUUID->"ee3a67d9-61d9-4dcf-93e9-a77f98665e56"] 107 | }, Closed]], 108 | 109 | Cell[CellGroupData[{ 110 | 111 | Cell["RhinoLink", "GuideTitle", 112 | CellID->942062912,ExpressionUUID->"6980d0b3-7286-40ec-9ddc-80918efed683"], 113 | 114 | Cell["\<\ 115 | RhinoLink provides two-way communication between McNeel & Associates' \ 116 | Rhinoceros (\"Rhino\") and Mathematica or Wolfram Desktop. With RhinoLink, \ 117 | you can source Rhino geometry from Mathematica, control Rhino content with \ 118 | Wolfram Language interfaces, script Rhino with Wolfram Language, make \ 119 | Grasshopper components that encapsulate Wolfram Language code, and more.\ 120 | \>", "GuideAbstract", 121 | CellChangeTimes->{{3.7368811303877735`*^9, 3.7368811483544235`*^9}, { 122 | 3.7368811812288446`*^9, 3.736881297867366*^9}, 3.737375499260497*^9, 123 | 3.7373755398591223`*^9}, 124 | CellID->2001916300,ExpressionUUID->"820c04f5-5abd-4205-9745-51ecdc6b27a2"] 125 | }, Open ]], 126 | 127 | Cell[CellGroupData[{ 128 | 129 | Cell["", "GuideFunctionsSection", 130 | CellID->1866139230,ExpressionUUID->"1de4a80a-97ac-4a1d-b44f-56f6719e13b4"], 131 | 132 | Cell[TextData[{ 133 | Cell[BoxData[ 134 | ButtonBox["InstallRhinoPlugin", 135 | BaseStyle->"Link", 136 | ButtonData->"paclet:RhinoLink/ref/InstallRhinoPlugin"]], 137 | "InlineGuideFunction",ExpressionUUID-> 138 | "4fd6a259-a148-4eec-b1c6-b1681fbb7d2d"], 139 | " \[LongDash] install RhinoLink components" 140 | }], "GuideText", 141 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 142 | 3.7368820267951417`*^9, 3.736882035717654*^9}, {3.7373754879502974`*^9, 143 | 3.737375488994665*^9}, {3.737376014512622*^9, 3.737376031113237*^9}}, 144 | CellID->239214933,ExpressionUUID->"d3f87bea-4ebd-4d86-a58c-22cdcee35bff"], 145 | 146 | Cell["\t", "GuideDelimiter", 147 | CellID->34259286,ExpressionUUID->"43f99baa-4f53-45a1-a809-78653201b450"], 148 | 149 | Cell[CellGroupData[{ 150 | 151 | Cell["Managing Rhino Documents", "GuideFunctionsSubsection", 152 | CellChangeTimes->{{3.34724261538485*^9, 3.34724261861858*^9}, { 153 | 3.7368817362908125`*^9, 3.736881736695997*^9}, {3.736881777429268*^9, 154 | 3.736881782805355*^9}, {3.7368819227536273`*^9, 3.7368819271141243`*^9}, { 155 | 3.7368820588730373`*^9, 3.736882059966878*^9}}, 156 | CellID->21187227,ExpressionUUID->"938e4caa-ffbf-4f2a-806c-44e40c767952"], 157 | 158 | Cell[TextData[{ 159 | Cell[BoxData[ 160 | ButtonBox["RhinoDocObjects", 161 | BaseStyle->"Link", 162 | ButtonData->"paclet:RhinoLink/ref/RhinoDocObjects"]], 163 | "InlineGuideFunction",ExpressionUUID-> 164 | "2d40d55f-d2cc-4cae-b56b-4300bed4f77e"], 165 | " \[LongDash] return a list of objects in the active Rhino document" 166 | }], "GuideText", 167 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 168 | 3.7368820267951417`*^9, 3.736882035717654*^9}, 3.737376053203351*^9, 169 | 3.73737612474778*^9, {3.737376275996422*^9, 3.737376284430785*^9}}, 170 | CellID->389425012,ExpressionUUID->"44093ec4-38e6-41a1-bbe8-71e04567ce4b"], 171 | 172 | Cell[TextData[{ 173 | Cell[BoxData[ 174 | ButtonBox["RhinoShow", 175 | BaseStyle->"Link", 176 | ButtonData->"paclet:RhinoLink/ref/RhinoShow"]], "InlineGuideFunction", 177 | ExpressionUUID->"40bb077f-ca6f-427f-a83d-366c8044b154"], 178 | " \[LongDash] add an object to the active Rhino document" 179 | }], "GuideText", 180 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 181 | 3.73688205076447*^9, 3.7368820659967747`*^9}, {3.737376292654951*^9, 182 | 3.737376296007913*^9}}, 183 | CellID->60040460,ExpressionUUID->"c69c693d-eaaf-42a9-973d-86ed1fffa99e"], 184 | 185 | Cell[TextData[{ 186 | Cell[BoxData[ 187 | ButtonBox["RhinoUnshow", 188 | BaseStyle->"Link", 189 | ButtonData->"paclet:RhinoLink/ref/RhinoUnshow"]], "InlineGuideFunction", 190 | ExpressionUUID->"11b5a897-c048-4321-8cb6-23b5e4ad2739"], 191 | " \[LongDash] remove an object from the active Rhino document" 192 | }], "GuideText", 193 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 194 | 3.73688205076447*^9, 3.7368820659967747`*^9}, {3.7373763011368303`*^9, 195 | 3.737376307221871*^9}}, 196 | CellID->315460994,ExpressionUUID->"a3b4a297-3f45-40ff-9118-b46ed6a1870d"], 197 | 198 | Cell[TextData[{ 199 | Cell[BoxData[ 200 | ButtonBox["RhinoReshow", 201 | BaseStyle->"Link", 202 | ButtonData->"paclet:RhinoLink/ref/RhinoReshow"]], "InlineGuideFunction", 203 | ExpressionUUID->"15e4ea91-c478-48d9-8d9c-bc818bce894f"], 204 | " \[LongDash] replace an object in the active Rhino document" 205 | }], "GuideText", 206 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 207 | 3.73688205076447*^9, 3.7368820659967747`*^9}, {3.736882112559458*^9, 208 | 3.7368821155735097`*^9}, {3.73737631505479*^9, 3.737376316446957*^9}}, 209 | CellID->714047499,ExpressionUUID->"3e1f8259-30f6-4f01-8faf-de6c76c12959"] 210 | }, Open ]], 211 | 212 | Cell["\t", "GuideDelimiter", 213 | CellID->2557100,ExpressionUUID->"15cf65fb-cea5-4df0-b817-e2d9775cbf8e"], 214 | 215 | Cell[CellGroupData[{ 216 | 217 | Cell["Data Conversion", "GuideFunctionsSubsection", 218 | CellChangeTimes->{{3.34724261538485*^9, 3.34724261861858*^9}, { 219 | 3.7368817362908125`*^9, 3.736881736695997*^9}, {3.736881777429268*^9, 220 | 3.736881782805355*^9}, {3.7368819227536273`*^9, 3.7368819271141243`*^9}, { 221 | 3.7368820588730373`*^9, 3.736882059966878*^9}, {3.7368822111224008`*^9, 222 | 3.7368822135594635`*^9}}, 223 | CellID->22367995,ExpressionUUID->"c33e3a07-e753-4bcc-879d-fa9131e7dd2e"], 224 | 225 | Cell[TextData[{ 226 | Cell[BoxData[ 227 | ButtonBox["ToRhino", 228 | BaseStyle->"Link", 229 | ButtonData->"paclet:RhinoLink/ref/ToRhino"]], "InlineGuideFunction", 230 | ExpressionUUID->"aff26c62-2927-4144-9e7a-d7bf9ae058ea"], 231 | " \[LongDash] convert a Wolfram Language object to a Rhino object" 232 | }], "GuideText", 233 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 234 | 3.7368822745439806`*^9, 3.736882284402975*^9}, {3.737376319866788*^9, 235 | 3.7373763213591948`*^9}}, 236 | CellID->156450403,ExpressionUUID->"2c41900f-4c50-47ef-b3e0-ce01dc6d8e1d"], 237 | 238 | Cell[TextData[{ 239 | Cell[BoxData[ 240 | ButtonBox["FromRhino", 241 | BaseStyle->"Link", 242 | ButtonData->"paclet:RhinoLink/ref/FromRhino"]], "InlineGuideFunction", 243 | ExpressionUUID->"502a4c00-8266-4667-9a25-94c7cd9dd2b0"], 244 | " \[LongDash] convert a Rhino object to a Wolfram Language object" 245 | }], "GuideText", 246 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 247 | 3.73688228643423*^9, 3.7368822976860247`*^9}, {3.737376324720901*^9, 248 | 3.737376325319128*^9}}, 249 | CellID->541989761,ExpressionUUID->"e231cb6d-07c2-4467-8cd9-c5d2063b0201"] 250 | }, Open ]], 251 | 252 | Cell["\t", "GuideDelimiter", 253 | CellID->20851,ExpressionUUID->"48a76484-0fe8-4bcb-9689-c60ee53d2d04"], 254 | 255 | Cell[CellGroupData[{ 256 | 257 | Cell["Mesh Operations", "GuideFunctionsSubsection", 258 | CellChangeTimes->{{3.34724261538485*^9, 3.34724261861858*^9}, { 259 | 3.7368817362908125`*^9, 3.736881736695997*^9}}, 260 | CellID->32271,ExpressionUUID->"8eab67d6-9e6e-4439-add7-b4b691bc1d6a"], 261 | 262 | Cell[TextData[{ 263 | Cell[BoxData[ 264 | ButtonBox["RhinoMeshUnion", 265 | BaseStyle->"Link", 266 | ButtonData->"paclet:RhinoLink/ref/RhinoMeshUnion"]], "InlineGuideFunction", 267 | ExpressionUUID->"3029b2c5-07c9-4086-a843-ffddd92d0a83"], 268 | " \[LongDash] get the union of Rhino meshes" 269 | }], "GuideText", 270 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 271 | 3.737376330422134*^9, 3.73737633165488*^9}}, 272 | CellID->203374175,ExpressionUUID->"6d171900-bd13-4bcc-8233-4d3f4e7637b3"], 273 | 274 | Cell[TextData[{ 275 | Cell[BoxData[ 276 | ButtonBox["RhinoMeshIntersection", 277 | BaseStyle->"Link", 278 | ButtonData->"paclet:RhinoLink/ref/RhinoMeshIntersection"]], 279 | "InlineGuideFunction",ExpressionUUID-> 280 | "82222781-004d-4f96-85d3-b970db82d864"], 281 | " \[LongDash] get the intersection of Rhino meshes" 282 | }], "GuideText", 283 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 284 | 3.73688168196303*^9, 3.736881699181219*^9}, {3.7373763368715153`*^9, 285 | 3.737376338077363*^9}}, 286 | CellID->40258340,ExpressionUUID->"92edd901-f949-4428-abf9-1c5afd2135e0"], 287 | 288 | Cell[TextData[{ 289 | Cell[BoxData[ 290 | ButtonBox["RhinoMeshDifference", 291 | BaseStyle->"Link", 292 | ButtonData->"paclet:RhinoLink/ref/RhinoMeshDifference"]], 293 | "InlineGuideFunction",ExpressionUUID-> 294 | "f8bfb607-24f3-42f9-89f8-6ca7ac351115"], 295 | " \[LongDash] get the difference of Rhino meshes" 296 | }], "GuideText", 297 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 298 | 3.7368816847921667`*^9, 3.7368817141670732`*^9}, {3.737376342705352*^9, 299 | 3.7373763436702747`*^9}}, 300 | CellID->357981387,ExpressionUUID->"589214de-ee8a-43fe-829b-c66106db1f05"] 301 | }, Open ]], 302 | 303 | Cell["\t", "GuideDelimiter", 304 | CellID->118920049,ExpressionUUID->"88cf5639-78ab-403a-b427-4bf46d75fe1e"], 305 | 306 | Cell[CellGroupData[{ 307 | 308 | Cell["Deploying Grasshopper Components", "GuideFunctionsSubsection", 309 | CellChangeTimes->{{3.34724261538485*^9, 3.34724261861858*^9}, { 310 | 3.7368817362908125`*^9, 3.736881736695997*^9}, {3.736881777429268*^9, 311 | 3.736881782805355*^9}}, 312 | CellID->905744499,ExpressionUUID->"e53bf8a9-6124-4a8b-9cdd-76e4cad1f172"], 313 | 314 | Cell[TextData[{ 315 | Cell[BoxData[ 316 | ButtonBox["GHDeploy", 317 | BaseStyle->"Link", 318 | ButtonData->"paclet:RhinoLink/ref/GHDeploy"]], "InlineGuideFunction", 319 | ExpressionUUID->"0be241a2-3f53-4d7d-b4dc-2a30eb11cb3b"], 320 | " \[LongDash] deploy a Grasshopper component that encapsulates Wolfram \ 321 | Language code" 322 | }], "GuideText", 323 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 324 | 3.736881846738948*^9, 3.7368818495363655`*^9}, {3.7373763484659967`*^9, 325 | 3.737376349582056*^9}}, 326 | CellID->307539114,ExpressionUUID->"f559390c-aa3f-4686-a25b-c2961892b359"], 327 | 328 | Cell[TextData[{ 329 | Cell[BoxData[ 330 | ButtonBox["GHResult", 331 | BaseStyle->"Link", 332 | ButtonData->"paclet:RhinoLink/ref/GHResult"]], "InlineGuideFunction", 333 | ExpressionUUID->"e632233f-5149-40b8-9577-54af5f21e28e"], 334 | " \[LongDash] return multiple results from a Grasshopper component" 335 | }], "GuideText", 336 | CellChangeTimes->{{3.736881606872908*^9, 3.736881643136314*^9}, { 337 | 3.736881846738948*^9, 3.7368818495363655`*^9}, {3.736881895315919*^9, 338 | 3.7368818955832195`*^9}, {3.737376353846999*^9, 3.737376355269875*^9}}, 339 | CellID->220455015,ExpressionUUID->"672b7afe-e29f-4fe9-93f7-0a83211eff39"] 340 | }, Open ]] 341 | }, Open ]], 342 | 343 | Cell[CellGroupData[{ 344 | 345 | Cell["Tutorials", "GuideTutorialsSection", 346 | CellID->415694126,ExpressionUUID->"43f9e9e9-fd2f-4873-9511-3d12053b5c9a"], 347 | 348 | Cell[TextData[ButtonBox["Use NETLink to Examine and Create Objects in Rhino", 349 | BaseStyle->"Link", 350 | ButtonData-> 351 | "paclet:RhinoLink/tutorial/ManualInteractionWithRhinoObjects"]], \ 352 | "GuideTutorial", 353 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 354 | CellID->292544750,ExpressionUUID->"83863b84-5506-4fc3-aa64-cb8b8ccc5cc9"], 355 | 356 | Cell[TextData[ButtonBox["Operate on Wolfram Language Meshes Using Rhino", 357 | BaseStyle->"Link", 358 | ButtonData-> 359 | "paclet:RhinoLink/tutorial/UsingRhinoMeshOperations"]], "GuideTutorial", 360 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 361 | CellID->422280156,ExpressionUUID->"3d5e654d-1d7c-4665-b6f2-ab80fd62df3b"], 362 | 363 | Cell[TextData[ButtonBox["Control a Parametric Surface in Rhino with a \ 364 | Manipulate Interface in Mathematica", 365 | BaseStyle->"Link", 366 | ButtonData->"paclet:RhinoLink/tutorial/InteractiveSurface"]], "GuideTutorial", 367 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 368 | CellID->740172588,ExpressionUUID->"6594af3c-baef-48df-8764-484836844057"], 369 | 370 | Cell[TextData[ButtonBox["Create Box Structures in Rhino with an Interface in \ 371 | Mathematica", 372 | BaseStyle->"Link", 373 | ButtonData->"paclet:RhinoLink/tutorial/BoxDesignWidget"]], "GuideTutorial", 374 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 375 | CellID->28768034,ExpressionUUID->"9008c1d0-64ec-4bf2-abe7-5374d3f961c1"], 376 | 377 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Translates \ 378 | Graphics3D Output to Rhino Meshes", 379 | BaseStyle->"Link", 380 | ButtonData-> 381 | "paclet:RhinoLink/tutorial/Graphics3DComponent"]], "GuideTutorial", 382 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 383 | CellID->251143726,ExpressionUUID->"deeb6339-128c-40c6-8d27-bab3f8db97a9"], 384 | 385 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Makes NURBS \ 386 | Surfaces from U-V Point Grids", 387 | BaseStyle->"Link", 388 | ButtonData->"paclet:RhinoLink/tutorial/UVSurfaceComponent"]], "GuideTutorial", 389 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 390 | CellID->1098419325,ExpressionUUID->"74dfac6b-7033-4aa6-bf54-9df81a671201"], 391 | 392 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Covers a Surface \ 393 | of Revolution with Phyllotaxically-Arranged Points", 394 | BaseStyle->"Link", 395 | ButtonData-> 396 | "paclet:RhinoLink/tutorial/SpiralPhyllotaxicSurfaceComponent"]], \ 397 | "GuideTutorial", 398 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 399 | CellID->71800016,ExpressionUUID->"158a713d-5e66-40ab-9795-599cb1b40c4c"] 400 | }, Open ]], 401 | 402 | Cell[CellGroupData[{ 403 | 404 | Cell["More About", "GuideMoreAboutSection", 405 | CellID->23220180,ExpressionUUID->"74b0d898-0705-413a-ae21-fe2ee075a701"], 406 | 407 | Cell["XXXX", "GuideMoreAbout", 408 | CellID->1567025153,ExpressionUUID->"d66255c6-1785-419e-a660-c931e32dccc3"], 409 | 410 | Cell["XXXX", "GuideMoreAbout", 411 | CellID->252299663,ExpressionUUID->"f15f437c-145b-4cd2-913b-803bdd3f83a2"] 412 | }, Open ]], 413 | 414 | Cell["Related Links", "GuideRelatedLinksSection", 415 | CellID->415694148,ExpressionUUID->"af0502f5-b6a4-4a12-9d01-9a59efb4664a"] 416 | }, 417 | WindowSize->{700, 770}, 418 | WindowMargins->{{4, Automatic}, {Automatic, 0}}, 419 | FrontEndVersion->"11.3 for Mac OS X x86 (32-bit, 64-bit Kernel) (March 5, \ 420 | 2018)", 421 | StyleDefinitions->FrontEnd`FileName[{"Wolfram"}, "GuidePageStyles.nb", 422 | CharacterEncoding -> "UTF-8"] 423 | ] 424 | (* End of Notebook Content *) 425 | 426 | (* Internal cache information *) 427 | (*CellTagsOutline 428 | CellTagsIndex->{} 429 | *) 430 | (*CellTagsIndex 431 | CellTagsIndex->{} 432 | *) 433 | (*NotebookFileOutline 434 | Notebook[{ 435 | Cell[558, 20, 600, 14, 24, "History",ExpressionUUID->"14cef046-f3af-4e3f-a8b5-ceb4f0ed8aff", 436 | CellID->1247902091], 437 | Cell[CellGroupData[{ 438 | Cell[1183, 38, 123, 1, 29, "CategorizationSection",ExpressionUUID->"1f7fa7a1-93fc-4ea9-96cb-46fea4c04723", 439 | CellID->1122911449], 440 | Cell[1309, 41, 133, 2, 70, "Categorization",ExpressionUUID->"fbf0b17e-e107-4706-898d-d57892dd7c8e", 441 | CellID->686433507], 442 | Cell[1445, 45, 137, 2, 70, "Categorization",ExpressionUUID->"ce3266a8-739e-45ce-811e-ba8b96160d60", 443 | CellID->605800465], 444 | Cell[1585, 49, 134, 2, 70, "Categorization",ExpressionUUID->"67d6742f-cee9-4b89-a004-1247e6335e71", 445 | CellID->468444828], 446 | Cell[1722, 53, 125, 1, 70, "Categorization",ExpressionUUID->"49c7000e-7aea-4d2f-b406-bc79fd5cffa2"] 447 | }, Closed]], 448 | Cell[CellGroupData[{ 449 | Cell[1884, 59, 111, 1, 19, "KeywordsSection",ExpressionUUID->"a3ca5380-4631-4ce4-8623-56d9d1fde692", 450 | CellID->1427428552], 451 | Cell[1998, 62, 100, 1, 70, "Keywords",ExpressionUUID->"d7936553-9001-4135-9d15-da2f8de60cce", 452 | CellID->1251852827] 453 | }, Closed]], 454 | Cell[CellGroupData[{ 455 | Cell[2135, 68, 108, 1, 19, "DetailsSection",ExpressionUUID->"3f5c6149-78f5-49d2-b235-2f635f770fbe", 456 | CellID->307771771], 457 | Cell[2246, 71, 118, 2, 70, "Details",ExpressionUUID->"8a7c4fc4-664d-432a-84af-85214633b843", 458 | CellID->795394057], 459 | Cell[2367, 75, 124, 2, 70, "Details",ExpressionUUID->"8c4c9d86-25e5-40a8-b33d-faba8c6eda13", 460 | CellID->350963985], 461 | Cell[2494, 79, 118, 2, 70, "Details",ExpressionUUID->"d9d482a2-af61-4c47-b791-e9976fd5817a", 462 | CellID->802101], 463 | Cell[2615, 83, 126, 2, 70, "Details",ExpressionUUID->"bd3ebbe3-8e1e-4417-952d-b89ef45759e5", 464 | CellID->509823116], 465 | Cell[2744, 87, 116, 2, 70, "Details",ExpressionUUID->"a9b115b8-999e-4f6b-9ab6-dfef7ed4533a", 466 | CellID->199884516], 467 | Cell[2863, 91, 116, 2, 70, "Details",ExpressionUUID->"10fec028-63dc-4068-b8cf-a22971dda03f", 468 | CellID->463951815], 469 | Cell[2982, 95, 116, 2, 70, "Details",ExpressionUUID->"e73357f6-1c7f-4193-9801-26c8fd348a37", 470 | CellID->8237523], 471 | Cell[3101, 99, 133, 2, 70, "Details",ExpressionUUID->"2471ad6a-517d-41d5-bdd5-bcb5385d57ca", 472 | CellID->813936640], 473 | Cell[3237, 103, 122, 2, 70, "Details",ExpressionUUID->"ee3a67d9-61d9-4dcf-93e9-a77f98665e56", 474 | CellID->240026365] 475 | }, Closed]], 476 | Cell[CellGroupData[{ 477 | Cell[3396, 110, 106, 1, 77, "GuideTitle",ExpressionUUID->"6980d0b3-7286-40ec-9ddc-80918efed683", 478 | CellID->942062912], 479 | Cell[3505, 113, 651, 10, 91, "GuideAbstract",ExpressionUUID->"820c04f5-5abd-4205-9745-51ecdc6b27a2", 480 | CellID->2001916300] 481 | }, Open ]], 482 | Cell[CellGroupData[{ 483 | Cell[4193, 128, 109, 1, 70, "GuideFunctionsSection",ExpressionUUID->"1de4a80a-97ac-4a1d-b44f-56f6719e13b4", 484 | CellID->1866139230], 485 | Cell[4305, 131, 582, 12, 25, "GuideText",ExpressionUUID->"d3f87bea-4ebd-4d86-a58c-22cdcee35bff", 486 | CellID->239214933], 487 | Cell[4890, 145, 102, 1, 26, "GuideDelimiter",ExpressionUUID->"43f99baa-4f53-45a1-a809-78653201b450", 488 | CellID->34259286], 489 | Cell[CellGroupData[{ 490 | Cell[5017, 150, 399, 5, 35, "GuideFunctionsSubsection",ExpressionUUID->"938e4caa-ffbf-4f2a-806c-44e40c767952", 491 | CellID->21187227], 492 | Cell[5419, 157, 598, 12, 25, "GuideText",ExpressionUUID->"44093ec4-38e6-41a1-bbe8-71e04567ce4b", 493 | CellID->389425012], 494 | Cell[6020, 171, 525, 11, 25, "GuideText",ExpressionUUID->"c69c693d-eaaf-42a9-973d-86ed1fffa99e", 495 | CellID->60040460], 496 | Cell[6548, 184, 537, 11, 25, "GuideText",ExpressionUUID->"a3b4a297-3f45-40ff-9118-b46ed6a1870d", 497 | CellID->315460994], 498 | Cell[7088, 197, 581, 11, 25, "GuideText",ExpressionUUID->"3e1f8259-30f6-4f01-8faf-de6c76c12959", 499 | CellID->714047499] 500 | }, Open ]], 501 | Cell[7684, 211, 101, 1, 26, "GuideDelimiter",ExpressionUUID->"15cf65fb-cea5-4df0-b817-e2d9775cbf8e", 502 | CellID->2557100], 503 | Cell[CellGroupData[{ 504 | Cell[7810, 216, 443, 6, 35, "GuideFunctionsSubsection",ExpressionUUID->"c33e3a07-e753-4bcc-879d-fa9131e7dd2e", 505 | CellID->22367995], 506 | Cell[8256, 224, 534, 11, 25, "GuideText",ExpressionUUID->"2c41900f-4c50-47ef-b3e0-ce01dc6d8e1d", 507 | CellID->156450403], 508 | Cell[8793, 237, 535, 11, 25, "GuideText",ExpressionUUID->"e231cb6d-07c2-4467-8cd9-c5d2063b0201", 509 | CellID->541989761] 510 | }, Open ]], 511 | Cell[9343, 251, 99, 1, 26, "GuideDelimiter",ExpressionUUID->"48a76484-0fe8-4bcb-9689-c60ee53d2d04", 512 | CellID->20851], 513 | Cell[CellGroupData[{ 514 | Cell[9467, 256, 237, 3, 35, "GuideFunctionsSubsection",ExpressionUUID->"8eab67d6-9e6e-4439-add7-b4b691bc1d6a", 515 | CellID->32271], 516 | Cell[9707, 261, 472, 10, 25, "GuideText",ExpressionUUID->"6d171900-bd13-4bcc-8233-4d3f4e7637b3", 517 | CellID->203374175], 518 | Cell[10182, 273, 546, 12, 25, "GuideText",ExpressionUUID->"92edd901-f949-4428-abf9-1c5afd2135e0", 519 | CellID->40258340], 520 | Cell[10731, 287, 546, 12, 25, "GuideText",ExpressionUUID->"589214de-ee8a-43fe-829b-c66106db1f05", 521 | CellID->357981387] 522 | }, Open ]], 523 | Cell[11292, 302, 103, 1, 26, "GuideDelimiter",ExpressionUUID->"88cf5639-78ab-403a-b427-4bf46d75fe1e", 524 | CellID->118920049], 525 | Cell[CellGroupData[{ 526 | Cell[11420, 307, 307, 4, 35, "GuideFunctionsSubsection",ExpressionUUID->"e53bf8a9-6124-4a8b-9cdd-76e4cad1f172", 527 | CellID->905744499], 528 | Cell[11730, 313, 557, 12, 25, "GuideText",ExpressionUUID->"f559390c-aa3f-4686-a25b-c2961892b359", 529 | CellID->307539114], 530 | Cell[12290, 327, 583, 11, 25, "GuideText",ExpressionUUID->"672b7afe-e29f-4fe9-93f7-0a83211eff39", 531 | CellID->220455015] 532 | }, Open ]] 533 | }, Open ]], 534 | Cell[CellGroupData[{ 535 | Cell[12922, 344, 117, 1, 72, "GuideTutorialsSection",ExpressionUUID->"43f9e9e9-fd2f-4873-9511-3d12053b5c9a", 536 | CellID->415694126], 537 | Cell[13042, 347, 338, 6, 22, "GuideTutorial",ExpressionUUID->"83863b84-5506-4fc3-aa64-cb8b8ccc5cc9", 538 | CellID->292544750], 539 | Cell[13383, 355, 323, 5, 22, "GuideTutorial",ExpressionUUID->"3d5e654d-1d7c-4665-b6f2-ab80fd62df3b", 540 | CellID->422280156], 541 | Cell[13709, 362, 350, 5, 22, "GuideTutorial",ExpressionUUID->"6594af3c-baef-48df-8764-484836844057", 542 | CellID->740172588], 543 | Cell[14062, 369, 329, 5, 22, "GuideTutorial",ExpressionUUID->"9008c1d0-64ec-4bf2-abe7-5374d3f961c1", 544 | CellID->28768034], 545 | Cell[14394, 376, 352, 6, 38, "GuideTutorial",ExpressionUUID->"deeb6339-128c-40c6-8d27-bab3f8db97a9", 546 | CellID->251143726], 547 | Cell[14749, 384, 346, 5, 22, "GuideTutorial",ExpressionUUID->"74dfac6b-7033-4aa6-bf54-9df81a671201", 548 | CellID->1098419325], 549 | Cell[15098, 391, 390, 7, 38, "GuideTutorial",ExpressionUUID->"158a713d-5e66-40ab-9795-599cb1b40c4c", 550 | CellID->71800016] 551 | }, Open ]], 552 | Cell[CellGroupData[{ 553 | Cell[15525, 403, 117, 1, 72, "GuideMoreAboutSection",ExpressionUUID->"74b0d898-0705-413a-ae21-fe2ee075a701", 554 | CellID->23220180], 555 | Cell[15645, 406, 106, 1, 22, "GuideMoreAbout",ExpressionUUID->"d66255c6-1785-419e-a660-c931e32dccc3", 556 | CellID->1567025153], 557 | Cell[15754, 409, 105, 1, 22, "GuideMoreAbout",ExpressionUUID->"f15f437c-145b-4cd2-913b-803bdd3f83a2", 558 | CellID->252299663] 559 | }, Open ]], 560 | Cell[15874, 413, 124, 1, 72, "GuideRelatedLinksSection",ExpressionUUID->"af0502f5-b6a4-4a12-9d01-9a59efb4664a", 561 | CellID->415694148] 562 | } 563 | ] 564 | *) 565 | 566 | -------------------------------------------------------------------------------- /RhinoLink/Documentation/English/ReferencePages/Symbols/InstallRhinoPlugin.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 11.3' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 158, 7] 13 | NotebookDataLength[ 24532, 609] 14 | NotebookOptionsPosition[ 16173, 439] 15 | NotebookOutlinePosition[ 16856, 464] 16 | CellTagsIndexPosition[ 16777, 459] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | Cell[TextData[{ 22 | "New in: ", 23 | Cell["11.3", "HistoryData", 24 | CellTags->"New",ExpressionUUID->"c15cae6f-ccd7-495c-a0c3-659fae08f10b"], 25 | " | Modified in: ", 26 | Cell[" ", "HistoryData", 27 | CellTags->"Modified",ExpressionUUID->"9abcbcd0-4c55-4442-ad64-e633b1d3f049"], 28 | " | Obsolete in: ", 29 | Cell[" ", "HistoryData", 30 | CellTags->"Obsolete",ExpressionUUID->"c4c7152c-7e94-40dc-b79a-a540cc23270b"], 31 | " | Excised in: ", 32 | Cell[" ", "HistoryData", 33 | CellTags->"Excised",ExpressionUUID->"f3f8a0a5-1298-46de-af2f-0ff9cca0f47f"] 34 | }], "History", 35 | CellChangeTimes->{{3.736869083766487*^9, 3.736869084155842*^9}}, 36 | CellID->1247902091,ExpressionUUID->"09e469a8-2fd2-473b-aa2b-ca98de2735d4"], 37 | 38 | Cell[CellGroupData[{ 39 | 40 | Cell["Categorization", "CategorizationSection", 41 | CellID->1122911449,ExpressionUUID->"54dfee50-f90c-40e8-8344-16f39bb83a28"], 42 | 43 | Cell["Symbol", "Categorization", 44 | CellLabel->"Entity Type", 45 | CellID->686433507,ExpressionUUID->"8f1e5064-88d2-4f46-8487-ec80faca43b1"], 46 | 47 | Cell["RhinoLink", "Categorization", 48 | CellLabel->"Paclet Name", 49 | CellID->605800465,ExpressionUUID->"f060636b-b3c6-4ab6-8102-ec20f9b0dd96"], 50 | 51 | Cell["RhinoLink`", "Categorization", 52 | CellLabel->"Context", 53 | CellID->468444828,ExpressionUUID->"605cffcf-34a2-4002-b972-015f6425db97"], 54 | 55 | Cell["RhinoLink/ref/InstallRhinoPlugin", "Categorization", 56 | CellLabel->"URI",ExpressionUUID->"864c5f0e-7b5d-476b-a7f4-9c517df0e875"] 57 | }, Closed]], 58 | 59 | Cell[CellGroupData[{ 60 | 61 | Cell["Keywords", "KeywordsSection", 62 | CellID->477174294,ExpressionUUID->"78b5faa9-f4db-455d-914f-da1b0dfe0e1a"], 63 | 64 | Cell["XXXX", "Keywords", 65 | CellID->1164421360,ExpressionUUID->"7fde1d03-ce5b-4525-bc3f-419feab4dcc4"] 66 | }, Closed]], 67 | 68 | Cell[CellGroupData[{ 69 | 70 | Cell["Syntax Templates", "TemplatesSection", 71 | CellID->1872225408,ExpressionUUID->"1e0df9ea-661c-468c-bb18-994fa5ce4f26"], 72 | 73 | Cell[BoxData[""], "Template", 74 | CellLabel->"Additional Function Template", 75 | CellID->1562036412,ExpressionUUID->"c0b7f50d-3aca-457c-a780-68e2bd6ce3ad"], 76 | 77 | Cell[BoxData[""], "Template", 78 | CellLabel->"Arguments Pattern", 79 | CellID->158391909,ExpressionUUID->"10ef04cd-c928-4d7d-81a7-d251012195bf"], 80 | 81 | Cell[BoxData[""], "Template", 82 | CellLabel->"Local Variables", 83 | CellID->1360575930,ExpressionUUID->"5cf45bec-2d48-4871-a1f9-fc23e0c94e73"], 84 | 85 | Cell[BoxData[""], "Template", 86 | CellLabel->"Color Equal Signs", 87 | CellID->793782254,ExpressionUUID->"19ad7307-9f34-4e23-9fe2-395b17ad2e27"] 88 | }, Closed]], 89 | 90 | Cell[CellGroupData[{ 91 | 92 | Cell["Details", "DetailsSection", 93 | CellID->307771771,ExpressionUUID->"f87d7b4f-185e-4fdc-a797-7c1902968e05"], 94 | 95 | Cell["XXXX", "Details", 96 | CellLabel->"Lead", 97 | CellID->670882175,ExpressionUUID->"a0c38d6c-62bf-4f6e-993e-4fa28a076ffd"], 98 | 99 | Cell["XXXX", "Details", 100 | CellLabel->"Developers", 101 | CellID->350963985,ExpressionUUID->"a4a96705-0500-443f-a79a-b85818c1d77d"], 102 | 103 | Cell["XXXX", "Details", 104 | CellLabel->"Authors", 105 | CellID->8391405,ExpressionUUID->"1a366f03-c269-4d31-a190-dc9b26c66827"], 106 | 107 | Cell["XXXX", "Details", 108 | CellLabel->"Feature Name", 109 | CellID->3610269,ExpressionUUID->"6f61638f-137d-43b6-810b-55f87341a0ac"], 110 | 111 | Cell["XXXX", "Details", 112 | CellLabel->"QA", 113 | CellID->401364205,ExpressionUUID->"485e19fb-76e7-46e0-91cb-467de519cf39"], 114 | 115 | Cell["XXXX", "Details", 116 | CellLabel->"DA", 117 | CellID->350204745,ExpressionUUID->"9b80b45a-937d-4ec3-bd68-80e21d3d2474"], 118 | 119 | Cell["XXXX", "Details", 120 | CellLabel->"Docs", 121 | CellID->732958810,ExpressionUUID->"578d927d-59ae-4c3e-8c59-546362c13be5"], 122 | 123 | Cell["XXXX", "Details", 124 | CellLabel->"Features Page Notes", 125 | CellID->222905350,ExpressionUUID->"dd5825f0-5879-4334-8c86-59f91d33afc8"], 126 | 127 | Cell["XXXX", "Details", 128 | CellLabel->"Comments", 129 | CellID->240026365,ExpressionUUID->"005d4933-5909-4f1e-b3b9-93134c7fab6b"] 130 | }, Closed]], 131 | 132 | Cell[CellGroupData[{ 133 | 134 | Cell["InstallRhinoPlugin", "ObjectName", 135 | CellID->1224892054,ExpressionUUID->"d0bce85c-1e04-44ca-a681-a675d19d607b"], 136 | 137 | Cell[TextData[{ 138 | Cell[" ", "ModInfo",ExpressionUUID->"c74f5959-42de-48ed-9e8f-d273f40f1429"], 139 | Cell[BoxData[ 140 | RowBox[{"InstallRhinoPlugin", "[", "]"}]], "InlineFormula",ExpressionUUID-> 141 | "d5ecd026-ff6a-4e03-ac7b-294217b8d41d"], 142 | " \[LineSeparator]install components for the RhinoLink plugin in Rhino and \ 143 | Mathematica (or Wolfram Desktop)" 144 | }], "Usage", 145 | CellChangeTimes->{{3.7367959316113*^9, 3.736795955766917*^9}, { 146 | 3.7367960323339987`*^9, 3.7367960736511297`*^9}}, 147 | CellID->982511436,ExpressionUUID->"897ab845-442c-4fb3-bfdb-7af849a70ed8"], 148 | 149 | Cell[TextData[{ 150 | "Evaluate ", 151 | Cell[BoxData[ 152 | RowBox[{ 153 | ButtonBox["InstallRhinoPlugin", 154 | BaseStyle->"Link", 155 | ButtonData->"paclet:RhinoLink/ref/InstallRhinoPlugin"], "[", "]"}]], 156 | "InlineFormula",ExpressionUUID->"dea92ab4-f8ca-4baa-88a8-21081f026bfa"], 157 | " once after installing or updating the RhinoLink paclet." 158 | }], "Notes", 159 | CellChangeTimes->{{3.736796080998013*^9, 3.7367961442595463`*^9}, { 160 | 3.736796371459187*^9, 3.736796373409511*^9}, {3.737377108678939*^9, 161 | 3.7373771088524837`*^9}}, 162 | CellID->1067943069,ExpressionUUID->"aa3fdaec-dfb7-4648-aef1-ed9bef662480"], 163 | 164 | Cell["\<\ 165 | The typical sequence for installing the RhinoLink package and preparing it \ 166 | for use is:\ 167 | \>", "Notes", 168 | CellChangeTimes->{{3.7367961500181217`*^9, 3.7367961532409487`*^9}, { 169 | 3.7367962736625443`*^9, 3.736796283788414*^9}, {3.7367963861049347`*^9, 170 | 3.7367963975207033`*^9}, {3.736847754511257*^9, 3.736847755031502*^9}, 171 | 3.7368682131818037`*^9, 3.736868264586338*^9}, 172 | CellID->2127886850,ExpressionUUID->"847150bd-3156-4caf-a95d-cfdeb566a8dc"], 173 | 174 | Cell[BoxData[ 175 | RowBox[{"PacletInstall", "[", "\"\\"", 176 | "]"}]], "Input", 177 | CellChangeTimes->{{3.7367962387981167`*^9, 3.736796266692706*^9}, { 178 | 3.7367962984208727`*^9, 3.736796304923842*^9}, {3.736847770437315*^9, 179 | 3.736847786973154*^9}}, 180 | CellID->1225637569,ExpressionUUID->"1edd0d15-400c-4243-bd71-1326f17d4a73"], 181 | 182 | Cell[BoxData[ 183 | RowBox[{"<<", "RhinoLink`"}]], "Input", 184 | CellChangeTimes->{{3.7367962387981167`*^9, 3.736796266692706*^9}, { 185 | 3.7367962984208727`*^9, 3.736796304923842*^9}, {3.736847770437315*^9, 186 | 3.7368477889529133`*^9}}, 187 | CellID->520011894,ExpressionUUID->"113639a8-c578-4ff8-ad12-027a3834265c"], 188 | 189 | Cell[BoxData[ 190 | RowBox[{"InstallRhinoPlugin", "[", "]"}]], "Input", 191 | CellChangeTimes->{{3.7367962387981167`*^9, 3.736796266692706*^9}, { 192 | 3.7367962984208727`*^9, 3.736796304923842*^9}, {3.736847770437315*^9, 193 | 3.7368477889529133`*^9}}, 194 | CellID->1527117424,ExpressionUUID->"2ac21966-091b-455f-a5c6-f964e82c6b46"], 195 | 196 | Cell["\<\ 197 | The typical sequence for updating the RhinoLink package and preparing it for \ 198 | use is:\ 199 | \>", "Notes", 200 | CellChangeTimes->{{3.7367961500181217`*^9, 3.7367961532409487`*^9}, { 201 | 3.7367962736625443`*^9, 3.736796283788414*^9}, {3.7367963861049347`*^9, 202 | 3.7367963975207033`*^9}, {3.736847754511257*^9, 3.736847755031502*^9}, 203 | 3.7368682131818037`*^9, {3.736868264586338*^9, 3.7368682735397215`*^9}}, 204 | CellID->48625444,ExpressionUUID->"41e94bcd-ba37-42ad-a4e2-8ed0c6786a31"], 205 | 206 | Cell[BoxData[ 207 | RowBox[{"PacletUpdate", "[", "\"\\"", 208 | "]"}]], "Input", 209 | CellChangeTimes->{{3.7367962387981167`*^9, 3.736796266692706*^9}, { 210 | 3.7367962984208727`*^9, 3.736796304923842*^9}, {3.736847770437315*^9, 211 | 3.736847786973154*^9}, {3.7368682424635825`*^9, 3.7368682444304247`*^9}}, 212 | CellID->3105516,ExpressionUUID->"f07cb439-7ea6-4337-a457-9e0abb127846"], 213 | 214 | Cell[BoxData[ 215 | RowBox[{"<<", "RhinoLink`"}]], "Input", 216 | CellChangeTimes->{{3.7367962387981167`*^9, 3.736796266692706*^9}, { 217 | 3.7367962984208727`*^9, 3.736796304923842*^9}, {3.736847770437315*^9, 218 | 3.7368477889529133`*^9}}, 219 | CellID->22556601,ExpressionUUID->"d458d5e1-783c-49dd-ba09-39bc42ff373f"], 220 | 221 | Cell[BoxData[ 222 | RowBox[{"InstallRhinoPlugin", "[", "]"}]], "Input", 223 | CellChangeTimes->{{3.7367962387981167`*^9, 3.736796266692706*^9}, { 224 | 3.7367962984208727`*^9, 3.736796304923842*^9}, {3.736847770437315*^9, 225 | 3.7368477889529133`*^9}}, 226 | CellID->50539950,ExpressionUUID->"b497b679-05b0-4995-864e-eb37d5abb878"] 227 | }, Open ]], 228 | 229 | Cell[CellGroupData[{ 230 | 231 | Cell["Tutorials", "TutorialsSection", 232 | CellID->250839057,ExpressionUUID->"b08fb158-c43e-482c-869c-3535615a5915"], 233 | 234 | Cell[TextData[ButtonBox["Use NETLink to Examine and Create Objects in Rhino", 235 | BaseStyle->"Link", 236 | ButtonData-> 237 | "paclet:RhinoLink/tutorial/ManualInteractionWithRhinoObjects"]], "Tutorials", 238 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 239 | CellID->292544750,ExpressionUUID->"26a77af2-2e3c-4470-a0b7-d1ea5f6485ef"], 240 | 241 | Cell[TextData[ButtonBox["Operate on Wolfram Language Meshes Using Rhino", 242 | BaseStyle->"Link", 243 | ButtonData-> 244 | "paclet:RhinoLink/tutorial/UsingRhinoMeshOperations"]], "Tutorials", 245 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 246 | CellID->422280156,ExpressionUUID->"8086b9c9-918d-46fd-8617-689ae01ec058"], 247 | 248 | Cell[TextData[ButtonBox["Control a Parametric Surface in Rhino with a \ 249 | Manipulate Interface in Mathematica", 250 | BaseStyle->"Link", 251 | ButtonData->"paclet:RhinoLink/tutorial/InteractiveSurface"]], "Tutorials", 252 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 253 | CellID->740172588,ExpressionUUID->"b30110b3-d78f-4fe5-a6ac-f647707a87f3"], 254 | 255 | Cell[TextData[ButtonBox["Create Box Structures in Rhino with an Interface in \ 256 | Mathematica", 257 | BaseStyle->"Link", 258 | ButtonData->"paclet:RhinoLink/tutorial/BoxDesignWidget"]], "Tutorials", 259 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 260 | CellID->28768034,ExpressionUUID->"d317dd14-8d58-4405-8835-70fc277c8c2b"], 261 | 262 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Translates \ 263 | Graphics3D Output to Rhino Meshes", 264 | BaseStyle->"Link", 265 | ButtonData->"paclet:RhinoLink/tutorial/Graphics3DComponent"]], "Tutorials", 266 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 267 | CellID->251143726,ExpressionUUID->"533993f4-c4df-4200-9257-4ce1e4417ee2"], 268 | 269 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Makes NURBS \ 270 | Surfaces from U-V Point Grids", 271 | BaseStyle->"Link", 272 | ButtonData->"paclet:RhinoLink/tutorial/UVSurfaceComponent"]], "Tutorials", 273 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 274 | CellID->1098419325,ExpressionUUID->"ac5625d4-a160-472c-939f-a43eaab54866"], 275 | 276 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Covers a Surface \ 277 | of Revolution with Phyllotaxically-Arranged Points", 278 | BaseStyle->"Link", 279 | ButtonData-> 280 | "paclet:RhinoLink/tutorial/SpiralPhyllotaxicSurfaceComponent"]], "Tutorials", 281 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 282 | CellID->71800016,ExpressionUUID->"24be50b5-3fc9-42da-a27d-3b5c3c6a6b5b"] 283 | }, Open ]], 284 | 285 | Cell[CellGroupData[{ 286 | 287 | Cell["Related Demonstrations", "RelatedDemonstrationsSection", 288 | CellID->1268215905,ExpressionUUID->"467da3ab-64ee-49cd-8034-536f935a0b16"], 289 | 290 | Cell["XXXX", "RelatedDemonstrations", 291 | CellID->1129518860,ExpressionUUID->"66badb51-9de9-4846-bff9-6f7847b2a124"] 292 | }, Open ]], 293 | 294 | Cell[CellGroupData[{ 295 | 296 | Cell["Related Links", "RelatedLinksSection", 297 | CellID->1584193535,ExpressionUUID->"043cdf78-9656-4a89-a584-cde222684499"], 298 | 299 | Cell["XXXX", "RelatedLinks", 300 | CellID->1038487239,ExpressionUUID->"9d6a0bc8-f0d1-4697-87a9-8db4673453c3"] 301 | }, Open ]], 302 | 303 | Cell[CellGroupData[{ 304 | 305 | Cell["See Also", "SeeAlsoSection", 306 | CellID->1255426704,ExpressionUUID->"c9c0f0ad-cf87-457a-af40-b9e7205be9df"], 307 | 308 | Cell[TextData[{ 309 | Cell[BoxData[ 310 | ButtonBox["RhinoDocObjects", 311 | BaseStyle->"Link", 312 | ButtonData->"paclet:RhinoLink/ref/RhinoDocObjects"]], "InlineFormula", 313 | ExpressionUUID->"4a3980db-68e2-4920-afdb-fe5d3bbfd0ab"], 314 | " \[EmptyVerySmallSquare] ", 315 | Cell[BoxData[ 316 | ButtonBox["RhinoShow", 317 | BaseStyle->"Link", 318 | ButtonData->"paclet:RhinoLink/ref/RhinoShow"]], "InlineFormula", 319 | ExpressionUUID->"9711c77e-28d7-4244-b8ee-f4e2b092ba96"], 320 | " \[EmptyVerySmallSquare] ", 321 | Cell[BoxData[ 322 | ButtonBox["RhinoMeshUnion", 323 | BaseStyle->"Link", 324 | ButtonData->"paclet:RhinoLink/ref/RhinoMeshUnion"]], "InlineFormula", 325 | ExpressionUUID->"f0c16a56-32f8-411a-99d8-c533b5b7ce6d"], 326 | " \[EmptyVerySmallSquare] ", 327 | Cell[BoxData[ 328 | ButtonBox["GHDeploy", 329 | BaseStyle->"Link", 330 | ButtonData->"paclet:RhinoLink/ref/GHDeploy"]], "InlineFormula", 331 | ExpressionUUID->"7cc6433d-1532-4648-a9a1-bd7e2a8e91cf"] 332 | }], "SeeAlso", 333 | CellChangeTimes->{{3.7368785030816927`*^9, 3.7368785344706945`*^9}, { 334 | 3.737377121434026*^9, 3.737377125570698*^9}}, 335 | CellID->929782353,ExpressionUUID->"ffbab574-3fe4-4d48-9f3b-12520c10cc7b"] 336 | }, Open ]], 337 | 338 | Cell[CellGroupData[{ 339 | 340 | Cell["More About", "MoreAboutSection", 341 | CellID->38303248,ExpressionUUID->"6e5dedad-376f-4087-97f3-8e70b7a11dee"], 342 | 343 | Cell["XXXX", "MoreAbout", 344 | CellID->1665078683,ExpressionUUID->"c669883d-b4d1-4267-a114-2fef935734a9"] 345 | }, Open ]], 346 | 347 | Cell[BoxData[ 348 | InterpretationBox[GridBox[{ 349 | { 350 | StyleBox["Examples", "PrimaryExamplesSection"], 351 | ButtonBox[ 352 | RowBox[{ 353 | RowBox[{"More", " ", "Examples"}], " ", "\[RightTriangle]"}], 354 | BaseStyle->"ExtendedExamplesLink", 355 | ButtonData:>"ExtendedExamples"]} 356 | }], 357 | $Line = 0; Null]], "PrimaryExamplesSection", 358 | CellID->880084151,ExpressionUUID->"0d469272-4abd-4678-9e30-e44a2bb26abe"], 359 | 360 | Cell[CellGroupData[{ 361 | 362 | Cell["More Examples", "ExtendedExamplesSection", 363 | CellTags->"ExtendedExamples", 364 | CellID->1854448968,ExpressionUUID->"82d38d1b-71ff-4c8d-9614-234988a7c832"], 365 | 366 | Cell[BoxData[ 367 | InterpretationBox[Cell[ 368 | "Scope", "ExampleSection",ExpressionUUID-> 369 | "505fcb24-d43f-4883-89c4-eeb7bec47756"], 370 | $Line = 0; Null]], "ExampleSection", 371 | CellID->1293636265,ExpressionUUID->"b5bd4e16-5ced-4680-a558-29eb8b95622c"], 372 | 373 | Cell[BoxData[ 374 | InterpretationBox[Cell[ 375 | "Generalizations & Extensions", "ExampleSection",ExpressionUUID-> 376 | "9c6b6a71-1ef2-45c2-b2c1-57d069af8ac3"], 377 | $Line = 0; Null]], "ExampleSection", 378 | CellID->1020263627,ExpressionUUID->"d4e9a789-12e6-4c9b-b6e4-dae2eef3589e"], 379 | 380 | Cell[CellGroupData[{ 381 | 382 | Cell[BoxData[ 383 | InterpretationBox[Cell[ 384 | "Options", "ExampleSection",ExpressionUUID-> 385 | "40645a85-8131-48e7-8ffe-1f719572acc9"], 386 | $Line = 0; Null]], "ExampleSection", 387 | CellID->2061341341,ExpressionUUID->"04711e67-121c-4e24-842a-74996205ba77"], 388 | 389 | Cell[BoxData[ 390 | InterpretationBox[Cell[ 391 | "XXXX", "ExampleSubsection",ExpressionUUID-> 392 | "27de688d-a779-4382-8f94-170b3a94eafc"], 393 | $Line = 0; Null]], "ExampleSubsection", 394 | CellID->1757724783,ExpressionUUID->"97b0e728-b7f1-421c-9bed-a8eeced36803"], 395 | 396 | Cell[BoxData[ 397 | InterpretationBox[Cell[ 398 | "XXXX", "ExampleSubsection",ExpressionUUID-> 399 | "6db43840-5e75-46c7-8027-ec81a667df2c"], 400 | $Line = 0; Null]], "ExampleSubsection", 401 | CellID->1295379749,ExpressionUUID->"303ebeb4-cfec-4fe5-99b7-238e7106ed90"] 402 | }, Closed]], 403 | 404 | Cell[BoxData[ 405 | InterpretationBox[Cell[ 406 | "Applications", "ExampleSection",ExpressionUUID-> 407 | "b1347995-98d4-48c8-a20d-2789c7d3d5ba"], 408 | $Line = 0; Null]], "ExampleSection", 409 | CellID->258228157,ExpressionUUID->"8ee2075b-135a-4e17-a1bc-12781a96ea4f"], 410 | 411 | Cell[BoxData[ 412 | InterpretationBox[Cell[ 413 | "Properties & Relations", "ExampleSection",ExpressionUUID-> 414 | "50386d0d-a7c9-4f3a-bb57-7f002364935a"], 415 | $Line = 0; Null]], "ExampleSection", 416 | CellID->2123667759,ExpressionUUID->"11193218-dbb0-49d2-806d-71bf73c82749"], 417 | 418 | Cell[BoxData[ 419 | InterpretationBox[Cell[ 420 | "Possible Issues", "ExampleSection",ExpressionUUID-> 421 | "f15e75ce-288a-4eb1-b929-8379f32e898c"], 422 | $Line = 0; Null]], "ExampleSection", 423 | CellID->1305812373,ExpressionUUID->"df879aed-91d2-4942-9aef-c18a0dbb91e0"], 424 | 425 | Cell[BoxData[ 426 | InterpretationBox[Cell[ 427 | "Interactive Examples", "ExampleSection",ExpressionUUID-> 428 | "4eb81a95-5631-439b-81ed-69243c78d0e0"], 429 | $Line = 0; Null]], "ExampleSection", 430 | CellID->1653164318,ExpressionUUID->"6dac7eb8-35a0-4152-8a3e-ed6632acec3f"], 431 | 432 | Cell[BoxData[ 433 | InterpretationBox[Cell[ 434 | "Neat Examples", "ExampleSection",ExpressionUUID-> 435 | "f66f355f-1a89-427b-94d4-6e20c6736f28"], 436 | $Line = 0; Null]], "ExampleSection", 437 | CellID->589267740,ExpressionUUID->"c69b9d72-06d9-4a1c-b89b-3aecbf413bc1"] 438 | }, Open ]] 439 | }, 440 | WindowSize->{700, 770}, 441 | WindowMargins->{{4, Automatic}, {Automatic, 0}}, 442 | CellContext->"Global`", 443 | FrontEndVersion->"11.3 for Mac OS X x86 (32-bit, 64-bit Kernel) (March 5, \ 444 | 2018)", 445 | StyleDefinitions->FrontEnd`FileName[{"Wolfram"}, "FunctionPageStyles.nb", 446 | CharacterEncoding -> "UTF-8"] 447 | ] 448 | (* End of Notebook Content *) 449 | 450 | (* Internal cache information *) 451 | (*CellTagsOutline 452 | CellTagsIndex->{ 453 | "ExtendedExamples"->{ 454 | Cell[13428, 361, 155, 2, 56, "ExtendedExamplesSection",ExpressionUUID->"82d38d1b-71ff-4c8d-9614-234988a7c832", 455 | CellTags->"ExtendedExamples", 456 | CellID->1854448968]} 457 | } 458 | *) 459 | (*CellTagsIndex 460 | CellTagsIndex->{ 461 | {"ExtendedExamples", 16583, 452} 462 | } 463 | *) 464 | (*NotebookFileOutline 465 | Notebook[{ 466 | Cell[558, 20, 667, 15, 24, "History",ExpressionUUID->"09e469a8-2fd2-473b-aa2b-ca98de2735d4", 467 | CellID->1247902091], 468 | Cell[CellGroupData[{ 469 | Cell[1250, 39, 123, 1, 29, "CategorizationSection",ExpressionUUID->"54dfee50-f90c-40e8-8344-16f39bb83a28", 470 | CellID->1122911449], 471 | Cell[1376, 42, 134, 2, 70, "Categorization",ExpressionUUID->"8f1e5064-88d2-4f46-8487-ec80faca43b1", 472 | CellID->686433507], 473 | Cell[1513, 46, 137, 2, 70, "Categorization",ExpressionUUID->"f060636b-b3c6-4ab6-8102-ec20f9b0dd96", 474 | CellID->605800465], 475 | Cell[1653, 50, 134, 2, 70, "Categorization",ExpressionUUID->"605cffcf-34a2-4002-b972-015f6425db97", 476 | CellID->468444828], 477 | Cell[1790, 54, 132, 1, 70, "Categorization",ExpressionUUID->"864c5f0e-7b5d-476b-a7f4-9c517df0e875"] 478 | }, Closed]], 479 | Cell[CellGroupData[{ 480 | Cell[1959, 60, 110, 1, 19, "KeywordsSection",ExpressionUUID->"78b5faa9-f4db-455d-914f-da1b0dfe0e1a", 481 | CellID->477174294], 482 | Cell[2072, 63, 100, 1, 70, "Keywords",ExpressionUUID->"7fde1d03-ce5b-4525-bc3f-419feab4dcc4", 483 | CellID->1164421360] 484 | }, Closed]], 485 | Cell[CellGroupData[{ 486 | Cell[2209, 69, 120, 1, 19, "TemplatesSection",ExpressionUUID->"1e0df9ea-661c-468c-bb18-994fa5ce4f26", 487 | CellID->1872225408], 488 | Cell[2332, 72, 149, 2, 70, "Template",ExpressionUUID->"c0b7f50d-3aca-457c-a780-68e2bd6ce3ad", 489 | CellID->1562036412], 490 | Cell[2484, 76, 137, 2, 70, "Template",ExpressionUUID->"10ef04cd-c928-4d7d-81a7-d251012195bf", 491 | CellID->158391909], 492 | Cell[2624, 80, 136, 2, 70, "Template",ExpressionUUID->"5cf45bec-2d48-4871-a1f9-fc23e0c94e73", 493 | CellID->1360575930], 494 | Cell[2763, 84, 137, 2, 70, "Template",ExpressionUUID->"19ad7307-9f34-4e23-9fe2-395b17ad2e27", 495 | CellID->793782254] 496 | }, Closed]], 497 | Cell[CellGroupData[{ 498 | Cell[2937, 91, 108, 1, 19, "DetailsSection",ExpressionUUID->"f87d7b4f-185e-4fdc-a797-7c1902968e05", 499 | CellID->307771771], 500 | Cell[3048, 94, 118, 2, 70, "Details",ExpressionUUID->"a0c38d6c-62bf-4f6e-993e-4fa28a076ffd", 501 | CellID->670882175], 502 | Cell[3169, 98, 124, 2, 70, "Details",ExpressionUUID->"a4a96705-0500-443f-a79a-b85818c1d77d", 503 | CellID->350963985], 504 | Cell[3296, 102, 119, 2, 70, "Details",ExpressionUUID->"1a366f03-c269-4d31-a190-dc9b26c66827", 505 | CellID->8391405], 506 | Cell[3418, 106, 124, 2, 70, "Details",ExpressionUUID->"6f61638f-137d-43b6-810b-55f87341a0ac", 507 | CellID->3610269], 508 | Cell[3545, 110, 116, 2, 70, "Details",ExpressionUUID->"485e19fb-76e7-46e0-91cb-467de519cf39", 509 | CellID->401364205], 510 | Cell[3664, 114, 116, 2, 70, "Details",ExpressionUUID->"9b80b45a-937d-4ec3-bd68-80e21d3d2474", 511 | CellID->350204745], 512 | Cell[3783, 118, 118, 2, 70, "Details",ExpressionUUID->"578d927d-59ae-4c3e-8c59-546362c13be5", 513 | CellID->732958810], 514 | Cell[3904, 122, 133, 2, 70, "Details",ExpressionUUID->"dd5825f0-5879-4334-8c86-59f91d33afc8", 515 | CellID->222905350], 516 | Cell[4040, 126, 122, 2, 70, "Details",ExpressionUUID->"005d4933-5909-4f1e-b3b9-93134c7fab6b", 517 | CellID->240026365] 518 | }, Closed]], 519 | Cell[CellGroupData[{ 520 | Cell[4199, 133, 116, 1, 63, "ObjectName",ExpressionUUID->"d0bce85c-1e04-44ca-a681-a675d19d607b", 521 | CellID->1224892054], 522 | Cell[4318, 136, 548, 10, 76, "Usage",ExpressionUUID->"897ab845-442c-4fb3-bfdb-7af849a70ed8", 523 | CellID->982511436], 524 | Cell[4869, 148, 579, 13, 28, "Notes",ExpressionUUID->"aa3fdaec-dfb7-4648-aef1-ed9bef662480", 525 | CellID->1067943069], 526 | Cell[5451, 163, 461, 8, 25, "Notes",ExpressionUUID->"847150bd-3156-4caf-a95d-cfdeb566a8dc", 527 | CellID->2127886850], 528 | Cell[5915, 173, 343, 6, 27, "Input",ExpressionUUID->"1edd0d15-400c-4243-bd71-1326f17d4a73", 529 | CellID->1225637569], 530 | Cell[6261, 181, 299, 5, 27, "Input",ExpressionUUID->"113639a8-c578-4ff8-ad12-027a3834265c", 531 | CellID->520011894], 532 | Cell[6563, 188, 312, 5, 27, "Input",ExpressionUUID->"2ac21966-091b-455f-a5c6-f964e82c6b46", 533 | CellID->1527117424], 534 | Cell[6878, 195, 483, 8, 25, "Notes",ExpressionUUID->"41e94bcd-ba37-42ad-a4e2-8ed0c6786a31", 535 | CellID->48625444], 536 | Cell[7364, 205, 389, 6, 27, "Input",ExpressionUUID->"f07cb439-7ea6-4337-a457-9e0abb127846", 537 | CellID->3105516], 538 | Cell[7756, 213, 298, 5, 27, "Input",ExpressionUUID->"d458d5e1-783c-49dd-ba09-39bc42ff373f", 539 | CellID->22556601], 540 | Cell[8057, 220, 310, 5, 27, "Input",ExpressionUUID->"b497b679-05b0-4995-864e-eb37d5abb878", 541 | CellID->50539950] 542 | }, Open ]], 543 | Cell[CellGroupData[{ 544 | Cell[8404, 230, 112, 1, 44, "TutorialsSection",ExpressionUUID->"b08fb158-c43e-482c-869c-3535615a5915", 545 | CellID->250839057], 546 | Cell[8519, 233, 332, 5, 16, "Tutorials",ExpressionUUID->"26a77af2-2e3c-4470-a0b7-d1ea5f6485ef", 547 | CellID->292544750], 548 | Cell[8854, 240, 319, 5, 16, "Tutorials",ExpressionUUID->"8086b9c9-918d-46fd-8617-689ae01ec058", 549 | CellID->422280156], 550 | Cell[9176, 247, 346, 5, 16, "Tutorials",ExpressionUUID->"b30110b3-d78f-4fe5-a6ac-f647707a87f3", 551 | CellID->740172588], 552 | Cell[9525, 254, 325, 5, 16, "Tutorials",ExpressionUUID->"d317dd14-8d58-4405-8835-70fc277c8c2b", 553 | CellID->28768034], 554 | Cell[9853, 261, 345, 5, 16, "Tutorials",ExpressionUUID->"533993f4-c4df-4200-9257-4ce1e4417ee2", 555 | CellID->251143726], 556 | Cell[10201, 268, 342, 5, 16, "Tutorials",ExpressionUUID->"ac5625d4-a160-472c-939f-a43eaab54866", 557 | CellID->1098419325], 558 | Cell[10546, 275, 384, 6, 16, "Tutorials",ExpressionUUID->"24be50b5-3fc9-42da-a27d-3b5c3c6a6b5b", 559 | CellID->71800016] 560 | }, Open ]], 561 | Cell[CellGroupData[{ 562 | Cell[10967, 286, 138, 1, 31, "RelatedDemonstrationsSection",ExpressionUUID->"467da3ab-64ee-49cd-8034-536f935a0b16", 563 | CellID->1268215905], 564 | Cell[11108, 289, 113, 1, 16, "RelatedDemonstrations",ExpressionUUID->"66badb51-9de9-4846-bff9-6f7847b2a124", 565 | CellID->1129518860] 566 | }, Open ]], 567 | Cell[CellGroupData[{ 568 | Cell[11258, 295, 120, 1, 31, "RelatedLinksSection",ExpressionUUID->"043cdf78-9656-4a89-a584-cde222684499", 569 | CellID->1584193535], 570 | Cell[11381, 298, 104, 1, 16, "RelatedLinks",ExpressionUUID->"9d6a0bc8-f0d1-4697-87a9-8db4673453c3", 571 | CellID->1038487239] 572 | }, Open ]], 573 | Cell[CellGroupData[{ 574 | Cell[11522, 304, 110, 1, 31, "SeeAlsoSection",ExpressionUUID->"c9c0f0ad-cf87-457a-af40-b9e7205be9df", 575 | CellID->1255426704], 576 | Cell[11635, 307, 1089, 27, 22, "SeeAlso",ExpressionUUID->"ffbab574-3fe4-4d48-9f3b-12520c10cc7b", 577 | CellID->929782353] 578 | }, Open ]], 579 | Cell[CellGroupData[{ 580 | Cell[12761, 339, 112, 1, 31, "MoreAboutSection",ExpressionUUID->"6e5dedad-376f-4087-97f3-8e70b7a11dee", 581 | CellID->38303248], 582 | Cell[12876, 342, 101, 1, 16, "MoreAbout",ExpressionUUID->"c669883d-b4d1-4267-a114-2fef935734a9", 583 | CellID->1665078683] 584 | }, Open ]], 585 | Cell[12992, 346, 411, 11, 70, "PrimaryExamplesSection",ExpressionUUID->"0d469272-4abd-4678-9e30-e44a2bb26abe", 586 | CellID->880084151], 587 | Cell[CellGroupData[{ 588 | Cell[13428, 361, 155, 2, 56, "ExtendedExamplesSection",ExpressionUUID->"82d38d1b-71ff-4c8d-9614-234988a7c832", 589 | CellTags->"ExtendedExamples", 590 | CellID->1854448968], 591 | Cell[13586, 365, 242, 5, 33, "ExampleSection",ExpressionUUID->"b5bd4e16-5ced-4680-a558-29eb8b95622c", 592 | CellID->1293636265], 593 | Cell[13831, 372, 265, 5, 21, "ExampleSection",ExpressionUUID->"d4e9a789-12e6-4c9b-b6e4-dae2eef3589e", 594 | CellID->1020263627], 595 | Cell[CellGroupData[{ 596 | Cell[14121, 381, 244, 5, 21, "ExampleSection",ExpressionUUID->"04711e67-121c-4e24-842a-74996205ba77", 597 | CellID->2061341341], 598 | Cell[14368, 388, 247, 5, 70, "ExampleSubsection",ExpressionUUID->"97b0e728-b7f1-421c-9bed-a8eeced36803", 599 | CellID->1757724783], 600 | Cell[14618, 395, 247, 5, 70, "ExampleSubsection",ExpressionUUID->"303ebeb4-cfec-4fe5-99b7-238e7106ed90", 601 | CellID->1295379749] 602 | }, Closed]], 603 | Cell[14880, 403, 248, 5, 21, "ExampleSection",ExpressionUUID->"8ee2075b-135a-4e17-a1bc-12781a96ea4f", 604 | CellID->258228157], 605 | Cell[15131, 410, 259, 5, 21, "ExampleSection",ExpressionUUID->"11193218-dbb0-49d2-806d-71bf73c82749", 606 | CellID->2123667759], 607 | Cell[15393, 417, 252, 5, 21, "ExampleSection",ExpressionUUID->"df879aed-91d2-4942-9aef-c18a0dbb91e0", 608 | CellID->1305812373], 609 | Cell[15648, 424, 257, 5, 21, "ExampleSection",ExpressionUUID->"6dac7eb8-35a0-4152-8a3e-ed6632acec3f", 610 | CellID->1653164318], 611 | Cell[15908, 431, 249, 5, 21, "ExampleSection",ExpressionUUID->"c69b9d72-06d9-4a1c-b89b-3aecbf413bc1", 612 | CellID->589267740] 613 | }, Open ]] 614 | } 615 | ] 616 | *) 617 | 618 | -------------------------------------------------------------------------------- /RhinoLink/Documentation/English/ReferencePages/Symbols/ToRhino.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 11.3' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 158, 7] 13 | NotebookDataLength[ 23925, 616] 14 | NotebookOptionsPosition[ 15679, 444] 15 | NotebookOutlinePosition[ 16362, 469] 16 | CellTagsIndexPosition[ 16283, 464] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | Cell[TextData[{ 22 | "New in: ", 23 | Cell["11.3", "HistoryData", 24 | CellTags->"New",ExpressionUUID->"6e18f2c6-2f8d-4616-83b6-ac7480eb0096"], 25 | " | Modified in: ", 26 | Cell[" ", "HistoryData", 27 | CellTags->"Modified",ExpressionUUID->"313e3ae6-7bbc-4c01-b6d3-f1432369d963"], 28 | " | Obsolete in: ", 29 | Cell[" ", "HistoryData", 30 | CellTags->"Obsolete",ExpressionUUID->"a349998b-f14b-44e7-ab0a-092f61db668a"], 31 | " | Excised in: ", 32 | Cell[" ", "HistoryData", 33 | CellTags->"Excised",ExpressionUUID->"a18078f1-b6d3-47d4-9bc9-a965c1f49e37"] 34 | }], "History", 35 | CellChangeTimes->{{3.736869014266842*^9, 3.736869014626008*^9}}, 36 | CellID->1247902091,ExpressionUUID->"21e47394-5f66-49da-a50c-0d3a89f0c0b7"], 37 | 38 | Cell[CellGroupData[{ 39 | 40 | Cell["Categorization", "CategorizationSection", 41 | CellID->1122911449,ExpressionUUID->"20a90e94-b787-4dc7-a119-d7eec2289ef6"], 42 | 43 | Cell["Symbol", "Categorization", 44 | CellLabel->"Entity Type", 45 | CellID->686433507,ExpressionUUID->"942141c4-613a-45c6-927b-e368a3fb0637"], 46 | 47 | Cell["RhinoLink", "Categorization", 48 | CellLabel->"Paclet Name", 49 | CellID->605800465,ExpressionUUID->"2d06a2b7-9c40-45c0-b194-3b26ad7c0cae"], 50 | 51 | Cell["RhinoLink`", "Categorization", 52 | CellLabel->"Context", 53 | CellID->468444828,ExpressionUUID->"a361656b-c3da-48fd-bf35-fd3d3d11f8f5"], 54 | 55 | Cell["RhinoLink/ref/ToRhino", "Categorization", 56 | CellLabel->"URI",ExpressionUUID->"9ccb2e16-3503-4796-be3a-cf060de7b550"] 57 | }, Closed]], 58 | 59 | Cell[CellGroupData[{ 60 | 61 | Cell["Keywords", "KeywordsSection", 62 | CellID->477174294,ExpressionUUID->"ae019075-8249-46c6-b7de-7c0c328888f4"], 63 | 64 | Cell["XXXX", "Keywords", 65 | CellID->1164421360,ExpressionUUID->"55ed7404-376c-4cf7-ba97-c16723721b94"] 66 | }, Closed]], 67 | 68 | Cell[CellGroupData[{ 69 | 70 | Cell["Syntax Templates", "TemplatesSection", 71 | CellID->1872225408,ExpressionUUID->"a5266c32-9cba-4ba8-96f6-0a9db55951d8"], 72 | 73 | Cell[BoxData[""], "Template", 74 | CellLabel->"Additional Function Template", 75 | CellID->1562036412,ExpressionUUID->"3e446562-83b2-4708-8057-6322e062a869"], 76 | 77 | Cell[BoxData[""], "Template", 78 | CellLabel->"Arguments Pattern", 79 | CellID->158391909,ExpressionUUID->"91a6966d-45e2-40e3-9571-286bbb5d3212"], 80 | 81 | Cell[BoxData[""], "Template", 82 | CellLabel->"Local Variables", 83 | CellID->1360575930,ExpressionUUID->"922cbb9a-d650-4777-9136-c414e08790b6"], 84 | 85 | Cell[BoxData[""], "Template", 86 | CellLabel->"Color Equal Signs", 87 | CellID->793782254,ExpressionUUID->"25d8c386-91eb-42ff-a34f-d7f66bb9fd9d"] 88 | }, Closed]], 89 | 90 | Cell[CellGroupData[{ 91 | 92 | Cell["Details", "DetailsSection", 93 | CellID->307771771,ExpressionUUID->"36ed330d-1852-42ef-9672-d897889deeac"], 94 | 95 | Cell["XXXX", "Details", 96 | CellLabel->"Lead", 97 | CellID->670882175,ExpressionUUID->"491fa4d6-12a2-47ff-a606-7668eef07e38"], 98 | 99 | Cell["XXXX", "Details", 100 | CellLabel->"Developers", 101 | CellID->350963985,ExpressionUUID->"d281a616-d5ec-4be4-8f56-bdd6cd83f7c3"], 102 | 103 | Cell["XXXX", "Details", 104 | CellLabel->"Authors", 105 | CellID->8391405,ExpressionUUID->"3eac64a0-6562-4619-a002-549e88ebc548"], 106 | 107 | Cell["XXXX", "Details", 108 | CellLabel->"Feature Name", 109 | CellID->3610269,ExpressionUUID->"c733bb7e-2567-40fd-9a63-049b6096778e"], 110 | 111 | Cell["XXXX", "Details", 112 | CellLabel->"QA", 113 | CellID->401364205,ExpressionUUID->"ff587468-d84d-4c9c-8b8c-8eb7c625f4fe"], 114 | 115 | Cell["XXXX", "Details", 116 | CellLabel->"DA", 117 | CellID->350204745,ExpressionUUID->"1072bd0a-8f5e-4c29-a4d6-6958b2d7ff04"], 118 | 119 | Cell["XXXX", "Details", 120 | CellLabel->"Docs", 121 | CellID->732958810,ExpressionUUID->"ff3e901a-f4a8-4bbd-9960-09836546309f"], 122 | 123 | Cell["XXXX", "Details", 124 | CellLabel->"Features Page Notes", 125 | CellID->222905350,ExpressionUUID->"03e7ebb2-497f-4f77-9732-45cb25531a7c"], 126 | 127 | Cell["XXXX", "Details", 128 | CellLabel->"Comments", 129 | CellID->240026365,ExpressionUUID->"acebd977-b949-4235-ab72-26115c24b3b9"] 130 | }, Closed]], 131 | 132 | Cell[CellGroupData[{ 133 | 134 | Cell["ToRhino", "ObjectName", 135 | CellID->1224892054,ExpressionUUID->"5ea1889c-a397-4374-9334-2e33dbe3d1e6"], 136 | 137 | Cell[TextData[{ 138 | Cell[" ", "ModInfo",ExpressionUUID->"b22c65e0-a019-4514-830a-dacac02a7652"], 139 | Cell[BoxData[ 140 | RowBox[{"ToRhino", "[", 141 | StyleBox["obj", "TI"], "]"}]], "InlineFormula",ExpressionUUID-> 142 | "415d871a-120f-448d-824b-b2e20a2e24f7"], 143 | " \[LineSeparator]attempts to convert ", 144 | Cell[BoxData[ 145 | StyleBox["obj", "TI"]], "InlineFormula",ExpressionUUID-> 146 | "91d74c6d-fa2f-42ec-b221-6cf499a0ec73"], 147 | " to a Rhino object\n", 148 | Cell[" ", "ModInfo",ExpressionUUID-> 149 | "46cb6134-e569-4569-8239-09c32c081640"], 150 | Cell[BoxData[ 151 | RowBox[{"ToRhino", "[", 152 | RowBox[{ 153 | StyleBox["obj", "TI"], ",", " ", 154 | StyleBox["type", "TI"]}], "]"}]], "InlineFormula",ExpressionUUID-> 155 | "42119983-bc6d-4fc0-a976-fe08324648f6"], 156 | "\[LineSeparator]attempts to convert ", 157 | Cell[BoxData[ 158 | StyleBox["obj", "TI"]], "InlineFormula",ExpressionUUID-> 159 | "20c81961-a950-4f7b-98b8-945cc1362741"], 160 | " to a Rhino object of type ", 161 | Cell[BoxData[ 162 | StyleBox["type", "TI"]], "InlineFormula",ExpressionUUID-> 163 | "8b67bd12-7ffd-47f9-9266-39956a9bf1b5"] 164 | }], "Usage", 165 | CellChangeTimes->{{3.7368764901995025`*^9, 3.736876578704399*^9}}, 166 | CellID->982511436,ExpressionUUID->"c86d11d3-c412-4515-a4cb-ee09f1efae30"], 167 | 168 | Cell["\<\ 169 | Currently supported types include \"Rhino.Geometry.Point3d\", \ 170 | \"Rhino.Geometry.Vector3d\", \"Rhino.Geometry.Mesh\", and \ 171 | \"Rhino.Geometry.Transform\".\ 172 | \>", "Notes", 173 | CellChangeTimes->{{3.7368777754321413`*^9, 3.736877871990446*^9}, { 174 | 3.736877941628272*^9, 3.736877946394746*^9}}, 175 | CellID->104016356,ExpressionUUID->"9c2e14a8-d45e-469d-8204-1bf969f3809d"] 176 | }, Open ]], 177 | 178 | Cell[CellGroupData[{ 179 | 180 | Cell["Tutorials", "TutorialsSection", 181 | CellID->250839057,ExpressionUUID->"e47fc67c-f49b-47ad-a30c-da937e84b03d"], 182 | 183 | Cell[TextData[ButtonBox["Use NETLink to Examine and Create Objects in Rhino", 184 | BaseStyle->"Link", 185 | ButtonData-> 186 | "paclet:RhinoLink/tutorial/ManualInteractionWithRhinoObjects"]], "Tutorials", 187 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 188 | CellID->292544750,ExpressionUUID->"87c43726-0ebb-4412-82cd-5db4dfa8cab3"], 189 | 190 | Cell[TextData[ButtonBox["Operate on Wolfram Language Meshes Using Rhino", 191 | BaseStyle->"Link", 192 | ButtonData-> 193 | "paclet:RhinoLink/tutorial/UsingRhinoMeshOperations"]], "Tutorials", 194 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 195 | CellID->422280156,ExpressionUUID->"202d1f10-c116-4f18-bb35-316a612e0ae4"], 196 | 197 | Cell[TextData[ButtonBox["Control a Parametric Surface in Rhino with a \ 198 | Manipulate Interface in Mathematica", 199 | BaseStyle->"Link", 200 | ButtonData->"paclet:RhinoLink/tutorial/InteractiveSurface"]], "Tutorials", 201 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 202 | CellID->740172588,ExpressionUUID->"dc190b22-6cd7-4eca-b553-4ba78718dcbf"], 203 | 204 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Translates \ 205 | Graphics3D Output to Rhino Meshes", 206 | BaseStyle->"Link", 207 | ButtonData->"paclet:RhinoLink/tutorial/Graphics3DComponent"]], "Tutorials", 208 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 209 | CellID->416904191,ExpressionUUID->"4746f6cd-3127-4805-a96a-0e7671661f14"], 210 | 211 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Makes NURBS \ 212 | Surfaces from U-V Point Grids", 213 | BaseStyle->"Link", 214 | ButtonData->"paclet:RhinoLink/tutorial/UVSurfaceComponent"]], "Tutorials", 215 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 216 | CellID->1098419325,ExpressionUUID->"d760c4f3-c39a-4ba7-a426-bc3334bba23f"], 217 | 218 | Cell[TextData[ButtonBox["Make a Grasshopper Component that Covers a Surface \ 219 | of Revolution with Phyllotaxically-Arranged Points", 220 | BaseStyle->"Link", 221 | ButtonData-> 222 | "paclet:RhinoLink/tutorial/SpiralPhyllotaxicSurfaceComponent"]], "Tutorials", 223 | CellChangeTimes->{{3.736791430265728*^9, 3.736791433255972*^9}}, 224 | CellID->71800016,ExpressionUUID->"cbcb8882-95b6-443f-a700-9b9439b883b5"] 225 | }, Open ]], 226 | 227 | Cell[CellGroupData[{ 228 | 229 | Cell["Related Demonstrations", "RelatedDemonstrationsSection", 230 | CellID->1268215905,ExpressionUUID->"fe2e94f2-2d11-42d8-834b-0afc80a2fccf"], 231 | 232 | Cell["XXXX", "RelatedDemonstrations", 233 | CellID->1129518860,ExpressionUUID->"dc759813-0530-4fc2-8714-e0814fe4284a"] 234 | }, Open ]], 235 | 236 | Cell[CellGroupData[{ 237 | 238 | Cell["Related Links", "RelatedLinksSection", 239 | CellID->1584193535,ExpressionUUID->"79fdd816-cb10-477e-b906-62e922ceb2ed"], 240 | 241 | Cell["XXXX", "RelatedLinks", 242 | CellID->1038487239,ExpressionUUID->"38e506cf-7ad0-4f95-9c1e-3316e745d767"] 243 | }, Open ]], 244 | 245 | Cell[CellGroupData[{ 246 | 247 | Cell["See Also", "SeeAlsoSection", 248 | CellID->1255426704,ExpressionUUID->"a497f6f8-1868-4fd5-9df9-64a2b44e61db"], 249 | 250 | Cell[TextData[{ 251 | Cell[BoxData[ 252 | ButtonBox["FromRhino", 253 | BaseStyle->"Link", 254 | ButtonData->"paclet:RhinoLink/ref/FromRhino"]], "InlineFormula", 255 | ExpressionUUID->"a94cc5af-40c5-4fdf-9b8b-22828b36f4ef"], 256 | " \[EmptyVerySmallSquare] ", 257 | Cell[BoxData[ 258 | ButtonBox["RhinoDocObjects", 259 | BaseStyle->"Link", 260 | ButtonData->"paclet:RhinoLink/ref/RhinoDocObjects"]], "InlineFormula", 261 | ExpressionUUID->"f7836010-299f-46a7-a798-e15f7755c8d9"], 262 | " \[EmptyVerySmallSquare] ", 263 | Cell[BoxData[ 264 | ButtonBox["RhinoShow", 265 | BaseStyle->"Link", 266 | ButtonData->"paclet:RhinoLink/ref/RhinoShow"]], "InlineFormula", 267 | ExpressionUUID->"75359a4a-67ca-4b3a-92ea-ed524195c408"] 268 | }], "SeeAlso", 269 | CellChangeTimes->{{3.7368773511023426`*^9, 3.736877356586692*^9}, { 270 | 3.7368774915656013`*^9, 3.736877493035406*^9}, {3.7373773015998907`*^9, 271 | 3.737377303604095*^9}}, 272 | CellID->929782353,ExpressionUUID->"dab8fedd-a610-4390-8f51-3295599dfab0"] 273 | }, Open ]], 274 | 275 | Cell[CellGroupData[{ 276 | 277 | Cell["More About", "MoreAboutSection", 278 | CellID->38303248,ExpressionUUID->"a5092fdb-59e3-42b6-84d2-03efc68f9f4a"], 279 | 280 | Cell["XXXX", "MoreAbout", 281 | CellID->1665078683,ExpressionUUID->"f553887e-775d-4644-bd51-7c034fb55f2f"] 282 | }, Open ]], 283 | 284 | Cell[CellGroupData[{ 285 | 286 | Cell[BoxData[ 287 | InterpretationBox[GridBox[{ 288 | { 289 | StyleBox["Examples", "PrimaryExamplesSection"], 290 | ButtonBox[ 291 | RowBox[{ 292 | RowBox[{"More", " ", "Examples"}], " ", "\[RightTriangle]"}], 293 | BaseStyle->"ExtendedExamplesLink", 294 | ButtonData:>"ExtendedExamples"]} 295 | }], 296 | $Line = 0; Null]], "PrimaryExamplesSection", 297 | CellID->880084151,ExpressionUUID->"6dd276a9-2296-4d93-99a0-6ea950317eff"], 298 | 299 | Cell["\<\ 300 | (The following examples will only work in a notebook whose kernel has been \ 301 | set to RhinoAttach, and when WolframConnect has been executed in Rhino to \ 302 | establish communication between Rhino and Mathematica.)\ 303 | \>", "ExampleText", 304 | CellChangeTimes->{{3.7368686201435127`*^9, 3.736868692964159*^9}, { 305 | 3.736868747368617*^9, 3.736868758930406*^9}}, 306 | CellID->125237741,ExpressionUUID->"94aa2486-84df-4f81-a1b6-b08b5fb85610"], 307 | 308 | Cell["Convert a 3D coordinate to a Rhino Point3d object:", "ExampleText", 309 | CellChangeTimes->{{3.7368780149226847`*^9, 3.7368780259542737`*^9}}, 310 | CellID->688543137,ExpressionUUID->"e99f8feb-fc15-48dc-b85c-19d71ba7812b"], 311 | 312 | Cell[CellGroupData[{ 313 | 314 | Cell[BoxData[ 315 | RowBox[{"ToRhino", "[", 316 | RowBox[{"{", 317 | RowBox[{"1", ",", "2", ",", "3"}], "}"}], "]"}]], "Input", 318 | CellChangeTimes->{{3.7368777052143164`*^9, 3.736877711714116*^9}}, 319 | CellLabel->"In[6]:=", 320 | CellID->513727476,ExpressionUUID->"e80a4315-00fe-4f0c-9114-76347ac7b310"], 321 | 322 | Cell[BoxData[ 323 | InterpretationBox[ 324 | RowBox[{"\[LeftGuillemet]", 325 | RowBox[{"NETObject", "[", 326 | RowBox[{"Rhino", ".", "Geometry", ".", "Point3d"}], "]"}], 327 | "\[RightGuillemet]"}], 328 | NETLink`Objects`NETObject$18005602416459777]], "Output", 329 | CellChangeTimes->{3.7368777135109377`*^9}, 330 | CellLabel->"Out[6]=", 331 | CellID->428038356,ExpressionUUID->"ead315b5-b220-4c2b-ad48-a2519f777f20"] 332 | }, Open ]], 333 | 334 | Cell["Convert a 3D coordinate to a Rhino Vector3d object:", "ExampleText", 335 | CellChangeTimes->{{3.7368780149226847`*^9, 3.7368780259542737`*^9}, { 336 | 3.7368780670461264`*^9, 3.7368780694684443`*^9}}, 337 | CellID->126889544,ExpressionUUID->"8d076944-e49d-49c9-8139-d806fcec9147"], 338 | 339 | Cell[CellGroupData[{ 340 | 341 | Cell[BoxData[ 342 | RowBox[{"ToRhino", "[", 343 | RowBox[{ 344 | RowBox[{"{", 345 | RowBox[{"1", ",", "2", ",", "3"}], "}"}], ",", 346 | "\"\\""}], " ", "]"}]], "Input", 347 | CellChangeTimes->{{3.7368777052143164`*^9, 3.736877711714116*^9}, { 348 | 3.7368780363913927`*^9, 3.7368780530777955`*^9}}, 349 | CellLabel->"In[9]:=", 350 | CellID->386686336,ExpressionUUID->"2b697876-b401-4658-9738-5f59950c11bf"], 351 | 352 | Cell[BoxData[ 353 | InterpretationBox[ 354 | RowBox[{"\[LeftGuillemet]", 355 | RowBox[{"NETObject", "[", 356 | RowBox[{"Rhino", ".", "Geometry", ".", "Vector3d"}], "]"}], 357 | "\[RightGuillemet]"}], 358 | NETLink`Objects`NETObject$18005602416459778]], "Output", 359 | CellChangeTimes->{3.7368777135109377`*^9, 3.7368780538433986`*^9}, 360 | CellLabel->"Out[9]=", 361 | CellID->244237486,ExpressionUUID->"aeff2157-5581-44b7-be5e-2b7fb884ff9f"] 362 | }, Open ]] 363 | }, Open ]], 364 | 365 | Cell[CellGroupData[{ 366 | 367 | Cell["More Examples", "ExtendedExamplesSection", 368 | CellTags->"ExtendedExamples", 369 | CellID->1854448968,ExpressionUUID->"9b88ac29-a3f4-466f-9ffa-aecf2507450e"], 370 | 371 | Cell[BoxData[ 372 | InterpretationBox[Cell[ 373 | "Scope", "ExampleSection",ExpressionUUID-> 374 | "60886cb2-d0d6-485c-a483-973a0c1802b5"], 375 | $Line = 0; Null]], "ExampleSection", 376 | CellID->1293636265,ExpressionUUID->"22a09c0f-0c9f-491d-8694-b915311c4548"], 377 | 378 | Cell[BoxData[ 379 | InterpretationBox[Cell[ 380 | "Generalizations & Extensions", "ExampleSection",ExpressionUUID-> 381 | "d9098308-9614-4bd3-b99a-390ef31bd5e4"], 382 | $Line = 0; Null]], "ExampleSection", 383 | CellID->1020263627,ExpressionUUID->"46ee2de4-f907-47d3-a383-061631f732c2"], 384 | 385 | Cell[CellGroupData[{ 386 | 387 | Cell[BoxData[ 388 | InterpretationBox[Cell[ 389 | "Options", "ExampleSection",ExpressionUUID-> 390 | "664e603c-246f-4ff5-a38a-1e3955b79165"], 391 | $Line = 0; Null]], "ExampleSection", 392 | CellID->2061341341,ExpressionUUID->"28d69e07-179e-4a06-9a39-fa80d7aacbd5"], 393 | 394 | Cell[BoxData[ 395 | InterpretationBox[Cell[ 396 | "XXXX", "ExampleSubsection",ExpressionUUID-> 397 | "7b9ce8c4-c515-4e0b-802c-a9649c4231c5"], 398 | $Line = 0; Null]], "ExampleSubsection", 399 | CellID->1757724783,ExpressionUUID->"e8ac9283-9b66-440c-95e9-eda1841e45e3"], 400 | 401 | Cell[BoxData[ 402 | InterpretationBox[Cell[ 403 | "XXXX", "ExampleSubsection",ExpressionUUID-> 404 | "5b303e4a-6fd3-41d1-a88a-6aeba7b8be29"], 405 | $Line = 0; Null]], "ExampleSubsection", 406 | CellID->1295379749,ExpressionUUID->"ffc56f23-5fb2-4c8f-b00c-126208cbbc43"] 407 | }, Closed]], 408 | 409 | Cell[BoxData[ 410 | InterpretationBox[Cell[ 411 | "Applications", "ExampleSection",ExpressionUUID-> 412 | "d2a4fded-0219-4e47-8cea-0f7a54fedf4a"], 413 | $Line = 0; Null]], "ExampleSection", 414 | CellID->258228157,ExpressionUUID->"7ad07b58-cde5-4c3d-97ec-dc851641123d"], 415 | 416 | Cell[BoxData[ 417 | InterpretationBox[Cell[ 418 | "Properties & Relations", "ExampleSection",ExpressionUUID-> 419 | "790ae3a8-f97a-4421-bfeb-498014c6a9dc"], 420 | $Line = 0; Null]], "ExampleSection", 421 | CellID->2123667759,ExpressionUUID->"e32b980b-1b7c-46de-8445-a287ca0406fb"], 422 | 423 | Cell[BoxData[ 424 | InterpretationBox[Cell[ 425 | "Possible Issues", "ExampleSection",ExpressionUUID-> 426 | "bc25e09d-0b31-4caa-9a16-cdc111bcd60e"], 427 | $Line = 0; Null]], "ExampleSection", 428 | CellID->1305812373,ExpressionUUID->"9a5fa687-97bc-46ec-bad0-75b18f760129"], 429 | 430 | Cell[BoxData[ 431 | InterpretationBox[Cell[ 432 | "Interactive Examples", "ExampleSection",ExpressionUUID-> 433 | "c42828b6-f56f-4263-aaca-e7fdbfe97c36"], 434 | $Line = 0; Null]], "ExampleSection", 435 | CellID->1653164318,ExpressionUUID->"8afee63f-8c86-4562-b4b0-a758ce58a573"], 436 | 437 | Cell[BoxData[ 438 | InterpretationBox[Cell[ 439 | "Neat Examples", "ExampleSection",ExpressionUUID-> 440 | "df3aabd6-cef9-42b7-a8c5-52ef8f47ade8"], 441 | $Line = 0; Null]], "ExampleSection", 442 | CellID->589267740,ExpressionUUID->"a0d2356f-fae1-45ba-8931-80fb5d63c0d6"] 443 | }, Open ]] 444 | }, 445 | WindowSize->{700, 770}, 446 | WindowMargins->{{4, Automatic}, {Automatic, 0}}, 447 | CellContext->"Global`", 448 | FrontEndVersion->"11.3 for Mac OS X x86 (32-bit, 64-bit Kernel) (March 5, \ 449 | 2018)", 450 | StyleDefinitions->FrontEnd`FileName[{"Wolfram"}, "FunctionPageStyles.nb", 451 | CharacterEncoding -> "UTF-8"] 452 | ] 453 | (* End of Notebook Content *) 454 | 455 | (* Internal cache information *) 456 | (*CellTagsOutline 457 | CellTagsIndex->{ 458 | "ExtendedExamples"->{ 459 | Cell[12934, 366, 155, 2, 56, "ExtendedExamplesSection",ExpressionUUID->"9b88ac29-a3f4-466f-9ffa-aecf2507450e", 460 | CellTags->"ExtendedExamples", 461 | CellID->1854448968]} 462 | } 463 | *) 464 | (*CellTagsIndex 465 | CellTagsIndex->{ 466 | {"ExtendedExamples", 16089, 457} 467 | } 468 | *) 469 | (*NotebookFileOutline 470 | Notebook[{ 471 | Cell[558, 20, 667, 15, 24, "History",ExpressionUUID->"21e47394-5f66-49da-a50c-0d3a89f0c0b7", 472 | CellID->1247902091], 473 | Cell[CellGroupData[{ 474 | Cell[1250, 39, 123, 1, 29, "CategorizationSection",ExpressionUUID->"20a90e94-b787-4dc7-a119-d7eec2289ef6", 475 | CellID->1122911449], 476 | Cell[1376, 42, 134, 2, 70, "Categorization",ExpressionUUID->"942141c4-613a-45c6-927b-e368a3fb0637", 477 | CellID->686433507], 478 | Cell[1513, 46, 137, 2, 70, "Categorization",ExpressionUUID->"2d06a2b7-9c40-45c0-b194-3b26ad7c0cae", 479 | CellID->605800465], 480 | Cell[1653, 50, 134, 2, 70, "Categorization",ExpressionUUID->"a361656b-c3da-48fd-bf35-fd3d3d11f8f5", 481 | CellID->468444828], 482 | Cell[1790, 54, 121, 1, 70, "Categorization",ExpressionUUID->"9ccb2e16-3503-4796-be3a-cf060de7b550"] 483 | }, Closed]], 484 | Cell[CellGroupData[{ 485 | Cell[1948, 60, 110, 1, 19, "KeywordsSection",ExpressionUUID->"ae019075-8249-46c6-b7de-7c0c328888f4", 486 | CellID->477174294], 487 | Cell[2061, 63, 100, 1, 70, "Keywords",ExpressionUUID->"55ed7404-376c-4cf7-ba97-c16723721b94", 488 | CellID->1164421360] 489 | }, Closed]], 490 | Cell[CellGroupData[{ 491 | Cell[2198, 69, 120, 1, 19, "TemplatesSection",ExpressionUUID->"a5266c32-9cba-4ba8-96f6-0a9db55951d8", 492 | CellID->1872225408], 493 | Cell[2321, 72, 149, 2, 70, "Template",ExpressionUUID->"3e446562-83b2-4708-8057-6322e062a869", 494 | CellID->1562036412], 495 | Cell[2473, 76, 137, 2, 70, "Template",ExpressionUUID->"91a6966d-45e2-40e3-9571-286bbb5d3212", 496 | CellID->158391909], 497 | Cell[2613, 80, 136, 2, 70, "Template",ExpressionUUID->"922cbb9a-d650-4777-9136-c414e08790b6", 498 | CellID->1360575930], 499 | Cell[2752, 84, 137, 2, 70, "Template",ExpressionUUID->"25d8c386-91eb-42ff-a34f-d7f66bb9fd9d", 500 | CellID->793782254] 501 | }, Closed]], 502 | Cell[CellGroupData[{ 503 | Cell[2926, 91, 108, 1, 19, "DetailsSection",ExpressionUUID->"36ed330d-1852-42ef-9672-d897889deeac", 504 | CellID->307771771], 505 | Cell[3037, 94, 118, 2, 70, "Details",ExpressionUUID->"491fa4d6-12a2-47ff-a606-7668eef07e38", 506 | CellID->670882175], 507 | Cell[3158, 98, 124, 2, 70, "Details",ExpressionUUID->"d281a616-d5ec-4be4-8f56-bdd6cd83f7c3", 508 | CellID->350963985], 509 | Cell[3285, 102, 119, 2, 70, "Details",ExpressionUUID->"3eac64a0-6562-4619-a002-549e88ebc548", 510 | CellID->8391405], 511 | Cell[3407, 106, 124, 2, 70, "Details",ExpressionUUID->"c733bb7e-2567-40fd-9a63-049b6096778e", 512 | CellID->3610269], 513 | Cell[3534, 110, 116, 2, 70, "Details",ExpressionUUID->"ff587468-d84d-4c9c-8b8c-8eb7c625f4fe", 514 | CellID->401364205], 515 | Cell[3653, 114, 116, 2, 70, "Details",ExpressionUUID->"1072bd0a-8f5e-4c29-a4d6-6958b2d7ff04", 516 | CellID->350204745], 517 | Cell[3772, 118, 118, 2, 70, "Details",ExpressionUUID->"ff3e901a-f4a8-4bbd-9960-09836546309f", 518 | CellID->732958810], 519 | Cell[3893, 122, 133, 2, 70, "Details",ExpressionUUID->"03e7ebb2-497f-4f77-9732-45cb25531a7c", 520 | CellID->222905350], 521 | Cell[4029, 126, 122, 2, 70, "Details",ExpressionUUID->"acebd977-b949-4235-ab72-26115c24b3b9", 522 | CellID->240026365] 523 | }, Closed]], 524 | Cell[CellGroupData[{ 525 | Cell[4188, 133, 105, 1, 63, "ObjectName",ExpressionUUID->"5ea1889c-a397-4374-9334-2e33dbe3d1e6", 526 | CellID->1224892054], 527 | Cell[4296, 136, 1186, 29, 113, "Usage",ExpressionUUID->"c86d11d3-c412-4515-a4cb-ee09f1efae30", 528 | CellID->982511436], 529 | Cell[5485, 167, 370, 7, 41, "Notes",ExpressionUUID->"9c2e14a8-d45e-469d-8204-1bf969f3809d", 530 | CellID->104016356] 531 | }, Open ]], 532 | Cell[CellGroupData[{ 533 | Cell[5892, 179, 112, 1, 44, "TutorialsSection",ExpressionUUID->"e47fc67c-f49b-47ad-a30c-da937e84b03d", 534 | CellID->250839057], 535 | Cell[6007, 182, 332, 5, 16, "Tutorials",ExpressionUUID->"87c43726-0ebb-4412-82cd-5db4dfa8cab3", 536 | CellID->292544750], 537 | Cell[6342, 189, 319, 5, 16, "Tutorials",ExpressionUUID->"202d1f10-c116-4f18-bb35-316a612e0ae4", 538 | CellID->422280156], 539 | Cell[6664, 196, 346, 5, 16, "Tutorials",ExpressionUUID->"dc190b22-6cd7-4eca-b553-4ba78718dcbf", 540 | CellID->740172588], 541 | Cell[7013, 203, 345, 5, 16, "Tutorials",ExpressionUUID->"4746f6cd-3127-4805-a96a-0e7671661f14", 542 | CellID->416904191], 543 | Cell[7361, 210, 342, 5, 16, "Tutorials",ExpressionUUID->"d760c4f3-c39a-4ba7-a426-bc3334bba23f", 544 | CellID->1098419325], 545 | Cell[7706, 217, 384, 6, 16, "Tutorials",ExpressionUUID->"cbcb8882-95b6-443f-a700-9b9439b883b5", 546 | CellID->71800016] 547 | }, Open ]], 548 | Cell[CellGroupData[{ 549 | Cell[8127, 228, 138, 1, 31, "RelatedDemonstrationsSection",ExpressionUUID->"fe2e94f2-2d11-42d8-834b-0afc80a2fccf", 550 | CellID->1268215905], 551 | Cell[8268, 231, 113, 1, 16, "RelatedDemonstrations",ExpressionUUID->"dc759813-0530-4fc2-8714-e0814fe4284a", 552 | CellID->1129518860] 553 | }, Open ]], 554 | Cell[CellGroupData[{ 555 | Cell[8418, 237, 120, 1, 31, "RelatedLinksSection",ExpressionUUID->"79fdd816-cb10-477e-b906-62e922ceb2ed", 556 | CellID->1584193535], 557 | Cell[8541, 240, 104, 1, 16, "RelatedLinks",ExpressionUUID->"38e506cf-7ad0-4f95-9c1e-3316e745d767", 558 | CellID->1038487239] 559 | }, Open ]], 560 | Cell[CellGroupData[{ 561 | Cell[8682, 246, 110, 1, 31, "SeeAlsoSection",ExpressionUUID->"a497f6f8-1868-4fd5-9df9-64a2b44e61db", 562 | CellID->1255426704], 563 | Cell[8795, 249, 913, 22, 22, "SeeAlso",ExpressionUUID->"dab8fedd-a610-4390-8f51-3295599dfab0", 564 | CellID->929782353] 565 | }, Open ]], 566 | Cell[CellGroupData[{ 567 | Cell[9745, 276, 112, 1, 31, "MoreAboutSection",ExpressionUUID->"a5092fdb-59e3-42b6-84d2-03efc68f9f4a", 568 | CellID->38303248], 569 | Cell[9860, 279, 101, 1, 16, "MoreAbout",ExpressionUUID->"f553887e-775d-4644-bd51-7c034fb55f2f", 570 | CellID->1665078683] 571 | }, Open ]], 572 | Cell[CellGroupData[{ 573 | Cell[9998, 285, 411, 11, 70, "PrimaryExamplesSection",ExpressionUUID->"6dd276a9-2296-4d93-99a0-6ea950317eff", 574 | CellID->880084151], 575 | Cell[10412, 298, 431, 7, 52, "ExampleText",ExpressionUUID->"94aa2486-84df-4f81-a1b6-b08b5fb85610", 576 | CellID->125237741], 577 | Cell[10846, 307, 218, 2, 22, "ExampleText",ExpressionUUID->"e99f8feb-fc15-48dc-b85c-19d71ba7812b", 578 | CellID->688543137], 579 | Cell[CellGroupData[{ 580 | Cell[11089, 313, 283, 6, 27, "Input",ExpressionUUID->"e80a4315-00fe-4f0c-9114-76347ac7b310", 581 | CellID->513727476], 582 | Cell[11375, 321, 385, 9, 26, "Output",ExpressionUUID->"ead315b5-b220-4c2b-ad48-a2519f777f20", 583 | CellID->428038356] 584 | }, Open ]], 585 | Cell[11775, 333, 272, 3, 22, "ExampleText",ExpressionUUID->"8d076944-e49d-49c9-8139-d806fcec9147", 586 | CellID->126889544], 587 | Cell[CellGroupData[{ 588 | Cell[12072, 340, 400, 9, 27, "Input",ExpressionUUID->"2b697876-b401-4658-9738-5f59950c11bf", 589 | CellID->386686336], 590 | Cell[12475, 351, 410, 9, 26, "Output",ExpressionUUID->"aeff2157-5581-44b7-be5e-2b7fb884ff9f", 591 | CellID->244237486] 592 | }, Open ]] 593 | }, Open ]], 594 | Cell[CellGroupData[{ 595 | Cell[12934, 366, 155, 2, 56, "ExtendedExamplesSection",ExpressionUUID->"9b88ac29-a3f4-466f-9ffa-aecf2507450e", 596 | CellTags->"ExtendedExamples", 597 | CellID->1854448968], 598 | Cell[13092, 370, 242, 5, 33, "ExampleSection",ExpressionUUID->"22a09c0f-0c9f-491d-8694-b915311c4548", 599 | CellID->1293636265], 600 | Cell[13337, 377, 265, 5, 21, "ExampleSection",ExpressionUUID->"46ee2de4-f907-47d3-a383-061631f732c2", 601 | CellID->1020263627], 602 | Cell[CellGroupData[{ 603 | Cell[13627, 386, 244, 5, 21, "ExampleSection",ExpressionUUID->"28d69e07-179e-4a06-9a39-fa80d7aacbd5", 604 | CellID->2061341341], 605 | Cell[13874, 393, 247, 5, 70, "ExampleSubsection",ExpressionUUID->"e8ac9283-9b66-440c-95e9-eda1841e45e3", 606 | CellID->1757724783], 607 | Cell[14124, 400, 247, 5, 70, "ExampleSubsection",ExpressionUUID->"ffc56f23-5fb2-4c8f-b00c-126208cbbc43", 608 | CellID->1295379749] 609 | }, Closed]], 610 | Cell[14386, 408, 248, 5, 21, "ExampleSection",ExpressionUUID->"7ad07b58-cde5-4c3d-97ec-dc851641123d", 611 | CellID->258228157], 612 | Cell[14637, 415, 259, 5, 21, "ExampleSection",ExpressionUUID->"e32b980b-1b7c-46de-8445-a287ca0406fb", 613 | CellID->2123667759], 614 | Cell[14899, 422, 252, 5, 21, "ExampleSection",ExpressionUUID->"9a5fa687-97bc-46ec-bad0-75b18f760129", 615 | CellID->1305812373], 616 | Cell[15154, 429, 257, 5, 21, "ExampleSection",ExpressionUUID->"8afee63f-8c86-4562-b4b0-a758ce58a573", 617 | CellID->1653164318], 618 | Cell[15414, 436, 249, 5, 21, "ExampleSection",ExpressionUUID->"a0d2356f-fae1-45ba-8931-80fb5d63c0d6", 619 | CellID->589267740] 620 | }, Open ]] 621 | } 622 | ] 623 | *) 624 | 625 | --------------------------------------------------------------------------------