<?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: joining multiple polylines at once in Visual LISP, AutoLISP and General Customization Forum</title>
    <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12127303#M26951</link>
    <description>&lt;P&gt;check the following code with&amp;nbsp;limitations:&lt;/P&gt;&lt;P&gt;1. plines with the same color are joined, regardless of their layer.&lt;/P&gt;&lt;P&gt;2. there are matched plines' pairs and every pair is one in quantity.&lt;/P&gt;&lt;P&gt;3. every pline has no arc segment, otherwise resulting plines will be distorted.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="lisp"&gt;;**************************************************************************************************************************************************

(defun reverse_coordinates (coordinates_raw_list / reversed_list)
  	(if coordinates_raw_list
		(setq reversed_list (append
									(reverse_coordinates (cddr coordinates_raw_list))
									(list (car coordinates_raw_list) (cadr coordinates_raw_list))
							)
		)
	)
  	reversed_list
)

;**************************************************************************************************************************************************

(defun remove_duplicates (_list / duplicateless_list)
	(while _list
		(if (not (member (setq list_element (car _list)) (setq _list (cdr _list))))
			(setq duplicateless_list (cons list_element duplicateless_list))
		)
	)
	duplicateless_list
)

;**************************************************************************************************************************************************

(defun join_plines (pair)
	(cond 
		(
			(= 1 (cdar pair))
				(setq joined_pline_coordinates_raw_list (append (reverse_coordinates (vlax-get (vlax-ename-&amp;gt;vla-object (cadr pair)) 'coordinates))
																(vlax-get (vlax-ename-&amp;gt;vla-object (caddr pair)) 'coordinates)
														)
				)
		)
		(
			(= 2 (cdar pair))
				(setq joined_pline_coordinates_raw_list (append (reverse_coordinates (vlax-get (vlax-ename-&amp;gt;vla-object (cadr pair)) 'coordinates))
																(reverse_coordinates (vlax-get (vlax-ename-&amp;gt;vla-object (caddr pair)) 'coordinates))
														)
				)
		)
		(
			(= 3 (cdar pair))
				(setq joined_pline_coordinates_raw_list (append (vlax-get (vlax-ename-&amp;gt;vla-object (cadr pair)) 'coordinates)
																(vlax-get (vlax-ename-&amp;gt;vla-object (caddr pair)) 'coordinates)
														)
				)
		)
		(
			(= 4 (cdar pair))
				(setq joined_pline_coordinates_raw_list (append (vlax-get (vlax-ename-&amp;gt;vla-object (cadr pair)) 'coordinates)
																(reverse_coordinates (vlax-get (vlax-ename-&amp;gt;vla-object (caddr pair)) 'coordinates))
														)
				)
		)
	)
	(entdel (caddr pair))
	(vla-put-coordinates (vlax-ename-&amp;gt;vla-object (cadr pair)) 
						 (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 1 (length joined_pline_coordinates_raw_list)))
	  										  joined_pline_coordinates_raw_list
	  					 )
	)
)

;**************************************************************************************************************************************************

(defun c:joins_pline_pairs (/ pline_color_list color_list one_color_pline_list one_color_pline min_dist_list closest_pair)
	(setq pline_color_list (mapcar '(lambda (pline) (cons (getpropertyvalue pline "color") pline)) 
						   (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "lwpolyline")))))))
		  color_list (remove_duplicates (mapcar 'car pline_color_list))
	)
	(foreach color color_list
		(setq one_color_pline_list (mapcar 'cdr 
										    (vl-remove-if-not '(lambda (pline) (equal color (car pline))) 
												  			   pline_color_list
										    )
								   )
		)
		(while (&amp;lt; 1 (length one_color_pline_list))
			(setq one_color_pline (car one_color_pline_list)
				  one_color_pline_list (cdr one_color_pline_list)
				  min_dist_list (mapcar '(lambda (pline) (list (car (vl-sort (list (cons (distance (vlax-curve-getstartpoint one_color_pline) (vlax-curve-getstartpoint pline)) 1) 
														 					 	   (cons (distance (vlax-curve-getstartpoint one_color_pline) (vlax-curve-getendpoint pline)) 2)
																			 	   (cons (distance (vlax-curve-getendpoint one_color_pline) (vlax-curve-getstartpoint pline)) 3)
																			 	   (cons (distance (vlax-curve-getendpoint one_color_pline) (vlax-curve-getendpoint pline)) 4)
																  	   		  )    
																  	  		 '(lambda (distance_1 distance_2) (&amp;lt; (car distance_1) (car distance_2)))
														 	   		)
															   )
															   one_color_pline
															   pline
														 )
										 )
										 one_color_pline_list
								)      
			)
			(setq closest_pair (car (vl-sort min_dist_list '(lambda (distance_1 distance_2) (&amp;lt; (caar distance_1) (caar distance_2)))))
				  one_color_pline_list (vl-remove (last closest_pair) one_color_pline_list)   
			)  
			(join_plines closest_pair)
		)
	)
)

;**************************************************************************************************************************************************&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Wed, 26 Jul 2023 11:17:07 GMT</pubDate>
    <dc:creator>komondormrex</dc:creator>
    <dc:date>2023-07-26T11:17:07Z</dc:date>
    <item>
      <title>joining multiple polylines at once</title>
      <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12104898#M26944</link>
      <description>&lt;P&gt;hi all&lt;BR /&gt;is there a way that i can join multiple pairs of polylines that have gaps in between them simultaneously? i want to be able to select all pairs like in the image (each pair in different color is in a different layer) and a segment be added to connect each pair and join each pair, i can click on every pline and add a vertex and connect it to the other one and then join them but considering i have tens of thousands of these to do it would take days to do and i also tried using mpedit but using fillet or add as the jointype will result in either changing the original pline or it will just connect nearest plines to each other and changes their layer&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot (349).png" style="width: 617px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1241041i00AD1AAA2BF00B11/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot (349).png" alt="Screenshot (349).png" /&gt;&lt;/span&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot (350).png" style="width: 601px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1241042i972B431E9ACFF2B9/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot (350).png" alt="Screenshot (350).png" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 16 Jul 2023 11:17:50 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12104898#M26944</guid>
      <dc:creator>arefemami98</dc:creator>
      <dc:date>2023-07-16T11:17:50Z</dc:date>
    </item>
    <item>
      <title>Re: joining multiple polylines at once</title>
      <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12105069#M26945</link>
      <description>&lt;P&gt;Perhaps the discussion on this thread would help&lt;/P&gt;&lt;P&gt;&lt;A href="https://forums.augi.com/showthread.php?125219-Join-all-lines-in-a-drawing" target="_blank"&gt;https://forums.augi.com/showthread.php?125219-Join-all-lines-in-a-drawing&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 16 Jul 2023 14:17:40 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12105069#M26945</guid>
      <dc:creator>paullimapa</dc:creator>
      <dc:date>2023-07-16T14:17:40Z</dc:date>
    </item>
    <item>
      <title>Re: joining multiple polylines at once</title>
      <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12105317#M26946</link>
      <description>&lt;P&gt;unfortunately codes provided in that thread does not seem to help since they need the two polylines to touch eachother in the first place&lt;/P&gt;</description>
      <pubDate>Sun, 16 Jul 2023 18:23:37 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12105317#M26946</guid>
      <dc:creator>arefemami98</dc:creator>
      <dc:date>2023-07-16T18:23:37Z</dc:date>
    </item>
    <item>
      <title>Re: joining multiple polylines at once</title>
      <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12106172#M26947</link>
      <description>&lt;P&gt;Use command PEDIT join option with FUZZ value set to value a bit greater than a distance between lines (polylines) you want to joint. This way lines to join don't need to have zero distance, but they need to be 2d with equal Z value for all start and end point.&lt;/P&gt;</description>
      <pubDate>Mon, 17 Jul 2023 08:01:11 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12106172#M26947</guid>
      <dc:creator>hak_vz</dc:creator>
      <dc:date>2023-07-17T08:01:11Z</dc:date>
    </item>
    <item>
      <title>Re: joining multiple polylines at once</title>
      <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12106422#M26948</link>
      <description>&lt;P&gt;using pedit for each pair seperately could work but scince there are mane of these it would take a long time, i was hoping to find a way to select multiple pairs and join them at once but doing that with pedit will change their layer and also connects different pairs to each other&lt;/P&gt;</description>
      <pubDate>Mon, 17 Jul 2023 10:04:18 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12106422#M26948</guid>
      <dc:creator>arefemami98</dc:creator>
      <dc:date>2023-07-17T10:04:18Z</dc:date>
    </item>
    <item>
      <title>Re: joining multiple polylines at once</title>
      <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12112139#M26949</link>
      <description>&lt;P&gt;are you using only line-segmented polylines?&lt;/P&gt;</description>
      <pubDate>Wed, 19 Jul 2023 14:24:28 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12112139#M26949</guid>
      <dc:creator>komondormrex</dc:creator>
      <dc:date>2023-07-19T14:24:28Z</dc:date>
    </item>
    <item>
      <title>Re: joining multiple polylines at once</title>
      <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12118166#M26950</link>
      <description>&lt;P&gt;yes, all of them are straight&lt;/P&gt;</description>
      <pubDate>Fri, 21 Jul 2023 19:02:57 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12118166#M26950</guid>
      <dc:creator>arefemami98</dc:creator>
      <dc:date>2023-07-21T19:02:57Z</dc:date>
    </item>
    <item>
      <title>Re: joining multiple polylines at once</title>
      <link>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12127303#M26951</link>
      <description>&lt;P&gt;check the following code with&amp;nbsp;limitations:&lt;/P&gt;&lt;P&gt;1. plines with the same color are joined, regardless of their layer.&lt;/P&gt;&lt;P&gt;2. there are matched plines' pairs and every pair is one in quantity.&lt;/P&gt;&lt;P&gt;3. every pline has no arc segment, otherwise resulting plines will be distorted.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="lisp"&gt;;**************************************************************************************************************************************************

(defun reverse_coordinates (coordinates_raw_list / reversed_list)
  	(if coordinates_raw_list
		(setq reversed_list (append
									(reverse_coordinates (cddr coordinates_raw_list))
									(list (car coordinates_raw_list) (cadr coordinates_raw_list))
							)
		)
	)
  	reversed_list
)

;**************************************************************************************************************************************************

(defun remove_duplicates (_list / duplicateless_list)
	(while _list
		(if (not (member (setq list_element (car _list)) (setq _list (cdr _list))))
			(setq duplicateless_list (cons list_element duplicateless_list))
		)
	)
	duplicateless_list
)

;**************************************************************************************************************************************************

(defun join_plines (pair)
	(cond 
		(
			(= 1 (cdar pair))
				(setq joined_pline_coordinates_raw_list (append (reverse_coordinates (vlax-get (vlax-ename-&amp;gt;vla-object (cadr pair)) 'coordinates))
																(vlax-get (vlax-ename-&amp;gt;vla-object (caddr pair)) 'coordinates)
														)
				)
		)
		(
			(= 2 (cdar pair))
				(setq joined_pline_coordinates_raw_list (append (reverse_coordinates (vlax-get (vlax-ename-&amp;gt;vla-object (cadr pair)) 'coordinates))
																(reverse_coordinates (vlax-get (vlax-ename-&amp;gt;vla-object (caddr pair)) 'coordinates))
														)
				)
		)
		(
			(= 3 (cdar pair))
				(setq joined_pline_coordinates_raw_list (append (vlax-get (vlax-ename-&amp;gt;vla-object (cadr pair)) 'coordinates)
																(vlax-get (vlax-ename-&amp;gt;vla-object (caddr pair)) 'coordinates)
														)
				)
		)
		(
			(= 4 (cdar pair))
				(setq joined_pline_coordinates_raw_list (append (vlax-get (vlax-ename-&amp;gt;vla-object (cadr pair)) 'coordinates)
																(reverse_coordinates (vlax-get (vlax-ename-&amp;gt;vla-object (caddr pair)) 'coordinates))
														)
				)
		)
	)
	(entdel (caddr pair))
	(vla-put-coordinates (vlax-ename-&amp;gt;vla-object (cadr pair)) 
						 (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 1 (length joined_pline_coordinates_raw_list)))
	  										  joined_pline_coordinates_raw_list
	  					 )
	)
)

;**************************************************************************************************************************************************

(defun c:joins_pline_pairs (/ pline_color_list color_list one_color_pline_list one_color_pline min_dist_list closest_pair)
	(setq pline_color_list (mapcar '(lambda (pline) (cons (getpropertyvalue pline "color") pline)) 
						   (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "lwpolyline")))))))
		  color_list (remove_duplicates (mapcar 'car pline_color_list))
	)
	(foreach color color_list
		(setq one_color_pline_list (mapcar 'cdr 
										    (vl-remove-if-not '(lambda (pline) (equal color (car pline))) 
												  			   pline_color_list
										    )
								   )
		)
		(while (&amp;lt; 1 (length one_color_pline_list))
			(setq one_color_pline (car one_color_pline_list)
				  one_color_pline_list (cdr one_color_pline_list)
				  min_dist_list (mapcar '(lambda (pline) (list (car (vl-sort (list (cons (distance (vlax-curve-getstartpoint one_color_pline) (vlax-curve-getstartpoint pline)) 1) 
														 					 	   (cons (distance (vlax-curve-getstartpoint one_color_pline) (vlax-curve-getendpoint pline)) 2)
																			 	   (cons (distance (vlax-curve-getendpoint one_color_pline) (vlax-curve-getstartpoint pline)) 3)
																			 	   (cons (distance (vlax-curve-getendpoint one_color_pline) (vlax-curve-getendpoint pline)) 4)
																  	   		  )    
																  	  		 '(lambda (distance_1 distance_2) (&amp;lt; (car distance_1) (car distance_2)))
														 	   		)
															   )
															   one_color_pline
															   pline
														 )
										 )
										 one_color_pline_list
								)      
			)
			(setq closest_pair (car (vl-sort min_dist_list '(lambda (distance_1 distance_2) (&amp;lt; (caar distance_1) (caar distance_2)))))
				  one_color_pline_list (vl-remove (last closest_pair) one_color_pline_list)   
			)  
			(join_plines closest_pair)
		)
	)
)

;**************************************************************************************************************************************************&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 26 Jul 2023 11:17:07 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/joining-multiple-polylines-at-once/m-p/12127303#M26951</guid>
      <dc:creator>komondormrex</dc:creator>
      <dc:date>2023-07-26T11:17:07Z</dc:date>
    </item>
  </channel>
</rss>

