Inputs and outputs of component

Hello
How we find the count of inputs and outputs of component

1 Like
print "number of inputs: " + str(ghenv.Component.Params.Input.Count)
inputs = "input names: "
for input in ghenv.Component.Params.Input:
    inputs += input.Name + ", "
print inputs

print "number of outputs: " + str(ghenv.Component.Params.Output.Count)
outputs = "output names: "
for output in ghenv.Component.Params.Output:
    outputs += output.Name + ", "
print outputs


ComponentParameters.gh (13.4 KB)

1 Like

Thank you, work fine except the components which don’t have input like Button or other components like panel, curve …
i need to find a way to separate them

You can figure out what members are there for an object by using dir(obj). Use that to see “inside” them. You could also use it to check during runtime.

1 Like

You can also check if an object is a component like this:

import Grasshopper as gh
objects = ghenv.Component.OnPingDocument().Objects
name = []
input = []
output = []

for obj in objects:
    name.append(obj.Name)
    if gh.Kernel.IGH_Component in list(type(obj).__bases__):
        input.append(obj.Params.Input.Count)
        output.append(obj.Params.Output.Count)
    else:
        input.append('-')
        output.append('-')

ComponentParameters.gh (16.0 KB)

1 Like

Thanks i will try that

Thank you i will try it

Work fine but don’t find all inputs and outputs
Maybe suggestion of @nathanletwory will separate them all and find different cases

This is the definition if someone want add more features like input/output names; wires, different input/output cases …

component in rhino.gh (17.5 KB)

1 Like

These input params implement Grasshopper.Kernel.IGH_Param. The following works:

import Grasshopper as gh
import GhPython
import rhinoscriptsyntax as rs

ghObjects = ghenv.Component.OnPingDocument().Objects

points = []
bndsPt = []
bndsH = []
bndsW = []
names = []

name = []
input = []
output = []

for obj in ghObjects:
    pivotX = obj.Attributes.Pivot.X
    pivotY = obj.Attributes.Pivot.Y
    pvt = rs.CreatePoint(pivotX,-pivotY)
    points.append(pvt)
    
    bndX = obj.Attributes.Bounds.X
    bndY = obj.Attributes.Bounds.Y
    bndPt = rs.CreatePoint(bndX,-bndY)
    bndsPt.append(bndPt)
    
    bndW = obj.Attributes.Bounds.Width
    bndH = obj.Attributes.Bounds.Height
    bndsW.append(bndW)
    bndsH.append(-bndH)
    
    name = obj.NickName
    names.append(name)
    
    if gh.Kernel.IGH_Component in list(type(obj).__bases__):
        input.append(obj.Params.Input.Count)
        output.append(obj.Params.Output.Count)
    elif gh.Kernel.IGH_Param in list(type(obj).__bases__):
        input.append(0)
        output.append(1)
    else:
        input.append(0)
        output.append(0)
    
Pivots = points
Corners = bndsPt
X = bndsW
Y = bndsH
names = names
1 Like

import Rhino.Geometry as rg
import Grasshopper as gh
objects = ghenv.Component.OnPingDocument().Objects;
names = []
grips = []
bounds = []
plane = rg.Plane.WorldXY
for obj in objects:
    names.append(obj.Name)
    bound = obj.Attributes.Bounds
    plane.Origin = rg.Point3d(bound.X, -bound.Y, 0)
    bounds.append(rg.Rectangle3d(plane, rg.Interval(0, bound.Width), rg.Interval(0, -bound.Height)))
    if gh.Kernel.IGH_Component in list(type(obj).__bases__):
        for input in obj.Params.Input:
            grip = input.Attributes.Pivot
            grips.append(rg.Circle(rg.Point3d(bound.X, -grip.Y, 0),2.0))
        for output in obj.Params.Output:
            grip = output.Attributes.Pivot
            grips.append(rg.Circle(rg.Point3d(bound.X+bound.Width, -grip.Y, 0),2.0))
    else:
        if obj.Attributes.HasInputGrip:
            grip = obj.Attributes.InputGrip
            grips.append(rg.Circle(rg.Point3d(grip.X, -grip.Y, 0),2.0))
        if obj.Attributes.HasOutputGrip:
            grip = obj.Attributes.OutputGrip
            grips.append(rg.Circle(rg.Point3d(grip.X, -grip.Y, 0),2.0))

ComponentParameters.gh (16.6 KB)

4 Likes


ComponentParameters.gh (17.5 KB)

2 Likes

Thank you @nathanletwory , Thank you @Mahdiyar
I will check the files

Thanks, think to use Tangent Curve to connect inputs/outputs

ComponentParameters (3).gh (23.0 KB)

1 Like

Is there a way to find the exact coordinates of grips targets?
Method used by @Mahdiyar give Bounds or Pivots but the points are not above output points;
i tried to separate inputs/outputs and find closest point to the target but i stop here.
I think there is a simple way from input parameters

ComponentParameters (4).gh (26.8 KB)


I think this work

rs.CreatePoint(tar.X+tar.Width,-tar.Y-(tar.Height/2))

1 Like


ComponentParameters.gh (27.9 KB)

2 Likes

Finally :slight_smile: , Thank you @Mahdiyar and @nathanletwory

ComponentParameters final.gh (17.2 KB)

5 Likes

9 Likes

Is it possible to extract icons of components? I want use them as textures
I tried python component but the script don’t detect the inputs

Yeah, each IGH_DocumentObject has an Icon property which returns a 24x24 pixel System.Drawing.Bitmap. Or it might return null in some cases, so check for that.

2 Likes