GLORY Posted Saturday at 05:21 PM Posted Saturday at 05:21 PM Hello Everyone, I need some help; here is my list in csv 1,21.188,19.762,0.000,L1S 2,31.804,7.629,0.000,L2S 3,44.106,18.077,0.000,L2 4,32.984,30.378,0.000,L1 5,45.117,40.995,0.000,L1 6,56.239,26.671,0.000,L2 7,68.878,36.782,0.000,L2E 8,57.587,50.937,0.000,L1E 9,49.168,65.549,0.000,L1S 10,43.612,72.164,0.000,L1 11,50.491,77.059,0.000,L1 12,55.253,70.179,0.000,L1C 13,41.363,59.993,0.000,L2S 14,34.616,68.460,0.000,L2 15,27.472,64.094,0.000,L2 16,33.954,55.495,0.000,L2C And I want to make that list into something like this, (setq pt (list (nth 1 ln) (nth 2 ln) (nth 3 ln))) (setq mylist '( (("L1S" (list pt)) ("L1" (list pt))...("L1E" (list pt))) (("L2S" (list pt)) ("L2" (list pt))...("L2E" (list pt))) (("L1S" (list pt)) ("L1" (list pt))...("L1C" (list pt))) (("L2S" (list pt)) ("L2" (list pt))...("L2C" (list pt))) ) ) In order to plot the lines into groups by creating another set of group of points if the description has "S" or start at the end, say L1S for Line 1 Start. Thank you in advance.Line1 and 2 Group List.csv Quote
devitg Posted Saturday at 09:54 PM Posted Saturday at 09:54 PM @GLORY Please upload a sample.dwg as you need it to be, at least 2 lines Quote
BIGAL Posted yesterday at 03:54 AM Posted yesterday at 03:54 AM Ok that is what you get in field survey using Total stations, GPS etc so you want to string the description. Yes I have something, working on it for Bricscad. I have spent over 45+ years doing civil work, so can see what you want, the simple answer is CIV3D or Civil Site Design or Carlson, etc that is civil software, When reading a points file it will string the points via a description, add blocks matching descriptions and more. I am working on the add blocks and line work on correct layer. Your csv processed. Happy to discuss further. But I don't intend to reinvent the wheel to much. Quote
GLORY Posted yesterday at 01:49 PM Author Posted yesterday at 01:49 PM Sorry guys for the late reply. @devitgHere is an example of the drawing processed by the code I've been trying to work on for a while now. But it can only handle 2-Description at a time, either a combination of two different lines or a line and block combo. Let say, “L1E/L2S” or “L1S/BP” which is a point block and can no longer TRIGGER to read 3-Description csv line like “L1E/L2S/BP”, this kind of description can only plot the “BP”, it will not plot the "L1" lines calling “L1E” (the trigger) to plot L1 Group then start collection of L2 point groups. But upon checking the group list say for L1, the points are there inside that list but cannot trigger to plot the L1 group of points into lines since BP is already called in the first condition of the code. This is the reason I want to change the point collection list into groups and process the line list groups after reading all the lines in the csv. @BIGAL, thank you for your response. I also work in Civil 3D to process these kinds of data. The only problem is that you need to export it in plain AutoCAD format to arrange all the annotation etc., cause COGO are not easy to handle. Say aligning the annotation for block points to be aligned to lines or move it into desired location. Line1 and 2 Group List.dwg Quote
devitg Posted yesterday at 03:53 PM Posted yesterday at 03:53 PM 1 hour ago, GLORY said: This is the reason I want to change the point collection list into groups and process the line list groups after reading all the lines in the csv. @GLORY As I can get ,there are same point with same identifier (last text at csv line) Mybe you can add some new identification to group by it at same CSV Like this 1,21.188,19.762,0.000,L1S,pl1.1 4,32.984,30.378,0.000,L1,pl1.2 5,45.117,40.995,0.000,L1,pl1.3 8,57.587,50.937,0.000,L1E,pl1.4 2,31.804,7.629,0.000,L2S,pl2.1 3,44.106,18.077,0.000,L2,pl2.2 6,56.239,26.671,0.000,L2,pl2.3 7,68.878,36.782,0.000,L2E,pl2.4 9,49.168,65.549,0.000,L1S,pl3.1 10,43.612,72.164,0.000,L1,pl3.2 11,50.491,77.059,0.000,L1,pl3.3 12,55.253,70.179,0.000,L1C,pl3.4 13,41.363,59.993,0.000,L2S,pl4.1 14,34.616,68.460,0.000,L2,pl4.2 15,27.472,64.094,0.000,L2,pl4.3 16,33.954,55.495,0.000,L2C,pl4.4 Or state in a new csv which order belong to each polyline Say Quote PL1 1 4 5 8 Pl2 2 3 6 7 Pl3 9 10 11 12 Pl4 13 14 14 16 Line1 and 2 Group List- oredr + idfier.dwg Quote
BIGAL Posted 18 hours ago Posted 18 hours ago There is Export to Autocad in CIV3D that should convert lots of stuff. Quote
GLORY Posted 14 hours ago Author Posted 14 hours ago @devitg the first two characters are already the identifiers, you can use @Lee Mac and Marco Ribar LM-MR:wcmatchx to extract it from the description. @BIGAL This is the reason why I'm trying to build this code library to avoid the export process in Civil 3D if you are doing a quick or small-scale projects since these will all end in a plain AutoCAD Template. By the way here is the complete flow of the process to create blocks and lines based on code description, I just cut the parts of Blocks and Lines Library cause it's too long. List of Line Groups here is simply a point list '(ENZ). That is why I'm trying to find other way to build a list of point groups then process it after all the csv lines are read. (if ; start the csv validation (and (setq fn (getfiled "\n" (getvar 'dwgprefix) "csv;txt;*" 16)) ; get csv file (setq cd (LM:readcsv fn)) ; read csv line thanks to @LeeMac ) ;and (progn (setq grd1 '() grd2 '() grd3 '() grd4 '() grd5 '() grd6 '() grd7 '() grd8 '() ; empty list for 8 simultaneous lines . ; and so on . . ) ;setq (foreach ln cd (if (= (length ln) 5) ; format = '( p e n z d ) (progn (setq ptn (nth 0 ln) ; point number des (nth 4 ln) ; point code plyr "0" ; default point/block layer if not in the code library tlyr "0" ; default annotation layer if not in the code library cs (/ 2.0 (getvar 'cannoscalevalue)) ; scale factor to be used for blocks hgt (/ 1.6 (getvar 'cannoscalevalue)) ; height factor to be used for annotation pt (list (atof (nth 1 ln)) (atof (nth 2 ln)) (atof (nth 3 ln))) ; insertion point ) ;setq (if (= 3 (length pt)) ; format = '( e n z ) to verify if 3D Point (setq pt (trans pt 1 0) ; convert point to ucs pt1 (list (car pt) (+ (cadr pt) (* hgt 0.6 (sqrt 2.5)))) ; text position (single line annotation) pt2 (list (car pt) (+ (cadr pt) (* hgt 0.95 (sqrt 2.5)))) ; text position (double line annotation) val (rtos (caddr pt) 2 2) ; text value based on description (default is elevation) mtp pt1 ; dummy string for annotation position ) ;setq ) ;if (cond ; First condition if Point Blocks ((= "BP" (TG:Read des "BP")) (setq plyr....)) ; If Match the Description set block preperties . ; and so on . . (t ; Else Lines ;;Start of Line List Group (cond ((or ; Set two conditions using LeeMac And Marco LM-MR:wcmatchx function (LM-MR:wcmatchx des "*@#*"....) ; Alpha-Numerical Combo (LM-MR:wcmatchx des "*@@*"....) ; Alphabet Combo ) (if (LM-MR:wcmatchx des "*L1*") ; If Match Description (progn (setq bn "HIDDEN"....) ; Set Block (Line End Points) and Line Propterties (setq grd1 (append (list pt) grd1)) ; Get Points for L1 Group ) ) (if (LM-MR:wcmatchx des "*L2*") ; If Match Description (progn (setq bn "HIDDEN"....) ; Set Block (Line End Points) and Line Propterties (setq grd2 (append (list pt) grd2)) ; Get Points for L2 Group ) ) . ; And so on . . ) (t ;Else if description is not found in the library (setq bn "HIDDEN" bs (* 0.5 cs) plyr "0" val "") ;Default Settings ) ;second T ) ;second cond ) ;first T ) ;first cond ; (if (/= val "") ; Annotation, Blocks and Lines Create if conditions are met (progn (tg:cr8mtx val tlyr hgt mtp) ; Call the function to generate annotations (tg:binsert bn pt bs ptn des plyr) ; Call the function to generate blocks ) (progn (tg:binsert bn pt bs ptn des plyr) ; Call the function to generate blocks (cond ((or ; Settings for Trigger to generate line groups (LM-MR:wcmatchx des "*L#A*") ; If Arc is ended (LM-MR:wcmatchx des "*L#C*") ; If Line is closed (LM-MR:wcmatchx des "*L#E*") ; If Line is ended ) (cond (((LM-MR:wcmatchx des "*L1*")) ; If L1 is called (TG:MKELN grd1 "GARDEN") ; Generate L1 Line List (setq grd1 '()) ; Reset L1 List after lines are generated ) ((=(LM-MR:wcmatchx des "*L2*")) ; If L2 is called (TG:MKELN grd2 "GARDEN") ; Generate L2 Line List (setq grd2 '()) ; Reset L2 List after lines are generated ) . ; And so on... . . ) ; inside cond ) ; GARDEN LINES GROUP ) ; first cond ) ; progn ) ; if val ) ; inside progn ) ; inside main ) ; foreach ln ) ; main progn ) ; main if csv ;; As of the moment (TG:MKELN LIST LAYER) Function is for Line Creation only, Arcs are not yet included since I'm still struggling on how to do it along the Line List Group. ;; What I'm trying to achieved is to create a list of point groups, if "S" or "E" or "A" is present in the code identifiers it will generate a new group of line points in the list. (setq mylist '( ("L1" '(pt1 pt2 p3....pn)) ; if Start or End is called create group ("L1" '(pt1 pt2 p3....pn)) ; if Arc is called create group ("L2" '(pt1 pt2 p3....pn)) ; another group for L2 if Start or End is called ("L1" '(pt1 pt2 p3....pn)) ; then another group for L1 if Start or End is called ) ) ;; Then process the list of lines and arcs after by calling the identifiers and corresponding group of points Quote
BIGAL Posted 9 hours ago Posted 9 hours ago Ok I have the "group by code" for descriptions. So next step is a look up for layer name to match the description. The description look would have like CIV3D description keys. Any way thought I posted try "EXPORTTOAUTOCAD" a CIV3D command to do just that convert CIV3D objects to plain Autocad objects. Here is the file to do what you want, but try export first. @devitg give it a try. spagetti.lsp Quote
GLORY Posted 2 hours ago Author Posted 2 hours ago 6 hours ago, BIGAL said: Ok I have the "group by code" for descriptions. So next step is a look up for layer name to match the description. The description look would have like CIV3D description keys. Any way thought I posted try "EXPORTTOAUTOCAD" a CIV3D command to do just that convert CIV3D objects to plain Autocad objects. Here is the file to do what you want, but try export first. @devitg give it a try. spagetti.lsp 1.85 kB · 2 downloads Thank you. I'll give it a try. Also found an interesting topic here that might help me achieve the kind of list I wanted. https://www.cadtutor.net/forum/topic/70713-add-itens-to-a-sublist/ 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.