daveacad Posted November 26, 2015 Posted November 26, 2015 Hi people! I'm looking for some help: I need to cut plexiglas with laser. The form, drawed with Autocad, come with many circles and arcs. Know someone a routine or lisp able to click entities to reorder the sortment? And, second, it will be wonderful to add a progressive number to the entities to visually control the sortment of them! (I hope the question I made is clear. My english is very poor). Ciao, Daveacad Quote
Lee Mac Posted November 26, 2015 Posted November 26, 2015 Know someone a routine or lisp able to click entities to reorder the sortment? What do you mean by 'reorder the sortment'? To help us to understand, could you explain how you perform this operation manually? Quote
BIGAL Posted November 27, 2015 Posted November 27, 2015 Sounds like nesting to minimise wastage Quote
daveacad Posted November 27, 2015 Author Posted November 27, 2015 Hi Lee, see the pictures! As You can see, on the right there is the draw I've made, with the order of entities comes by drawing (it is only an example. I did not check the right order!!!). On the left side the same draw with the same entities, but ordered to let the cut made by the laser working better. Under, I've drawed the path followed by the laser. What I need is the possibility to select entities and decide wich one will be "drawed" before another one. This comes becouse the path of laser cutting depends from the order entiteis are inserted in the draw. This 2nd picture is the result of the first cut: P.S. I've supposed the arcs are joined in a pline! Ciao, Davide Quote
BIGAL Posted November 27, 2015 Posted November 27, 2015 Not sure you can reorder the entities in a dwg database but you can copy to another dwg so in correct order, it may be a case of using copy & paste. Using a pick objects and some smart tools would automate the pick order. A ssget "F" would pick all circles in correct order. Need a tester code to see the order is working say a number at each object maybe using assoc 10. (setq ss (ssget)) (command "copyclip" ss "") works so need to make a smart selection set using SSADD. Would do it now but going out for lunch for the mother in laws birthday, let the motherin law jokes begin. Quote
Lee Mac Posted November 28, 2015 Posted November 28, 2015 Try the following: ;; OE (Order Entities) - Lee Mac (defun c:oe ( / cnt ent enx new sbx sub ) (setq cnt 1) (while (progn (setvar 'errno 0) (setq ent (car (entsel (strcat "\nSelect object " (itoa cnt) " <done>: ")))) (cond ( (= 7 (getvar 'errno)) (princ "\nMissed, try again.") ) ( (null ent) nil ) ( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 (setq enx (entget ent))))))))) (princ "\nSelected object is on a locked layer.") ) ( (and (setq new (entmakex enx)) (or (/= 1 (cdr (assoc 66 enx))) (progn (setq sub (entnext ent) sbx (entget sub) ) (while (/= "SEQEND" (cdr (assoc 0 sbx))) (entmake sbx) (setq sub (entnext sub) sbx (entget sub) ) ) (entmake sbx) ) ) ) (entdel ent) (redraw new 3) (setq cnt (1+ cnt)) ) ( (princ "\nUnable to reorder selected object.")) ) ) ) (command "_.regen") (princ) ) Quote
BIGAL Posted November 28, 2015 Posted November 28, 2015 Lee that would be 19 picks my idea 4 for circles last 1 for outside pline shape falls out. 5 picks. need a smart while etc fence or one at a time. Quote
BIGAL Posted November 28, 2015 Posted November 28, 2015 Part 2 a test I have used text with numbers to check order of objects. Its hard coded to match test pattern but the method is there. (defun c:test ( / pt1 pt2 pt3 pt4 pt5 ss x) (setq pt1 (getpoint)) (setq pt2 (getpoint)) (setq pt3 (getpoint)) (setq pt4 (getpoint)) (setq pt5 (getpoint)) (setq ss (ssget "F" (list pt1 pt2 pt3 pt4 pt5))) (setq x (sslength ss)) (repeat (sslength ss) (princ (vla-get-textstring (vlax-ename->vla-object(ssname ss (setq x ( - x 1)))))) (princ "\n") ) ) Quote
daveacad Posted November 28, 2015 Author Posted November 28, 2015 Hi guys, thank you for your work!!! The code made by Lee work properly. It will much useful with all the normal selection options; with more than 200 entities it take time to pick one by one. About the code made by Bigal, I can't say anything... I'm not good with Lisp! I've tried to use it, but I don't understood how it work. Anyway thank you again for the interest. And now, mr. Lee, could you please add the ability to use all the selection options of AutoCAD? Labeling items with numbers will be also nice, just with normal text. I wish you a wonderful wee-end!!! Grazie, Davide Quote
Least Posted November 28, 2015 Posted November 28, 2015 Hi Lee, I think this could be useful for me. I will give it a test as soon as I can. My survey instrument can import dxfs and the order the entities are in in the dxf corresponds to the point number the vertices and blocks are assigned. I have found that I could set the order of the line work order by reversing the lines twice. P Quote
BIGAL Posted November 28, 2015 Posted November 28, 2015 Daveacad the idea is like your images you posted you draw a path crossing over the objects which determines the order they are cut, you can go outside the object and come back in etc to make picking easy. The example with the text was so I could see if it worked as I had a visual of the order of the picked objects. I have to do something important right now (go fishing) but its likely to rain later so will have another go, picking 200 etc will not be a problem. I need to study lee's code a bit more I realise its erasing and recreating in order. Quote
BIGAL Posted November 30, 2015 Posted November 30, 2015 (edited) Daveacad can you try this please my code is below lee's just draw a pline start and stop as often as required. ;; OE (Order Entities) - Lee Mac (defun LEEoe ( ent / cnt enx new sbx sub ) (setq cnt 1) ;(while (progn (setvar 'errno 0) ;(setq ent (car (entsel (strcat "\nSelect object " (itoa cnt) " <done>: ")))) (cond ( (= 7 (getvar 'errno)) (princ "\nMissed, try again.") ) ( (null ent) nil ) ( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 (setq enx (entget ent))))))))) (princ "\nSelected object is on a locked layer.") ) ( (and (setq new (entmakex enx)) (or (/= 1 (cdr (assoc 66 enx))) (progn (setq sub (entnext ent) sbx (entget sub) ) (while (/= "SEQEND" (cdr (assoc 0 sbx))) (entmake sbx) (setq sub (entnext sub) sbx (entget sub) ) ) (entmake sbx) ) ) ) (entdel ent) (redraw new 3) (setq cnt (1+ cnt)) ) ( (princ "\nUnable to reorder selected object.")) ) ) ; ) ; while (princ) ) ; pline co-ords example ; By Alan H (defun getcoords (ent) (vlax-safearray->list (vlax-variant-value (vlax-get-property (vlax-ename->vla-object ent) "Coordinates" ) ) ) ) (defun co-ords2xy () ; convert now to a list of xy as co-ords are x y x y x y if 3d x y z x y z (setq len (length co-ords)) (setq numb (/ len 2)) ; even and odd check required (setq I 0) (repeat numb (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords) )) ; odd (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords)(nth (+ I 2) co-ords) )) (setq co-ordsxy (cons xy co-ordsxy)) (setq I (+ I 2)) ) ) ; program starts here (defun c:OE( / ss x) (command "_pline") (while (= (getvar "cmdactive") 1 ) (command pause) ) (setq co-ords (getcoords (entlast))) (co-ords2xy) ; list of 2d points making pline (entdel (entlast)) (setq ss (ssget "F" co-ordsxy)) (setq x (sslength ss)) (repeat (sslength ss) (setq ent (ssname ss (setq x ( - x 1)))) (if (= (vla-get-ObjectName (setq obj (vlax-ename->vla-object ent))) "AcDbCircle") (progn (setq pt (vlax-safearray->list (vlax-variant-value (vla-get-center obj))) ) (setq ts (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))) (if (zerop ts) (command "TEXT" pt "3.5" "0" (rtos x 2 0)) (command "TEXT" pt "0" (rtos x 2 0)) ) ) ; progn ) ; if (LEEoe ent) (princ "\n") ) (command "_.regen") ) Edited November 30, 2015 by BIGAL Quote
daveacad Posted November 30, 2015 Author Posted November 30, 2015 Hi Bigal, the LISP you arranged don't work properly. Please, see pictures. The numbers will write every time you use the Lisp. If they are write once, the second time you use the Lisp, they will write again: is not a big problem, if you are good with AutoCAD The big problem is the selection options: I need the normal selection, or it will very difficult to work with that Lisp. In the last picture you can see the numbering of items made every time you use the Lisp, with different value for the same entity. Sometime the Lisp don't work properly (nil message). Hope my reply will be helpful! Thank you, D. Quote
BIGAL Posted December 1, 2015 Posted December 1, 2015 Can you post a couple of samples dwg's, is the outside not a continous pline ? Quote
daveacad Posted December 1, 2015 Author Posted December 1, 2015 Good morning, see dwg. Ciao, D. NMRT for OE (Order Entities) r0.dwg Quote
BIGAL Posted December 1, 2015 Posted December 1, 2015 I am not sure what you want, draw random objects and pick them in some sort of simple method bit like picking the path of the laser, the code only puts numbers on circles at the end of the day we are doing this for free. If you don't reset the cnt it will continue numbering. You should be able to run it multiple times as you may not be able to just pick one single path. If you want the order in reverse that can be done. 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.