AutoCAD Forum

Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

This page has been translated for your convenience with an automatic translation service. This is not an official translation and may contain errors and inaccurate translations. Autodesk does not warrant, either expressly or implied, the accuracy, reliability or completeness of the information translated by the machine translation service and will not be liable for damages or losses caused by the trust placed in the translation service.
Translate

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

Message 1 of 8

01-31-2024
03:11 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report

01-31-2024
03:11 AM

Hi, I have 2 3Dpolyline in my drawing. The first has the correct X Y (Lat,Lon) coordinates but not the correct Z values in the vertexes. The second is close to him has the correct Z values but not the correct X Y. I need to move the vertexes of the second according to those of the first but without changing the Z values. Any idea for this kind of task?

Thanks in advance

Solved! Go to Solution.

Solved by cadffm. Go to Solution.

7 REPLIES 7

Message 3 of 8

01-31-2024
03:17 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report

01-31-2024
03:17 AM

Or properties palette,

but this isn't accurate (or better, you don't know the exact X Y values to set XY accurately.

**Sebastian**

Message 4 of 8

01-31-2024
07:14 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report

01-31-2024
07:14 AM

A sample file with 3D polylines would help provide a possible solution. It's not clear how the vertices of the 3dpoly with the correct z value correlate, if at all, with the 3dpoly with the correct x ad y values.

Here's an approach that might yield a satisfatory solution.

In the image below it is assumed that the red 3dpoly has the correct x,y values and the green 3dpoly has the correct z values The yellow plane lies n the XY plane and is present to help visualize the 3D nature of the lines.

A copy is made of the red 3dpoly and then going to the top view flatten is used to project it to the XY plane where extrude is used to make a surface prependicular to the xy plane. Using 3dforbit, a view is choosen that is deemed the best orientation for projecting the green 3dpoly onto the surfaces created from the red 3dpoly. The result will look something like this.

We want the line formed by the intersetion of the magenta surfaces with the cyan surfaces. Since there isn't a command (that I am aware of) to find the intersection of sufaces you can create thin solids for each set of surfaces by first using thicken on the surfaces with a small value and then create a single solid from all the magenta solids and then all the cyan solids. The Boolean intersect command is then used to find the intersection of the two solids. shown in white below.

From here a 3Dpoly can be created from the vertices along one edge of the white solid.

lee.minardi

Message 5 of 8

01-31-2024
07:54 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report

01-31-2024
07:54 AM

Will the two of them always have the same number of vertices? If so, it should not be complicated to use the 'Coordinates VLA property, and just replace every third number [the Z coordinate of each vertex] in one of them with those from the other, then impose the revised list on the one you want to change. Does that sound like it would work?

**EDIT:**

For example, this works for me [in minimal testing]:

```
(defun C:3DPXYR ; = 3DPolyline XY coordinates Replacement
(/ 3dXY 3dZ XYobj Xobj XYcoords Zcoords n newcoords)
(if
(and
(setq 3dXY (car (entsel "\n3DPoly with correct XY coordinate values: ")))
(member '(100 . "AcDb3dPolyline") (entget 3dXY))
(setq 3dZ (car (entsel "\n3DPoly with correct Z values to have other's XY values imposed: ")))
(member '(100 . "AcDb3dPolyline") (entget 3dXY))
(= (vlax-curve-getEndParam 3dXY) (vlax-curve-getEndParam 3dZ)); same # of vertices
(= (vlax-curve-isClosed 3dXY) (vlax-curve-isClosed 3dZ)); either both closed or both open
); and
(progn ; then
(setq
XYobj (vlax-ename->vla-object 3dXY)
Zobj (vlax-ename->vla-object 3dZ)
XYcoords (vlax-get XYobj 'Coordinates)
Zcoords (vlax-get Zobj 'Coordinates)
); setq
(repeat (setq n (length Zcoords))
(setq newcoords
(cons
(nth
(setq n (1- n))
(if (= (rem n 3) 2) Zcoords XYcoords)
; take every third one from Z list, others from XY
); nth
newcoords
); cons
); setq
); repeat
(vlax-put Zobj 'Coordinates newcoords); impose revised coordinates
); progn
(prompt "\nMust be two 3DPolylines with same number of vertices."); else
); if
(prin1)
)
```

It could omit the check on whether they're either both open or both closed, if preferred, or the no-go prompt could be extended to mention that requirement.

Message 6 of 8

01-31-2024
01:25 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report

01-31-2024
01:25 PM

Thank you very much. The code works great but in my case the number of vertex is not to same. So I had to do it manually.

Thanks again sir

Message 7 of 8

01-31-2024
01:30 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report

01-31-2024
01:30 PM

@yu85.info wrote:

.... in my case the number of vertex is not to same. So I had to do it manually. ....

That seems the only possible way, under the circumstances. You would need to make choices about which vertices you assigned which values from which vertices of the other Polyline, if they don't match up one for one. Maybe if you could define some criteria for determining that, it could be automated, but it's hard to imagine.

Message 8 of 8

01-31-2024
01:33 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report

01-31-2024
01:33 PM

Its ok sir, do not bother yourself sometimes I just have to deal with my mistakes manually 🙂

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

Can't find what you're looking for? Ask the community or share your knowledge.