Quantcast
Channel: Scripting - McNeel Forum
Viewing all articles
Browse latest Browse all 5938

Orienting blocks to other blocks

$
0
0

Hello,

I’m trying to set up a script to orient target blocks to host blocks.

If the name of the target blocks is in the name of the host blocks then the targets will be transformed to the hosts.

It seems to be working well, but if the target blocks have any type of rotation then I need to run the script twice for them to be correctly oriented.

See attached file, script and video.

import rhinoscriptsyntax as rs

hosts = rs.GetObjects("Select host blocks",4096)

hostNames = []
hostXforms = []
hostPlanes = []
for i in hosts:
    name = rs.BlockInstanceName(i)
    hostNames.append(name)
    instanceXform = rs.BlockInstanceXform(i)
    hostXforms.append(instanceXform)
    hostPlane = rs.PlaneTransform(rs.WorldXYPlane(),instanceXform)
    hostPlanes.append(hostPlane)
    rs.LockObject(i)

print hostNames
#print hostXforms
#print hostPlanes

targets = rs.GetObjects("Select target blocks",4096)

targetNames = []
targetXforms = []
targetPlanes = []

for i in targets:
    name = rs.BlockInstanceName(i)
    targetNames.append(name)
    instanceXform = rs.BlockInstanceXform(i)
    targetXforms.append(instanceXform)
    targetPlane = rs.PlaneTransform(rs.WorldXYPlane(),instanceXform)
    targetPlanes.append(targetPlane)
    
    
    
print targetNames
#print targetXforms

for i,hName in enumerate(hostNames):
    for j,tName in enumerate(targetNames):
        if hName in tName:
            print "match: ", hName,tName
            print hosts[i]
            print targets[j]
            xForm = rs.XformChangeBasis(hostPlanes[i],targetPlanes[j])
            rs.TransformObject(targets[j],xForm)
        else:
            print "nomatch: ", hName,tName

for i in hosts:
    rs.UnlockObject(i)

Thanks,

Dan

blockmatching.3dm (176.3 KB)
blockMatching.py (1.4 KB)

1 post - 1 participant

Read full topic


Viewing all articles
Browse latest Browse all 5938

Trending Articles