preferably with python
Hi @ivelin.peychev, below should do it, using RhinoScriptSyntax:
import rhinoscriptsyntax as rs
def DoSomething():
# get the object (surface, polysurface or extrusion)
obj_id = rs.GetObject("Brep to scale", 8+16+1073741824, True, False)
if not obj_id: return
# get area centroid and error bounds
rc = rs.SurfaceAreaCentroid(obj_id)
if not rc: return
# the centroid and error bound
centroid, error_bound = rc
# scale 0.5 in xyz
rs.ScaleObject(obj_id, centroid, [0.5, 0.5, 0.5], copy=False)
DoSomething()
or should i show the RhinoCommon equivalent ?
_
c.
Yes, I’m currently trying to use less rhinoscriptsyntax in order to learn RhinoCommon’s api better.
Also I think about 3d brep. But I got how to find the centroid in another thread.
I’ll try to do it myself. Thanks a lot.
Call:
https://developer.rhino3d.com/5/api/RhinoCommonWin/html/M_Rhino_Geometry_GeometryBase_Transform.htm
On your brep, passing it:
https://developer.rhino3d.com/5/api/RhinoCommonWin/html/M_Rhino_Geometry_Transform_Scale_1.htm
Or:
https://developer.rhino3d.com/5/api/RhinoCommonWin/html/M_Rhino_Geometry_Transform_Scale.htm
This is what I did
transfIn = Rhino.Geometry.Transform.Scale(Rhino.Geometry.Plane(Rhino.Geometry.AreaMassProperties.Compute(B).Centroid,Rhino.Geometry.Vector3d.XAxis,Rhino.Geometry.Vector3d.YAxis),0.999,0.999,0.999)
transfOut = Rhino.Geometry.Transform.Scale(Rhino.Geometry.Plane(Rhino.Geometry.AreaMassProperties.Compute(B).Centroid,Rhino.Geometry.Vector3d.XAxis,Rhino.Geometry.Vector3d.YAxis),1.001,1.001,1.001)
BdupIn.Transform(transfIn)
BdupOut.Transform(transfOut)
If you’re doing a uniform scaling, you don’t need the plane. Using the first overload above is simpler.
I wondered why I need a plane there