alanjt Posted July 6, 2010 Posted July 6, 2010 thanx for the code, but have u tried mine?, it takes lesser time about 10 secs for 34000 pts, if u can fix the error of mine i'll be so pleased.thank u How are you testing it? It doesn't work for me. Quote
Lee Mac Posted July 6, 2010 Posted July 6, 2010 I doubt that you could optimise the procedure much above Alan's example imo. Quote
alanjt Posted July 6, 2010 Posted July 6, 2010 I doubt that you could optimise the procedure much above Alan's example imo. Exactly what I was thinking. Step through SS once, if dxf 10 is member of list delete it, if not add dxf 10 to list. If you setq i to -1 instead of using lambda, it would improve your rate by some infinitesimal amount, but that's about it. Quote
fallen Posted July 6, 2010 Author Posted July 6, 2010 i see, alan's code is clearer and much understandble than mine. but i don't understand why my routine doesn't work on alan's system, there is an error on exiting, but it completed the task. Quote
fallen Posted July 6, 2010 Author Posted July 6, 2010 it is working i 've tested it many many times for different point sets including restarting autocad . what kind of error did it produce on your system could u explain it? thank u Quote
alanjt Posted July 6, 2010 Posted July 6, 2010 Select objects: Backtrace: [0.48] (VL-BT) [1.44] (*ERROR* "bad argument type: 2D/3D point: (nil nil)") [2.39] (_call-err-hook #<SUBR @2e5fdcd0 *ERROR*> "bad argument type: 2D/3D point: (nil nil)") [3.33] (sys-error "bad argument type: 2D/3D point: (nil nil)") :ERROR-BREAK.28 "bad argument type: 2D/3D point: (nil nil)" [4.25] (DISTANCE (nil nil) (nil nil)) [5.19] (DUPSIL) [6.15] (#<SUBR @2b21a1e0 -rts_top->) [7.12] (#<SUBR @16ab435c veval-str-body> "(dupsil)" T #<FILE internal>) :CALLBACK-ENTRY.6 (:CALLBACK-ENTRY) :ARQ-SUBR-CALLBACK.3 (nil 0) Error: bad argument type: 2D/3D point: (nil nil) Quote
alanjt Posted July 6, 2010 Posted July 6, 2010 I must admit, looking at your code, I don't see how it could be faster than mine. Mine steps through the selection set once and the most strenuous effort it has is to see if the dxf 10 code is a member of a list that can only be as big as the smallest possible number of points. Quote
fallen Posted July 6, 2010 Author Posted July 6, 2010 how can i proove that my code is working and faster than yours. i am thinking now very deeply :) By the way i like ur algorithm Mine depends on similar divide & conquer algorithm i think Quote
fallen Posted July 6, 2010 Author Posted July 6, 2010 allan, sorry for bothering u again but, i have just ran ur code again, it completed the task then i select the remaining points that not duplicated for another test "triangulation" but "triangulation" found still duplicate points. may be discuss it tomorrow i am very happy to you response my post and interested in may be i can proove it tomorrow :) Quote
alanjt Posted July 6, 2010 Posted July 6, 2010 Difficult since your routine crashes even on your machine. Get the time before the routine starts to work (after valid selection with ssget) and subtract the time when completed from it. ;;; Egg Timer for calculating run time in milliseconds ;;; Alan J. Thompson, 03.22.09 ;;; Argument: #StartStop - 1 for begin, 0 for end (defun AT:EggTimer (#StartStop) (cond ((eq 1 #StartStop) (setq *EggTimer* (getvar "millisecs"))) ((eq 0 #StartStop) (if *EggTimer* (setq *EggTimer* (alert (strcat "Process Time: " (rtos (- (getvar "millisecs") *EggTimer*)) " Milliseconds" ) ;_ strcat ) ;_ alert ) ;_ setq ) ;_ if ) ) ;_ cond ) ;_ defun (defun c:DDP-check (/ ss lst) ;; Delete Duplicate Points ;; Alan J. Thompson, 07.06.10 (if (setq ss (ssget "_:L" '((0 . "POINT")))) (progn (AT:EggTimer 1) ((lambda (i / p) (while (setq e (ssname ss (setq i (1+ i)))) (if (vl-position (setq p (cdr (assoc 10 (entget e)))) lst) (entdel e) (setq lst (cons p lst)) ) ) ) -1 ) (AT:EggTimer 0) ) ) (princ) ) Man I hate how ugly my code used to look. Quote
alanjt Posted July 6, 2010 Posted July 6, 2010 allan, sorry for bothering u again but, i have just ran ur code again, it completed the task then i select the remaining points that not duplicated for another test "triangulation" but "triangulation" found still duplicate points.may be discuss it tomorrow i am very happy to you response my post and interested in may be i can proove it tomorrow :) Why don't you post an example drawing. We can only guess about your 'duplicate points'. Discuss away. :wink: Quote
fallen Posted July 6, 2010 Author Posted July 6, 2010 sure, i ll be very happy but how about tomorrow. Time is 10.50 PM here and i must go see u tomorrow ok!! thanks again. Quote
fallen Posted July 8, 2010 Author Posted July 8, 2010 The routine is error free now. To start the routine type deldups Thank you deldupden_2.LSP Quote
fallen Posted July 8, 2010 Author Posted July 8, 2010 Here is the second routine for delete dup points in xyz to run the routine type deldups same as previous routine i have tested it for 500.000 points, no error or etc. had produced. thank you any comments will welcome. deldupden_3.LSP Quote
alanjt Posted July 8, 2010 Posted July 8, 2010 I tried it on about 100 points (should only have 7). Your routine left 21, mine left 7. Quote
alanjt Posted July 8, 2010 Posted July 8, 2010 the second routine may 2 doesn't delete everything and 3 doesn't do anything. What is the purpose of everything your routines are doing? 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.