the nickname is the editable name, or abbreviation)
Keywords are handled next. Very few components actually have keywords, this is something I hope to get around to when the general help system will be rewritten.
The description is also searched and counts for 1%.
The percentages indicate what importance is given to a hit. When you search for "Point", then all the components that have "Point" in the name will be considered 100 times as important than the ones with "Point" in the description.
Furthermore, weighting is only a relative factor. Exact matches are valued more than poor matches and fuzzy matches (misspellings) are valued least of all. Eventually all the search results are sorted by importance and the 12 most important results are displayed.
The main problem is not I think writing a smarter searcher (although there is definitely room for improvement). The main problem is that words like "Point" and "Create" are so ubiquitous that you'll ever only get the most obvious results. Perhaps a secondary 'deep-search' UI makes sense as well, something that can display more than 12 results and is aimed at those who don't have a full grasp of the component set. This needs some thought and any ideas are welcome.
I fully concur that an online resource of all standard components would be a great thing to have. As I hinted before, I'm planning to rewrite the help-system from the ground up and this would be an excellent time to also have a look at generating online data. This is a really big job though so it won't happen any time soon. Two people (to my knowledge) have tried to generate web-based content from the help files, and have gotten pretty far, however the information I supply is too sketchy to make anything really decent.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
Added by David Rutten at 6:52pm on August 17, 2011
a spandex fabric, this was my second attempt. For the first attempt I over estimated the amount the fabric could stretch and shrunk the cut pieces in rhino by 10%, thinking this would give a good tight fit, but it was too small. Even at 100% scale with stretchy fabric the footings had a little trouble reaching their footholds in the base and top. So print the fabric cut outs on a normal printer at 1:1 scale, cut out, place on fabric and cut from the fabric. label each edge and which side faces out because it can get very confusing while sewing. Sew inside out and flip it back the correct way to hide the seams. This used about 1 m2 of fabric. I would suggest finding stretchable thread as well. I used normal thread and in the seams some kinks formed because it wasnt stretching correctly from the limitation of the thread.
I also attempted building the form as a solid as well, through layering. On each layer I placed two holes each piece for dowels to slide in so they would stack correctly on top of each other and for additional support. I then layered plaster on top of the object, sanded and painted ... will add a finished photo soon. the plaster will crack as it drys, but when you sand it the sanded plaster powder fills into the cracks, which you can then take a wet clothe and rub the wet plaster into the cracks, giving a smooth final finish. The final product is 50cm tall, can support a 55x55x1cm piece of glass as the table top, fairly heavy.
…
Added by Andrew Haas at 8:37pm on December 12, 2011
been written about it and I manage to get both of them started with this:
(VB.NET)
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim doc1 As String = "C:\Users\Xavier\Desktop\Test_GH\Test à changer.gh" Dim type As Type = Type.GetTypeFromProgID("Rhino5x64.Application", True)
'Start Rhino
Dim rhinocomobj As Object = Activator.CreateInstance(type) rhinocomobj.visible = True While rhinocomobj.IsInitialized() = 0 Threading.Thread.Sleep(100) End While
'Start GH and open a file
rhinocomobj.RunScript("_Grasshopper", 0) Dim gh As Object = rhinocomobj.GetPlugInObject("b45a29b1-4343-4035-989e-044e8580d9cf", "00000000-0000-0000-0000-000000000000") gh.OpenDocument(doc1)
From what I understood, this creates a separated COM object, but I don't know how I can manipulate it. For example, how can I get the RhinoDoc, the GH Document and so on?
I tried :
Dim RhinoDocument as RhinoDoc = RhinoDoc.ActiveDoc
but this throws an exception "System.dllNotFoundException" about RhinoCommon.dll, despite RhinoCommon.dll has been set as a Reference of the Project.
I tried as well to build a new class which sits inside GH (DLL as a reference + GHA inside GH library) as per David's suggestion: http://www.grasshopper3d.com/forum/topics/call-gh-from-c-code, and to access properties but I still get the same "DLL Not Found" exception whenever I use GH commands through this tailor made class.
At last, I tried using RhinoScript Interface through commands like :
gh.AssignDataToParameter, but this doesn't change the value, this doesn't throw any exception neither.
I would like to get full access in order to change parameters from a GH document, output geometries and DWG files, and so on.
I don't know if I am being really clear but any help would be really appreciated.
Thanks!
…
y to facilitate the help.
Private Sub RunScript(ByVal x As Boolean, ByVal Ids As List(Of Guid), ByRef A As Object)
If x ThenBB = New BLABLA(ids)A = BB.CurvaElseIf BB IsNot Nothing Then BB.timer.Stop()End If
End Sub
'<Custom additional code>
Dim BB As BlABLA
Public Class BLABLAPublic Curva As curvePrivate Cache As list(Of point3d)Private IDs As list(Of guid)
Sub New(_ids As list(Of guid))IDs = _idsDim points As New list(Of point3d)For Each id As guid In idsDim rh As rhinoobject = rhinodoc.ActiveDoc.Objects.Find(id)Dim pt As Rhino.Geometry.Point = DirectCast(rh.Geometry, rhino.Geometry.Point)If pt is Nothing Then Continue Forpoints.add(pt.Location)Nextcache = pointscurva = curve.CreateInterpolatedCurve(points, 3)timer = New system.Windows.Forms.Timertimer.Interval = 100timer.Start()
End Sub
Public WithEvents timer As system.Windows.Forms.Timer
Private Sub Tick(sender As Object, e As System.EventArgs) Handles timer.Tick
For i As int32 = 0 To ids.count - 1Dim rh As rhinoobject = rhinodoc.ActiveDoc.Objects.Find(ids(i))Dim pt As Rhino.Geometry.Point = DirectCast(rh.Geometry, rhino.Geometry.Point)If pt Is Nothing Then Continue For
If Not pt.Location.Equals(cache(i)) ThenUpdateOutput()
End Ifcache(i) = pt.LocationNextEnd Sub
Private Sub UpdateOutput()'HERE I NEED UPDATE THE A OUTPUTrhinoapp.WriteLine("Change")End Sub
End Class…
ot animating a slider 0 _min, max_1000But i would like to animate an Evaluate curve component, wich animates the meshmin 0_max 1, from a reparametize curve
I´m attaching an image
I´m not sure what i´m doing wrong
But it goes something like this
Initial Value: 0, the starting value of the slider that animates the mesh
End Value: 1 the ending value of the mesh animation
Starting Keyframe: 0, i want 3ds max to animate from keyframe 0
Ending Keyframe: I need 3ds max to finish at frame 100, 3 secs.
Slider: is moving t value of an evaluate curve component
If i export it
Centipede overwrites each obj file
I hope you can give me a hand, ip´m sure my values are nor correct or something
cheers
m…
reaky thing consisting from triangulated "modules" (i.e an assembly out of this, this and that) where the exterior edges ARE always under tension (= SS 304/316 cables OR nylon) and the interior ones MAY be under compression ( = steel, aluminum, wood, carbon) OR ... some of them ...may be under tension. Bastardized T trusses deviate a bit from theory ... but who cares? (not me anyway). T trusses have many variants (but as the greatest ever said: Less is More).
2. Large scale T for AEC is the art of pointless since it costs around the GNP of Nigeria. Here's some indicative components from a module of a multi adjustable TX system costing (the module) ~ the price of my Panigale (Google that):
The above is mailed to a friend who has MIT (yes, that MIT: the top dog) on sight ... therefor he needs some appropriate "credentials", he he.
3. The distance that separates the above with the demo TDT node provided is around 666.666 miles - but we don't care: we are after Art not some testimony to vanity.
4. On purpose I've used a smallish ring to give you a clear indication upon the constrain numero uno in truss design: CLASH matters.
5. You'll need:
(a) A decision related with the tensioners (classic Norseman + SS cables or nylon machined thingies?).
(b) A machinist who can do elementary stuff (like the adapters) and can weld this to that (the "ring" for instance). His abilities must be 1 in a scale of 100. If the fella has a computer (not a CRAY) and he knows what 3dPDF is (hmm) ... well ... use that way to communicate with him PRIOR designing anything: He must agree on the parts BEFORE the whole is attempted (as a design in GH or in some other app).
(c) A carpenter with a wood lathe for the obvious. BTW: BEFORE doing any TDT attempt > ask the carpenter about the available wood strut sizes. Against popular belief DO NOT varnish the wood (use exterior alkyd/oil stains from some top maker like the notorious US company PPG).
http://www.ppgpaints.com/products/paints-stains-data-sheets
(d) Good quality cigars (and espresso) plus some classic music (ZZTop, PFloyd, Cure, Stones, U2 etc etc) during the assembly.
(e) Faith to the Dark Side (see my avatar).
May the Force (the dark option) be with you.…
can toggle these modes from either the Canvas Toolbar, the Remote Control Panel or via shortcuts Ctrl+1,2 or 3
These are pretty self explanatory so I will keep it brief:
No Preview will completely switch off the preview of the Grasshopper Objects in the Rhino Viewports.
Wireframe Preview similar to Disable Meshing will disable any render meshes but keep any curves or Edges visible.
Shaded Preview will shade the preview...
There are two more Icons in this section of the Display Menu:
Selected Only Preview
Preview Settings
Also available on the Canvas Toolbar.
Selected Only Preview is a useful feature for following what your definition is doing at stages along the process without having to switch all previews off and manually turning individual ones back on as you go.
Without Selected Only Preview Toggled
With Selected Only Preview Toggled:
Preview Settings is the area within Grasshopper where you can modify the colours - including transparency - Grasshopper uses to display objects in the Rhino Viewport.
The first thing you should do before altering any settings is to Drag the Default Colours onto the green plus sign to add them to the Presets. This will enable you to restore them easily.
For future reference the default settings are:
Normal = Hue: 0º, Sat: 100, Val: 59, A:100
Selected = Hue: 120º, Sat: 100, Val: 59, A:100
Apart from accounting for taste this feature is particularly useful for anyone that is colour blind[2]:
The way to restore a colour from the preset list is to drag it from the right hand panel to either the Normal or Selected option on the Left
[2] There is a very interesting discourse topic on the McNeel Forums about Red/Green Colour Blindness.
work carried out by Jørgen Holo
…
ly this is a Rhino.Python problem and not a Grasshopper issue, but it could apply to both!
I was trying to take a simple example of moving a ball around and see how it could be animated through Rhino.Python. The code works great in wire frame with now memory issues at all. However, when I switch the view to Shaded or Rendered, things go south pretty quickly. The RAM usage of Rhino which was steady around 350mb (ish) now grows every frame after a minute or so, it is in the GB's and never drops even after the script has stopped.What gives? Clearly this must be possible because Bongo does something similar when it does animations. Check out my code below and I would love to hear your thoughts.
import time
import rhinoscriptsyntax as rs
import Rhino
height = 100
width = 100
x = 0
y = 0
xspeed = .1
yspeed = .3
start_time = time.time()
end_time = 60
run_time = 0
sphere = rs.AddSphere((x,y,0), 5)
while run_time < end_time:
x = x + xspeed
y = y + yspeed
if x > width/2 or x < -width/2:
xspeed = xspeed * -1
if y > height/2 or y < -height/2:
yspeed = yspeed * -1
rs.MoveObject(sphere, (xspeed, yspeed, 0))
Rhino.RhinoApp.Wait()
run_time = time.time() - start_time…
divided each strip into 6 shorter surfaces, I should have 48 surfaces overall). Currently I'm doing this using splitting planes and a custom script component I got from elsewhere on this forum:
Unfortunately I have some tricky criteria that I'm having trouble meeting:
1. These new surfaces cannot be trimmed. Currently I'm grabbing the edges of the new trimmed surfaces and building new surfaces using these edges. I realize this changes the geometry somewhat, and this is 100% okay for my purposes. However, I think this method is causing problems for criterion #2...
2. The new surfaces must all have the same UV directions; namely, the U-Direction for all surfaces is either "clockwise" or "counterclockwise" (either is fine, as long as they all match) AROUND the blade profile and the V-Direction is oriented lengthwise along the blade (either outward or inward, as long as they all match). Check UV directions using "Dir" in Rhino after baking.Attached is my attempted solution. Criterion #2 is met immediately after splitting, but not #1, and vice versa after rebuilding. I've tried to put the surfaces through a sort of "filter" to switch UV directions accordingly, but I think I'm missing something. Maybe the best idea is to use a different method for splitting in the first place?Any suggestions or help appreciated. Thanks in advance!
*the attached solution uses a component from LunchBox…
hat said, the processes that would benefit most from it in Rhino and Grasshopper actually lend themselves remarkably well to multi-threading. Things like Intersections, Meshing, operations on individual items in arrays would all benefit since they involve a lot of repetition where one iteration does not depend on the previous one.
Rhino4 was not designed to be threadsafe, and there were places where it was not possible to thread certain tasks. For example, imagine the Contour command. You'd think that it would be a piece of cake to thread that, you assign the first 25 contour intersections to core 1, the next 25 to core 2, the next 25 to core 3 and so on and so forth. But as it turns out intersecting a Brep and a Plane requires Rhino to build a spatial tree of the Brep first (assuming it doesn't exist yet). These trees vastly speed up a lot of operations and they are created lazily, meaning they get created the first time they are needed. Now we suddenly have four threads all trying to run a Brep Plane intersection and all trying to build the same spatial tree at the same time. This cannot end well. So in Rhino5 we made sure that when the spatial tree is getting build, every other thread that tries to access the Brep gets put on hold until the tree is done.
Then there's problems that the Intersection function might store temporary data on the Brep during the intersection, which makes threading intersections on the same Brep an absolute impossibility.
Then there's the even worse problem that the Intersection function might store temporary data in a static cache, which means you cannot run the function more than once at a time, even if it's on different Breps.
In Rhino5 we tried to rectify all of these problems. I think we got most of them by now.
When Grasshopper switches to Rhino5 for good, we'll start looking into threading a lot more seriously, not in the least because we'll also switch to .NET 4, which has some pretty cool mechanisms for writing decent MT code.
Until then, we'll have to stick to good old fashioned optimization. Christoph's problem was that it takes 12 minutes to open a file. Even if you thread that and you get 100% efficiency (which you won't, there's always additional overhead when threading) it would still take 3 minutes if you have 4 cores. It's an improvement sure, but not much of one. I'd like to know exactly where all that time is spend, then maybe we can remove specific bottlenecks.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…