<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Move Model Line (Curve Start Point) to Reference Point in Revit API Forum</title>
    <link>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13803959#M84628</link>
    <description>&lt;P&gt;Hi &lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/6224381"&gt;@ctm_mka&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I just wanted to sincerely thank you for your help with the issue I was facing in Dynamo/Revit.&lt;/P&gt;&lt;P&gt;Your suggestion to use ElementTransformUtils.CopyElement(...) combined with doc.Delete(...) was exactly what I needed. It completely solved the problem with model lines not moving due to reference plane constraints. I also now understand that the original elements couldn't be moved directly because of how Revit constrains them — and copying them with a translation vector effectively detaches them from those constraints.&lt;/P&gt;&lt;P&gt;I ended up building a Python script that:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Calculates the movement vector between a reference point and the element,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Copies the element using that vector,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Deletes the original,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;And then safely validates the new position.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Your input really helped me get to the bottom of the issue — not only technically, but also conceptually. Thanks again for your time and guidance!&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;</description>
    <pubDate>Wed, 10 Sep 2025 03:00:55 GMT</pubDate>
    <dc:creator>Tom_Bionda</dc:creator>
    <dc:date>2025-09-10T03:00:55Z</dc:date>
    <item>
      <title>Move Model Line (Curve Start Point) to Reference Point</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13766845#M84452</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Hi All,&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Topic Title&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Model Line Fails to Move to Floor Corner Reference Point in Dynamo + Revit — Vector Correct, Result Wrong.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Idea/Goal:&lt;/P&gt;&lt;P&gt;I want to move selected Revit model lines so that their start points align exactly with a known reference point (corner of a floor slab). The goal is precise geometric alignment using Dynamo and Python scripting within Dynamo.&lt;/P&gt;&lt;P&gt;I want to move selected Revit model lines so that their start points align exactly with a known reference point (corner of a floor slab). The goal is precise geometric alignment using Dynamo.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The Problem&lt;BR /&gt;Although I’m selecting Revit model lines using “Select Model Element” and calculating the correct displacement vector (confirmed via Watch nodes), the lines move inside Dynamo’s environment correctly but end up in completely unexpected places in the Revit model. Their new location is far from the intended reference point, sometimes even in the millions of units off in Y and Z direction.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Steps Taken:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Selected model lines via “Select Model Element.”&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Retrieved &lt;FONT face="Menlo, Monaco, Consolas, Courier New, monospace" color="#c7254e"&gt;&lt;SPAN&gt;Curve.StartPoint&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Selected a floor corner as a reference point.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Calculated displacement vector using: (Code Block)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dx = X_floor - X_line&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dy = Y_floor - Y_line&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dz = Z_floor - Z_line&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Vector.ByCoordinates(dx, dy, dz)&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Verified that:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Vector length matches expected. (Measured in Revit direct distance, Calculated displecment vector length)&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Vector was not nested (flattened properly).&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&amp;nbsp; Used both:&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;1ElementTransformUtils.MoveElement in Python script (custom node - to move in revit environment)&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;2Element.MoveByVector (custom node) - because its moving line in dynamo environment but not revit,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Outcome in Dynamo is visually correct.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Outcome in Revit is &lt;STRONG&gt;incorrect&lt;/STRONG&gt; — model line lands far from the floor point.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Debug Checks:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Verified vector math is correct.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Confirmed curve and floor points are both in internal coordinates.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Measured displacement length manually — matches calculated vector.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Retrieved model line location via .GetLocation() and Curve.StartPoint — both confirm starting values match input.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Persistent Issue:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Despite correct vector and visible movement in Dynamo, the element ends up far off in Revit.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Moving lines via geometry only affects Dynamo preview, not Revit 3D view.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;There seems to be a mismatch between &lt;STRONG&gt;geometry-based transformation&lt;/STRONG&gt; and &lt;STRONG&gt;element-based transformation&lt;/STRONG&gt;.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Z and Y coordinates appear to exaggerate by large magnitudes, even though vector math is simple and values are realistic.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Any suggestions what am I doing wrong in structure of nodes, any help would appreceate:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Why does this displacement vector fail in Revit while appearing correct in Dynamo?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;How to confirm coordinate system (internal vs shared) of points in use?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Is ElementTransformUtils.MoveElement reliable in this context?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Would using a different transformation approach (e.g., Geometry.Transform) be better?&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Thank you&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please find dynamo graph attached&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Edit: 15.08.2025&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;import clr&lt;BR /&gt;clr.AddReference('RevitAPI')&lt;BR /&gt;from Autodesk.Revit.DB import ElementTransformUtils, XYZ&lt;/P&gt;&lt;P&gt;clr.AddReference('RevitServices')&lt;BR /&gt;from RevitServices.Persistence import DocumentManager&lt;BR /&gt;from RevitServices.Transactions import TransactionManager&lt;/P&gt;&lt;P&gt;doc = DocumentManager.Instance.CurrentDBDocument&lt;/P&gt;&lt;P&gt;# Inputs&lt;BR /&gt;elements = IN[0]&lt;BR /&gt;vector_mm = IN[1]&lt;/P&gt;&lt;P&gt;# Convert to flat list&lt;BR /&gt;def flatten(input):&lt;BR /&gt;if isinstance(input, list):&lt;BR /&gt;result = []&lt;BR /&gt;for i in input:&lt;BR /&gt;result.extend(flatten(i))&lt;BR /&gt;return result&lt;BR /&gt;else:&lt;BR /&gt;return [input]&lt;/P&gt;&lt;P&gt;elements = flatten(elements)&lt;BR /&gt;elements = [UnwrapElement(e) for e in elements]&lt;/P&gt;&lt;P&gt;# Convert mm to feet&lt;BR /&gt;mm_to_ft = 1.0 / 304.8&lt;BR /&gt;try:&lt;BR /&gt;vector_ft = XYZ(&lt;BR /&gt;vector_mm.X * mm_to_ft,&lt;BR /&gt;vector_mm.Y * mm_to_ft,&lt;BR /&gt;vector_mm.Z * mm_to_ft&lt;BR /&gt;)&lt;BR /&gt;except:&lt;BR /&gt;vector_ft = vector_mm # fallback (if already XYZ in ft)&lt;/P&gt;&lt;P&gt;# Move elements&lt;BR /&gt;TransactionManager.Instance.EnsureInTransaction(doc)&lt;/P&gt;&lt;P&gt;moved = []&lt;BR /&gt;errors = []&lt;/P&gt;&lt;P&gt;for el in elements:&lt;BR /&gt;try:&lt;BR /&gt;ElementTransformUtils.MoveElement(doc, el.Id, vector_ft)&lt;BR /&gt;moved.append(el)&lt;BR /&gt;except Exception as e:&lt;BR /&gt;errors.append((el.Id, str(e)))&lt;/P&gt;&lt;P&gt;TransactionManager.Instance.TransactionTaskDone()&lt;/P&gt;&lt;P&gt;# Output&lt;BR /&gt;if errors:&lt;BR /&gt;OUT = ("Some elements failed to move", errors)&lt;BR /&gt;else:&lt;BR /&gt;OUT = ("All elements moved", moved)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm using Dynamo to move a &lt;STRONG&gt;Model Line (ModelCurve)&lt;/STRONG&gt; in Revit via a &lt;STRONG&gt;displacement vector&lt;/STRONG&gt;. The operation works correctly for the &lt;STRONG&gt;Y and Z directions&lt;/STRONG&gt;, but fails silently for the &lt;STRONG&gt;X direction&lt;/STRONG&gt; — the element does not move along X, and there is no error or warning.&lt;/P&gt;&lt;P&gt;After investigating, I’ve determined that this is due to the Model Line being &lt;STRONG&gt;associated with a Sketch Plane&lt;/STRONG&gt;, which restricts its movement to the plane itself. Since ModelCurve.SketchPlane is a &lt;STRONG&gt;read-only property&lt;/STRONG&gt;, it seems there is no way to detach the line or change its plane after creation.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Question:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a way to &lt;STRONG&gt;detach&lt;/STRONG&gt; or override the sketch plane of an existing Model Line so it becomes a &lt;STRONG&gt;free-floating element&lt;/STRONG&gt; (i.e., can move in all directions)?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Aug 2025 05:37:05 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13766845#M84452</guid>
      <dc:creator>Tom_Bionda</dc:creator>
      <dc:date>2025-08-15T05:37:05Z</dc:date>
    </item>
    <item>
      <title>Re: Move Model Line (Curve Start Point) to Reference Point</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13769342#M84458</link>
      <description>&lt;P&gt;First, have you tried without the unit conversions? sometimes Revit is weird about that. Second regarding your vector calc, instead try importing, and using the transform class, like so:&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;vector_ft = Transform.CreateTranslation(StartPt - targetPt)&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Aug 2025 18:24:14 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13769342#M84458</guid>
      <dc:creator>ctm_mka</dc:creator>
      <dc:date>2025-08-15T18:24:14Z</dc:date>
    </item>
    <item>
      <title>Re: Move Model Line (Curve Start Point) to Reference Point</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13801888#M84618</link>
      <description>&lt;P&gt;Hi &lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/6224381"&gt;@ctm_mka&lt;/a&gt;,&amp;nbsp;&lt;/P&gt;&lt;P&gt;Apologies for the delayed response — I was away on a three-week holiday. I'm now back and continuing work on the code I previously shared and asked for your assistance with.&lt;/P&gt;&lt;P&gt;I've implemented your suggestions, but I'm still encountering issues with the X-axis movement — it's not behaving as expected. I'd appreciate it if you could take another look or offer further guidance.&lt;/P&gt;&lt;P&gt;Also, just to clarify, I do need to perform unit conversion. Without it, the model line is being positioned far from the reference point.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For&amp;nbsp;ElementTransformUtils.TransformElements(...) - transform class i get error message:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":cross_mark:"&gt;❌&lt;/span&gt;Move failed for element ID 2396418: type object 'ElementTransformUtils' has no attribute 'TransformElements'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And for&amp;nbsp;ElementTransformUtils.MoveElement(...) i get error message:&lt;/P&gt;&lt;P&gt;X movement ignored for element ID 2396418&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Updated Code - move class, not with transform class like you suggested, but i did try that too:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;SPAN&gt;import&lt;/SPAN&gt;&amp;nbsp;clr&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Revit API references&lt;/SPAN&gt;&lt;BR /&gt;clr.&lt;SPAN&gt;AddReference&lt;/SPAN&gt;(&lt;SPAN&gt;'RevitAPI'&lt;/SPAN&gt;)&lt;BR /&gt;&lt;SPAN&gt;from&lt;/SPAN&gt;&amp;nbsp;Autodesk.Revit.DB&amp;nbsp;&lt;SPAN&gt;import&lt;/SPAN&gt;&amp;nbsp;ElementTransformUtils, XYZ,&amp;nbsp;&lt;SPAN&gt;LocationCurve&lt;/SPAN&gt;,&amp;nbsp;&lt;SPAN&gt;Transform&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Revit Services references&lt;/SPAN&gt;&lt;BR /&gt;clr.&lt;SPAN&gt;AddReference&lt;/SPAN&gt;(&lt;SPAN&gt;'RevitServices'&lt;/SPAN&gt;)&lt;BR /&gt;&lt;SPAN&gt;from&lt;/SPAN&gt;&amp;nbsp;RevitServices.Persistence&amp;nbsp;&lt;SPAN&gt;import&lt;/SPAN&gt;&amp;nbsp;DocumentManager&lt;BR /&gt;&lt;SPAN&gt;from&lt;/SPAN&gt;&amp;nbsp;RevitServices.Transactions&amp;nbsp;&lt;SPAN&gt;import&lt;/SPAN&gt;&amp;nbsp;TransactionManager&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Dynamo geometry extensions&lt;/SPAN&gt;&lt;BR /&gt;clr.&lt;SPAN&gt;AddReference&lt;/SPAN&gt;(&lt;SPAN&gt;'RevitNodes'&lt;/SPAN&gt;)&lt;BR /&gt;&lt;SPAN&gt;import&lt;/SPAN&gt;&amp;nbsp;Revit&lt;BR /&gt;clr.&lt;SPAN&gt;ImportExtensions&lt;/SPAN&gt;(Revit.GeometryConversion)&lt;BR /&gt;&lt;BR /&gt;doc = DocumentManager.Instance.CurrentDBDocument&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;flatten&lt;/SPAN&gt;(input):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;if&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;isinstance&lt;/SPAN&gt;(input, list):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result = []&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;for&lt;/SPAN&gt;&amp;nbsp;i&amp;nbsp;&lt;SPAN&gt;in&lt;/SPAN&gt;&amp;nbsp;input:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.&lt;SPAN&gt;extend&lt;/SPAN&gt;(&lt;SPAN&gt;flatten&lt;/SPAN&gt;(i))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;return&lt;/SPAN&gt;&amp;nbsp;result&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;return&lt;/SPAN&gt;&amp;nbsp;[input]&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;to_xyz&lt;/SPAN&gt;(pt):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;return&lt;/SPAN&gt;&amp;nbsp;pt.&lt;SPAN&gt;ToXyz&lt;/SPAN&gt;()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;except&lt;/SPAN&gt;:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;return&lt;/SPAN&gt;&amp;nbsp;pt&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;get_start_point&lt;/SPAN&gt;(element):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location = element.&lt;SPAN&gt;Location&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;if&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;isinstance&lt;/SPAN&gt;(location,&amp;nbsp;&lt;SPAN&gt;LocationCurve&lt;/SPAN&gt;&lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;return&lt;/SPAN&gt;&amp;nbsp;location.&lt;SPAN&gt;Curve&lt;/SPAN&gt;.&lt;SPAN&gt;GetEndPoint&lt;/SPAN&gt;(&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;return&lt;/SPAN&gt;&amp;nbsp;None&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# --- Inputs ---&lt;/SPAN&gt;&lt;BR /&gt;elements_input = IN[&lt;SPAN&gt;0&lt;/SPAN&gt;]&lt;BR /&gt;start_point_input = IN[&lt;SPAN&gt;1&lt;/SPAN&gt;]&lt;BR /&gt;target_point_input = IN[&lt;SPAN&gt;2&lt;/SPAN&gt;]&lt;BR /&gt;&lt;BR /&gt;elements = [&lt;SPAN&gt;UnwrapElement&lt;/SPAN&gt;(e)&amp;nbsp;&lt;SPAN&gt;for&lt;/SPAN&gt;&amp;nbsp;e&amp;nbsp;&lt;SPAN&gt;in&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;flatten&lt;/SPAN&gt;(elements_input)]&lt;BR /&gt;start_pt =&amp;nbsp;&lt;SPAN&gt;to_xyz&lt;/SPAN&gt;(&lt;SPAN&gt;flatten&lt;/SPAN&gt;(start_point_input)[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;target_pt =&amp;nbsp;&lt;SPAN&gt;to_xyz&lt;/SPAN&gt;(&lt;SPAN&gt;flatten&lt;/SPAN&gt;(target_point_input)[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Calculate vector per Autodesk suggestion (StartPt - TargetPt)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# This will move in the opposite direction (from start to target requires TargetPt - StartPt)&lt;/SPAN&gt;&lt;BR /&gt;vector =&amp;nbsp;&lt;SPAN&gt;XYZ&lt;/SPAN&gt;(&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;target_pt.&lt;SPAN&gt;X&lt;/SPAN&gt;&amp;nbsp;- start_pt.&lt;SPAN&gt;X&lt;/SPAN&gt;,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;target_pt.&lt;SPAN&gt;Y&lt;/SPAN&gt;&amp;nbsp;- start_pt.&lt;SPAN&gt;Y&lt;/SPAN&gt;,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;target_pt.&lt;SPAN&gt;Z&lt;/SPAN&gt;&amp;nbsp;- start_pt.&lt;SPAN&gt;Z&lt;/SPAN&gt;&lt;BR /&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# For demonstration, create the Transform (not used in MoveElement)&lt;/SPAN&gt;&lt;BR /&gt;translation_transform =&amp;nbsp;&lt;SPAN&gt;Transform&lt;/SPAN&gt;.&lt;SPAN&gt;CreateTranslation&lt;/SPAN&gt;(vector)&lt;BR /&gt;&lt;BR /&gt;TransactionManager.Instance.&lt;SPAN&gt;EnsureInTransaction&lt;/SPAN&gt;(doc)&lt;BR /&gt;&lt;BR /&gt;moved = []&lt;BR /&gt;warnings = []&lt;BR /&gt;tolerance =&amp;nbsp;&lt;SPAN&gt;0.001&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;# ~0.3 mm in feet&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;for&lt;/SPAN&gt;&amp;nbsp;el&amp;nbsp;&lt;SPAN&gt;in&lt;/SPAN&gt;&amp;nbsp;elements:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initial_pt =&amp;nbsp;&lt;SPAN&gt;get_start_point&lt;/SPAN&gt;(el)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;if&lt;/SPAN&gt;&amp;nbsp;initial_pt&amp;nbsp;&lt;SPAN&gt;is&lt;/SPAN&gt;&amp;nbsp;None:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warnings.&lt;SPAN&gt;append&lt;/SPAN&gt;(f&lt;SPAN&gt;"⚠ Element ID {el.Id} has no valid LocationCurve."&lt;/SPAN&gt;)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;continue&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;# Use MoveElement with XYZ vector (not the Transform)&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ElementTransformUtils.&lt;SPAN&gt;MoveElement&lt;/SPAN&gt;(doc, el.&lt;SPAN&gt;Id&lt;/SPAN&gt;, vector)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;moved.&lt;SPAN&gt;append&lt;/SPAN&gt;(el)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;final_pt =&amp;nbsp;&lt;SPAN&gt;get_start_point&lt;/SPAN&gt;(el)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;if&lt;/SPAN&gt;&amp;nbsp;final_pt:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dx =&amp;nbsp;&lt;SPAN&gt;abs&lt;/SPAN&gt;(final_pt.&lt;SPAN&gt;X&lt;/SPAN&gt;&amp;nbsp;- initial_pt.&lt;SPAN&gt;X&lt;/SPAN&gt;)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dy =&amp;nbsp;&lt;SPAN&gt;abs&lt;/SPAN&gt;(final_pt.&lt;SPAN&gt;Y&lt;/SPAN&gt;&amp;nbsp;- initial_pt.&lt;SPAN&gt;Y&lt;/SPAN&gt;)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dz =&amp;nbsp;&lt;SPAN&gt;abs&lt;/SPAN&gt;(final_pt.&lt;SPAN&gt;Z&lt;/SPAN&gt;&amp;nbsp;- initial_pt.&lt;SPAN&gt;Z&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;if&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;abs&lt;/SPAN&gt;(vector.&lt;SPAN&gt;X&lt;/SPAN&gt;) &amp;gt; tolerance&amp;nbsp;&lt;SPAN&gt;and&lt;/SPAN&gt;&amp;nbsp;dx &amp;lt; tolerance:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warnings.&lt;SPAN&gt;append&lt;/SPAN&gt;(f&lt;SPAN&gt;"⚠ X movement ignored for element ID {el.Id}"&lt;/SPAN&gt;)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;if&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;abs&lt;/SPAN&gt;(vector.&lt;SPAN&gt;Y&lt;/SPAN&gt;) &amp;gt; tolerance&amp;nbsp;&lt;SPAN&gt;and&lt;/SPAN&gt;&amp;nbsp;dy &amp;lt; tolerance:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warnings.&lt;SPAN&gt;append&lt;/SPAN&gt;(f&lt;SPAN&gt;"⚠ Y movement ignored for element ID {el.Id}"&lt;/SPAN&gt;)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;if&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;abs&lt;/SPAN&gt;(vector.&lt;SPAN&gt;Z&lt;/SPAN&gt;) &amp;gt; tolerance&amp;nbsp;&lt;SPAN&gt;and&lt;/SPAN&gt;&amp;nbsp;dz &amp;lt; tolerance:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warnings.&lt;SPAN&gt;append&lt;/SPAN&gt;(f&lt;SPAN&gt;"⚠ Z movement ignored for element ID {el.Id}"&lt;/SPAN&gt;)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warnings.&lt;SPAN&gt;append&lt;/SPAN&gt;(f&lt;SPAN&gt;"⚠ End point not found after move for element ID {el.Id}"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;except&lt;/SPAN&gt;&amp;nbsp;Exception&amp;nbsp;&lt;SPAN&gt;as&lt;/SPAN&gt;&amp;nbsp;e:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warnings.&lt;SPAN&gt;append&lt;/SPAN&gt;(f&lt;SPAN&gt;"&lt;span class="lia-unicode-emoji" title=":cross_mark:"&gt;❌&lt;/span&gt; Move failed for element ID {el.Id}: {str(e)}"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;TransactionManager.Instance.&lt;SPAN&gt;TransactionTaskDone&lt;/SPAN&gt;()&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&amp;nbsp;warnings:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OUT = (&lt;SPAN&gt;"Moved with warnings"&lt;/SPAN&gt;, warnings)&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OUT = (&lt;SPAN&gt;"All elements moved successfully"&lt;/SPAN&gt;, moved)&lt;/P&gt;</description>
      <pubDate>Tue, 09 Sep 2025 00:06:38 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13801888#M84618</guid>
      <dc:creator>Tom_Bionda</dc:creator>
      <dc:date>2025-09-09T00:06:38Z</dc:date>
    </item>
    <item>
      <title>Re: Move Model Line (Curve Start Point) to Reference Point</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13803659#M84625</link>
      <description>&lt;P&gt;hrmm. so the issue is because you need to detach it from its ref plane, but move elements wont work. Perhaps trying "ElementTransformUtils.CopyElement" and deleting the original would do the trick? something like:&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;ElementTransformUtils.CopyElement(doc, el.id, vector) 
