RashidAziz Posted June 14, 2019 Posted June 14, 2019 Hi I need AutoLISP to make PLINE between Center Point of all selected CIRCLES (with FENCE option) Like PIC-01 (Select CIRCLES with Fence option and also use the same Sequence to Draw PLINE in Center of Circles) PIC-02 (Showing Pline Path) PIC-03 (Showing final Result. Start of Pline from First Selected Circle, then Continue as selected) Thanks so much in Advance Quote
dlanorh Posted June 14, 2019 Posted June 14, 2019 (edited) Try this. It asks you to construct a pline using grread and grdraw, and uses the coordinates from this to generate a list that can be fed into the fence selection of a selection set. You don't need to click inside every circle, just crossing part of it will do. The generated pline imitates the order of the previous line but connects the centres of the circles. (defun c:ssf_grl (/ *error* c_doc c_spc sv_lst sv_vals pt p_lst flg gr ss cnt v_lst ent) (defun *error* ( msg ) (mapcar 'setvar sv_lst sv_vals) (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc)) (if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")) (princ (strcat "\nOops an Error : " msg " occurred."))) (princ) );end_*error*_defun (setq c_doc (vla-get-activedocument (vlax-get-acad-object)) c_spc (vlax-get-property c_doc (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace)) sv_lst (list 'osmode 'cmdecho) sv_vals (mapcar 'getvar sv_lst) pt (getpoint "\nSelect the Start Point : ") p_lst (list pt) flg T );end_setq (mapcar 'setvar sv_lst '(0 0)) (princ "\nSelect the Next Point (or right click to exit) : ") (while (and (setq gr (grread T 12 0)) flg) ;;loops until flg = nil tracking cursor position (redraw) (grvecs (cons -1 (apply 'append (mapcar 'list p_lst (cdr p_lst))))) (cond ( (= 5 (car gr)) (grdraw (car p_lst) (cadr gr) 3 1)) ( (= 3 (car gr)) (setq p_lst (cons (cadr gr) p_lst)) (princ "\nSelect the Next Point (or right click to exit) : ") ) (T (redraw) (setq flg nil)) );end_cond );end_while (setq ss (ssget "F" (reverse p_lst) '((0 . "CIRCLE")))) (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc)) (vla-startundomark c_doc) (cond (ss (repeat (setq cnt (sslength ss)) (setq v_lst (cons (cdr (assoc 10 (entget (ssname ss (setq cnt (1- cnt)))))) v_lst)) );end_repeat (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (1+ (length v_lst)))) (mapcar '(lambda (x) (cons 10 x)) v_lst) );end_append );end_entmakex ) );end_cond (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc)) (mapcar 'setvar sv_lst sv_vals) (princ) );end_defun Edited June 14, 2019 by dlanorh 1 Quote
kpblc Posted June 15, 2019 Posted June 15, 2019 (vl-load-com) (defun t1 (/ adoc selset) (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "circle")))))))) 'pickset ) ;_ end of = (progn (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object)))) (setq selset ((lambda (/ tab item) (repeat (setq tab nil item (sslength selset) ) ;_ end setq (setq tab (cons (assoc 10 (entget (ssname selset (setq item (1- item))))) tab)) ) ;_ end of repeat ) ;_ end of lambda ) ) ;_ end of setq (entmakex (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline")) (list (cons 90 (length selset))) selset ) ;_ end of append ) ;_ end of entmakex (vla-endundomark adoc) ) ;_ end of progn ) ;_ end of if (princ) ) ;_ end of defun Quote
RashidAziz Posted June 18, 2019 Author Posted June 18, 2019 (edited) Your LISP working fine. Thanks so much dlanorh. Sir kpblc Thanks so much. I add c:T1 and using "F" for selection and now working fine. Thanks again both of you. Edited June 18, 2019 by RashidAziz Quote
kpblc Posted June 18, 2019 Posted June 18, 2019 Load it and type (t1) with bracketsю Or you can change code : replace (defun t1( to (defun c;AnyCommandNameYouLike( Quote
BIGAL Posted June 19, 2019 Posted June 19, 2019 Add (t1) as last line then will run after load. 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.