How to create an Automatic 2d cylinder shadow like a youtube video

How to create an Automatic 2d cylinder shadow like a youtube video

engr_a_rocky
Explorer Explorer
283 Views
2 Replies
Message 1 of 3

How to create an Automatic 2d cylinder shadow like a youtube video

engr_a_rocky
Explorer
Explorer
0 Likes
284 Views
2 Replies
Replies (2)
Message 2 of 3

komondormrex
Mentor
Mentor

something jist like that. two offset lines should be picked.

(defun c:shaded_cylinder (/ right_edge right_edge_mid_point left_edge cylinder_width cylinder_height mid_point mid_right_angle grread_data parts index part_list lines
			    line_list cylinder_group 
			 )
	(setq right_edge (entsel "\nPick 1st edge of cylinder: ")
		  right_edge_mid_point (mapcar '* '(0.5 0.5) (mapcar '+ (vlax-curve-getstartpoint (car right_edge)) (vlax-curve-getendpoint (car right_edge))))
		  left_edge (entsel "\nPick 2nd edge of cylinder: ")
		  cylinder_width (distance right_edge_mid_point (setq left_edge_mid_point (vlax-curve-getclosestpointto (car left_edge) right_edge_mid_point)))
		  cylinder_height (distance (vlax-curve-getstartpoint (car right_edge)) (vlax-curve-getendpoint (car right_edge)))
		  mid_point (mapcar '* '(0.5 0.5) (mapcar '+ right_edge_mid_point left_edge_mid_point)) 
		  mid_right_angle (angle mid_point right_edge_mid_point)  
	)
	(while (/= 3 (car (setq grread_data (grread t 12 0))))
		(redraw)
		(setq parts (fix (* 10 (/ (distance mid_point
						    (inters mid_point (polar mid_point mid_right_angle 1)
							    (cadr grread_data) (polar (cadr grread_data) (+ mid_right_angle (* 0.5 pi)) 1)
							    nil
						    )
					  )
					  (* 0.5 cylinder_width)
				       )
				 )
			    )   
		      index 0
		      part_list nil
		)
	  	(if (zerop (rem parts 2)) (setq parts (1+ parts)))
		(setq lines
			  (mapcar '(lambda (part_angle) (list 1 (polar (setq point (polar mid_point mid_right_angle (* 0.5 cylinder_width (cos part_angle))))
														   (+ mid_right_angle (* 0.5 pi)) (* 0.5 cylinder_height)
													)
									      			(polar point (- mid_right_angle (* 0.5 pi)) (* 0.5 cylinder_height))
											)
					   )
					   (mapcar '(lambda (part) (* (/ pi parts) part))
								(repeat (1- parts) (setq part_list (append part_list (list (setq index (1+ index))))))
					   )
			  )
		)
		(mapcar 'grvecs lines) 
	)
	(redraw)
  	(setq line_list
		(mapcar '(lambda (line) (vla-addline (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
											  (vlax-3d-point (cadr line))
											  (vlax-3d-point (caddr line))
								)
				 )
				 lines
		)
		cylinder_group  (vla-add (vla-get-groups (vla-get-activedocument (vlax-get-acad-object))) (vl-filename-base (vl-filename-mktemp "Clndr")))
	)
  	(vla-appenditems cylinder_group (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (1+ (length line_list))))
					  		     (append line_list (mapcar 'vlax-ename->vla-object (mapcar 'car (list right_edge left_edge))))
					)
	)
	(princ)
)


 

 

 

Message 3 of 3

engr_a_rocky
Explorer
Explorer
thanks a lot
0 Likes