Spacing Of Drawers With No Drawer Front Within Unit

Spacing Of Drawers With No Drawer Front Within Unit

paul9ZMBV
Advocate Advocate
456 Views
3 Replies
Message 1 of 4

Spacing Of Drawers With No Drawer Front Within Unit

paul9ZMBV
Advocate
Advocate

Hi

Following on from komondormrex excellent lisp to position drawers with drawer fronts I need the following variation.

 

Link for reference

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-to-position-drawers-automatical...

 

New requirement:

I have produced a dynamic block so drawers can be adjusted for height and depth (according to the runners)

I would love to be able to position them automatically within a unit according to the height available.

They have no drawer fronts.

 

So ideally this is what I'm looking for:

 

  1. Select the 1st horizontal line (line goes blue to show its been selected)
  2. Select the 2nd horizontal line (line goes blue to show its been selected)
  3. The height between the above is taken automatically
  4. The user is then asked to input the number of drawers required
  5. The user is then asked to input the set back from the front edge of the carcass
  6. The user is then asked to input the space between the drawer fronts (40mm on attached sample)
  7. The user is then asked to input the length of the drawer runner (depth of drawer) (although this can also be adjusted by the dynamic block afterwards)
  8. The drawers are then positioned automically.

 

The following parameters would have to be adhered to:

 

  • Spacing to the underside of the first drawer needs to be 5mm

Please see sample attached

 

Any help much appreciated

0 Likes
Accepted solutions (1)
457 Views
3 Replies
Replies (3)
Message 2 of 4

komondormrex
Mentor
Mentor
Accepted solution

hey,

bet it was there...

(defun c:place_drawers_no_front (/  interior_h_line_1 redraw_ interior_h_line_2 line_ends min_x max_x min_y max_y unit_interior_depth unit_interior_height
						   			drawer_ledge drawer_ledge_gap drawer_runner_increment drawers_number drawer_set_back drawer_height
						   			drawer_runner_calculated drawer_runner drawer_block index
					    		)
	(redraw)
	(defun get_dyn_property_by_name (dyn_property_name insert_object / dyn_property_found)
		(if (vl-some '(lambda (dyn_property) (= dyn_property_name (vla-get-propertyname (setq dyn_property_found dyn_property))))
					  (vlax-invoke insert_object 'getdynamicblockproperties)
			) dyn_property_found nil
		)
	)
	(setq init_d_values (if (null init_d_values) (setq init_d_values '(3 70 40)) init_d_values)
		  interior_h_line_1 (car (entsel "\nPick unit interior horizontal 1st line: "))
		  redraw_ (redraw interior_h_line_1 3)
		  interior_h_line_2 (car (entsel "\nPick unit interior horizontal 2nd line: "))
		  redraw_ (redraw interior_h_line_2 3)
		  line_ends (apply 'append (mapcar '(lambda (line) (list (vlax-get (vlax-ename->vla-object line) 'startpoint)
												  		   		 (vlax-get (vlax-ename->vla-object line) 'endpoint)
														   )
											)
											(list interior_h_line_1 interior_h_line_2)
							 	   )
					)
		  min_x (apply 'min (mapcar 'car line_ends))
		  max_x (apply 'max (mapcar 'car line_ends))
		  min_y (apply 'min (mapcar 'cadr line_ends))
		  max_y (apply 'max (mapcar 'cadr line_ends))
		  unit_interior_depth (- max_x min_x)
		  unit_interior_height (- max_y min_y)
		  drawer_ledge     		  15
		  drawer_ledge_gap        5
		  drawer_runner_increment 20
		  drawers_number (getint (strcat "\nEnter number of drawers <"   (itoa (nth 0 init_d_values)) ">: "))
		  drawers_number (if (null drawers_number)   					 	   (nth 0 init_d_values) drawers_number)
	      drawer_set_back (getint (strcat "\nEnter drawer set back <"    (itoa (nth 1 init_d_values)) ">: "))
		  drawer_set_back (if (null drawer_set_back) 						   (nth 1 init_d_values) drawer_set_back)
	      drawer_gap (getint (strcat "\nEnter drawer gap <"    	         (itoa (nth 2 init_d_values)) ">: "))
		  drawer_gap (if (null drawer_gap) 						         	   (nth 2 init_d_values) drawer_gap)
		  drawer_height (/ (- unit_interior_height (+ drawer_ledge_gap (* drawers_number (+ drawer_ledge drawer_gap)))) drawers_number)
		  drawer_runner_calculated (* drawer_runner_increment (fix (/ (- unit_interior_depth drawer_set_back drawer_runner_increment) drawer_runner_increment)))
	      drawer_runner (getint (strcat "\nEnter drawer runner <" (itoa drawer_runner_calculated) ">: "))		;	Drawer Runner
		  drawer_runner (if (null drawer_runner) drawer_runner_calculated drawer_runner)
		  drawer_block (vla-insertblock (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
									  	(vlax-3d-point (setq 1st_insert_point (list (- max_x drawer_set_back) (+ min_y drawer_ledge_gap drawer_ledge))))
									  	"Drawer Side No Front"
									  	1 1 1 0
					   )
		  index 0
	)
	(vlax-put (get_dyn_property_by_name "Height" drawer_block) 'value drawer_height)
	(vlax-put (get_dyn_property_by_name "Runner" drawer_block) 'value (float drawer_runner))
	(repeat (1- drawers_number)
		(vla-move (vla-copy drawer_block)
				  (vlax-3d-point 1st_insert_point)
				  (vlax-3d-point (list (car 1st_insert_point) (+ (cadr 1st_insert_point) (* (1+ index) (+ drawer_height drawer_gap drawer_ledge)))))
		)
		(setq index (1+ index))
	)
	(setq init_d_values (list drawers_number drawer_set_back drawer_gap))
	(redraw interior_h_line_1 4)
	(redraw interior_h_line_2 4)
	(princ)
)
0 Likes
Message 3 of 4

paul9ZMBV
Advocate
Advocate

Thanks komondormrex

Its perfect as always, much appreciated

Thank you

0 Likes
Message 4 of 4

paul9ZMBV
Advocate
Advocate

Hi komondormrex,

 

I have a problem, the above code works then all of a sudden it fails to work for no reason, please see attached video, why would this be ?

many thanks

0 Likes