Python/Rhinoscript AddLinearDimension draws line to wrong direction

Hi,
I found AddLinearDimension function draws line to wrong direction.

This code draws Horizontial Dimension, but the manual operation at the same points draws Vertical Dimension.

I wonder why?

And I cannot find constraint option for Horz/Vert direction in script that manual operation have.

Thanks.

> # coding: utf-8
> import rhinoscriptsyntax as rs

> ydim0=[1.2,56.3,0]
> ydim1=[-2.1,16.4,0]
> ydim2=[46.0,36.0,0]

> rs.AddLinearDimension(ydim0, ydim1, ydim2 )

Hi Katsu

For me it’s a bug
Ciao Vittorio

There is a bug here, but is has to do with the method not accepting a plane, which is required to produce a dimension that is not oriented to the world xy-plane. For example, here is how you could create a vertical linear dimension in RhinoScript:

Sub Main()

  Dim plane, origin, xaxis, yaxis
  Dim dim0, dim1, dim2

  origin = Array(0, 0, 0)
  xaxis = Array(0, 1, 0) // world yaxis
  yaxis = Array(-1, 0, 0) // -world xaxis
  plane = Rhino.PlaneFromFrame(origin, xaxis, yaxis)

  dim0 = Array(1.2, 56.3, 0)
  dim1 = Array(-2.1, 16.4, 0)
  dim2 = Array(46.0, 36.0, 0)
  Call Rhino.AddLinearDimension(plane, dim0, dim1, dim2)
	
End Sub

I’ll get this on the “to-do” list.

Here is a version that should work:

import rhinoscriptsyntax as rs
import scriptcontext
import utility as rhutil
import Rhino

def TestAddLinearDimension(base_plane, start_point, end_point, point_on_dimension_line):
    plane = rhutil.coerceplane(base_plane, True)
    start = rhutil.coerce3dpoint(start_point, True)
    end = rhutil.coerce3dpoint(end_point, True)
    onpoint = rhutil.coerce3dpoint(point_on_dimension_line, True)
    success, s, t = plane.ClosestParameter(start)
    start = Rhino.Geometry.Point2d(s,t)
    success, s, t = plane.ClosestParameter(end)
    end = Rhino.Geometry.Point2d(s,t)
    success, s, t = plane.ClosestParameter(onpoint)
    onpoint = Rhino.Geometry.Point2d(s,t)
    ldim = Rhino.Geometry.LinearDimension(plane, start, end, onpoint)
    if not ldim: return scriptcontext.errorhandler()
    ldim.Aligned = True
    rc = scriptcontext.doc.Objects.AddLinearDimension(ldim)
    if rc==System.Guid.Empty: raise Exception("unable to add dimension to document")
    scriptcontext.doc.Views.Redraw()
    return rc

origin = [0, 0, 0]
xaxis = [0, 1, 0]
yaxis = [-1, 0, 0]
plane = rs.PlaneFromFrame(origin, xaxis, yaxis)

dim0=[1.2,56.3,0]
dim1=[-2.1,16.4,0]
dim2=[46.0,36.0,0]

TestAddLinearDimension(plane, dim0, dim1, dim2 )

It seems doesnt working too. my code is as follows. It still makes it vertical

import rhinoscriptsyntax as rs
import scriptcontext
import Rhino
import System

def TestAddLinearDimension(base_plane, start_point, end_point, point_on_dimension_line):
plane = rs.coerceplane(base_plane, True)
start = rs.coerce3dpoint(start_point, True)
end = rs.coerce3dpoint(end_point, True)
onpoint = rs.coerce3dpoint(point_on_dimension_line, True)
success, s, t = plane.ClosestParameter(start)
start = Rhino.Geometry.Point2d(s,t)
success, s, t = plane.ClosestParameter(end)
end = Rhino.Geometry.Point2d(s,t)
success, s, t = plane.ClosestParameter(onpoint)
onpoint = Rhino.Geometry.Point2d(s,t)
ldim = Rhino.Geometry.LinearDimension(plane, start, end, onpoint)
if not ldim: return scriptcontext.errorhandler()
ldim.Aligned = True
rc = scriptcontext.doc.Objects.AddLinearDimension(ldim)
if rc==System.Guid.Empty: raise Exception(“unable to add dimension to document”)
scriptcontext.doc.Views.Redraw()
return rc

origin = [0, 0, 0]
xaxis = [0, 1, 0]
yaxis = [-1, 0, 0]
plane = rs.PlaneFromFrame(origin, xaxis, yaxis)

dim0=[1.2,56.3,0]
dim1=[-2.1,16.4,0]
dim2=[46.0,36.0,0]

TestAddLinearDimension(plane, dim0, dim1, dim2 )

c2=rs.GetCurveObject(“CL”)
for i in range(100):
k=rs.GetObject(“Mal?”,preselect=True)
if k:
pt=rs.CurveAreaCentroid(k)
rs.AddPoint(pt[0])
nokta=rs.CurveClosestPoint(c2[0],pt[0])
nokta=rs.EvaluateCurve(c2[0],nokta)
rs.AddPoint(nokta)
nere=(nokta+pt[0])/2
nere[0]=nere[0]-100
TestAddLinearDimension(rs.WorldXYPlane(),nokta,pt[0],nere)
else:
break