Python - Getting XYZ from Location


#1

Hi,

I’m writing some Python code which will process Elevation Markers, as as part of that it will move and rotate.

To rotate the marker I need to obtain the markers location via:

elevmark = UnwrapElement(IN[0]) - this is a Dynamo node selecting the marker.

elevmarkloc = elevmark.Location

This returns: Autodesk.Revit.DB.Location

But I cant see how I can obtain an XYZ from that - the API help does not list any method or property for obtaining this…

Is there anyway I can get this?

Thanks.


Elevation marker location (XYZ)
Getting XYZ from ceiling location
#2

Try elevmarkloc.Point or elevmarkloc.Point.ToPoint() if you need a Dynamo Point

Point is a property of the LocationPoint class: http://revitapisearch.com/html/e1071a1b-b98e-5875-2e13-b673e2b9fef6.htm


#3

elevmark.Location returns an Autodesk.Revit.DB.Location object, this does not have any methods or properties such as Point or ToPoint… and so I cant do what you suggest…

The Location class only contains: Dispose, Equals, GetHashCode, GetType, Move, Rotate, ToString and IsReadOnly - not very much…

None of which seem to return its XYZ location.


#4

Location marks doesn’t seem to have any available properties that describes its location:


#5

Yea - thats what I found.

So how do you work out the position of an ElevationMarker? I’ve a routine which has placed some but I now need to rotate it to the correct angle…?


#6

You can easily rotate it wiith ElementTransformUtils.RotateElement, but it’s difficult to figure out the correct axis of rotation without the location point of the ElevationMarker.


#7

Yes, that exactly why I’m trying to obtain the location! I intend to use ElementTransformUtils…


#8

What if you use the origin of the associated view? Looks like they match up pretty close.

import clr

clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

element = UnwrapElement(IN[0])

OUT = element.Origin.ToPoint()

#9

OK, thanks,but I’m looking to keep the whole thing in Python as I will eventually convert it into C#… So far all of my routine is in Python.

I can’t see any way of getting from (or converting) an ElementMarker class object to an Element class object in Python…

There seems to be very little you can do with a ElementMarker.

I appreciate your help.


#10

Hi Kevin,

Have another look at the API, there seem to be quite a few things that you can do with an elevation marker. For example:


#11

I have the same issue trying to get the location point of ceilings, all I have is Autodesk.Revit.DB.Location, but methods or attributes like Point, ToPoint, Toxyz, etc. don’t work. Any idea?
image


#12

please start a new topic and refer to this one if needed.

Don’t revive a 3year old topic.


#13

Ok, thanks!