doc.delete(el.id)&lt;/LI-CODE&gt;</description>
      <pubDate>Tue, 09 Sep 2025 20:15:47 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13803659#M84625</guid>
      <dc:creator>ctm_mka</dc:creator>
      <dc:date>2025-09-09T20:15:47Z</dc:date>
    </item>
    <item>
      <title>Re: Move Model Line (Curve Start Point) to Reference Point</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13803959#M84628</link>
      <description>&lt;P&gt;Hi &lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/6224381"&gt;@ctm_mka&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I just wanted to sincerely thank you for your help with the issue I was facing in Dynamo/Revit.&lt;/P&gt;&lt;P&gt;Your suggestion to use ElementTransformUtils.CopyElement(...) combined with doc.Delete(...) was exactly what I needed. It completely solved the problem with model lines not moving due to reference plane constraints. I also now understand that the original elements couldn't be moved directly because of how Revit constrains them — and copying them with a translation vector effectively detaches them from those constraints.&lt;/P&gt;&lt;P&gt;I ended up building a Python script that:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Calculates the movement vector between a reference point and the element,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Copies the element using that vector,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Deletes the original,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;And then safely validates the new position.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Your input really helped me get to the bottom of the issue — not only technically, but also conceptually. Thanks again for your time and guidance!&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;</description>
      <pubDate>Wed, 10 Sep 2025 03:00:55 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13803959#M84628</guid>
      <dc:creator>Tom_Bionda</dc:creator>
      <dc:date>2025-09-10T03:00:55Z</dc:date>
    </item>
    <item>
      <title>Re: Move Model Line (Curve Start Point) to Reference Point</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13804914#M84640</link>
      <description>&lt;P&gt;Excellent! Glad that worked out for you.&lt;/P&gt;</description>
      <pubDate>Wed, 10 Sep 2025 14:57:42 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/move-model-line-curve-start-point-to-reference-point/m-p/13804914#M84640</guid>
      <dc:creator>ctm_mka</dc:creator>
      <dc:date>2025-09-10T14:57:42Z</dc:date>
    </item>
  </channel>
</rss>

