jeremyearle5 Posted January 12, 2012 Posted January 12, 2012 I need to know how to get the start and end points of a polyline. I'm a rookie at this and just learned how to pull out the start and endpoints of a line and when I went to do it to a polyline I was completely lost. Another question: I use a comand that takes a line and turns it into a perforated line with each segment being a separate poly line. It creates them all in order down the line. Immediately following this command, would there be a way to call the first poly line created to extract its data, without manually selecting it? Quote
Dadgad Posted January 12, 2012 Posted January 12, 2012 (edited) I doubt this was how you did it way back on Autocad 2000, but on 2012 at the commandline type LIST> ENTER then select your polyline or line, or whatever else, then look down at the bottom of the list for the coordinates, as shown on the attachment. Whoops, I have inadvertently strayed into the deep end of the pool, just noticed that you are looking for coding help. Never mind. Edited January 12, 2012 by Dadgad Quote
Lee Mac Posted January 12, 2012 Posted January 12, 2012 I need to know how to get the start and end points of a polyline. I'm a rookie at this and just learned how to pull out the start and endpoints of a line and when I went to do it to a polyline I was completely lost. Assuming you are referring to an LWPolyline entity and not a 3D Polyline or 2D Polyline, there are three ways that you can go about doing this: 1) Using the DXF Group codes of the LWPolyline entity: The vertices of an LWPolyline are stored in multiple DXF Group 10 pairs, we can get them all using a simple foreach loop, then use the entries at each end of the list (noting that the list will be reversed by its construction using cons): (foreach pair (entget <LWPolyline Entity>) (if (= 10 (car pair)) (setq lst (cons (cdr pair) lst)) ) ) (setq p1 (last lst)) (setq p2 (car lst)) Or you can get the first and last pair directly from the start and end of the DXF data: (setq el (entget <LWPolyline Entity>) p1 (cdr (assoc 10 el)) p2 (cdr (assoc 10 (reverse el))) ) 2) Using the Coordinates property of the LWPolyline VLA-Object: When working with Visual LISP remember to call: (vl-load-com) once during the session to load the Visual LISP functions. After converting the LWPolyline Entity to a VLA-Object using the vlax-ename->vla-object you can retrieve the Coordinates property and again use the start and end of the list: (setq obj (vlax-ename->vla-object <LWPolyline Entity>) lst (vlax-get obj 'coordinates) p1 (list (car lst) (cadr lst)) lst (reverse lst) p2 (list (cadr lst) (car lst)) ) Note that I use the undocumented vlax-get function to avoid the conversion from a Variant to a SafeArray, then to a List. 3) Using the vlax-curve* functions: This is probably the easiest method since the vlax-curve* functions are intuitive to use and will work with all curve objects (Lines, Arcs, Circles, Ellipses, LWPolylines, Polylines, Splines etc.) Again, you will need to call (vl-load-com) to load the Visual LISP functions, then: (setq p1 (vlax-curve-getstartpoint <LWPolyline Entity>) p2 (vlax-curve-getendpoint <LWPolyline Entity>) ) Another question: I use a comand that takes a line and turns it into a perforated line with each segment being a separate poly line. It creates them all in order down the line. Immediately following this command, would there be a way to call the first poly line created to extract its data, without manually selecting it? If you are using command calls to create your LWPolylines, before creating the LWPolylines, store the last entity in the database using entlast, then, following the creation of the LWPolylines you can step through each entity in the database which follows the 'entlast' entity using the entnext function. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.