Veryname Posted January 23, 2009 Share Posted January 23, 2009 Greetings, I am designing a road for my final school project and I just received a height map. The problem is, is that the heights are dtext's and I need to create points with the height written in the texts. I would add them manually but there are about 30.000 texts so that's not a realistic option. So my question is; is there a way to automatically create points at the origin of the dtexts, where the z-value of the points comes from the texts-content and the x and y-value comes from text's geometry? Some extra info: - The origins of the texts are 5 units apart in both x and y-directions. - I'm using AutoCAD 2008. Thanks a lot. Quote Link to comment Share on other sites More sharing options...
eldon Posted January 23, 2009 Share Posted January 23, 2009 The quick answer is yes, this could be done using Lisp. The slow answer is that you would have to get the attention of someone who could write this Lisp - possibly post a thread in that section of the Forum Quote Link to comment Share on other sites More sharing options...
Tiger Posted January 23, 2009 Share Posted January 23, 2009 Eldon's right, at least I think he's right, you'll probably need a lisp to get this done - so I moved your thread to the Lisp-part of the forum in the hopes you'll get faster help here Quote Link to comment Share on other sites More sharing options...
Veryname Posted January 23, 2009 Author Share Posted January 23, 2009 Thanks for the replies. If it's that much work I'll use the macro I created, I don't want to put someone else through that much trouble. It took me three hours to make the macro and it takes 2 second per text but I'll just have to let it run all night I was just hoping there was some secret command/function I wasn't aware of to speed things up incase I have to do this again in the future. PS, if someone wants to make it I wont object Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted January 23, 2009 Share Posted January 23, 2009 A LISP for this shouldn't be too hard - one question - does the text items only contain the z-value and no other text? Also, are we talking only DTEXT, or MTEXT also? Also - I can create a LISP in which the user will select the text manually - (using a selection set). - or, if all the heights are on the same layer, or if they are the only text (or DTEXT) in the drawing, then I can set the LISP to automatically do the selecting for you. -- For this to happen the text needs some "defining" factor, so a filter list can be created. - i.e. on own layer, or the only DTEXT, or have their own colour etc etc. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted January 23, 2009 Share Posted January 23, 2009 Also, what layer do you want these "Points" to be on? - and I assume they are just standard ACAD Points. So, if I am correct, you want to use the base points of the text for the x,y and the contents of the text for the z? Thanks Lee Quote Link to comment Share on other sites More sharing options...
Veryname Posted January 23, 2009 Author Share Posted January 23, 2009 To answer your question: Yes, the text only contains the height value, e.g.: "129.30" All off them are dtext, no mtexts. The file only contains the texts and they are all the same layer/color. The layer is "49" and the color is "12", which is a redish color. The points can be on any layer, I'll just move them if need be. They are just regular AutoCAD points. "You want to use the base points of the text for the x,y and the contents of the text for the z?" Thanks for the help Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted January 23, 2009 Share Posted January 23, 2009 OK, try this: (defun c:zht (/ varlist oldvars ss eLst bPt zVal nbPt ptLst) (vl-load-com) (setq varlist (list "CMDECHO" "OSMODE") oldvars (mapcar 'getvar varlist)) (mapcar 'setvar varlist (list 0 0)) (if (setq ss (ssget "X" '((0 . "TEXT")(8 . "49")(62 . "12")))) (progn (setq eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) (foreach e eLst (setq bPt (cdr (assoc 10 (entget e))) zVal (atof (cdr (assoc 1 (entget e)))) nbPt (subst zVal (last bPt) bPt) ptLst (cons nbPt ptLst))) (foreach pt ptLst (command "_point" pt))) (princ "\n<!> No Text Found <!>")) (mapcar 'setvar varlist oldvars) (princ)) Quote Link to comment Share on other sites More sharing options...
Veryname Posted January 23, 2009 Author Share Posted January 23, 2009 Sweet, worked like a charm Here are the points loaded in some program I Googled: Thanks alot!! Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted January 23, 2009 Share Posted January 23, 2009 No Probs VeryName, glad it worked for you Let me know if you have any more questions Quote Link to comment Share on other sites More sharing options...
eldon Posted January 23, 2009 Share Posted January 23, 2009 Lee Mac, you are a gentleman and a scholar. Thank you for responding. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted January 23, 2009 Share Posted January 23, 2009 Lee Mac, you are a gentleman and a scholar. Thank you for responding. No Probs Eldon, and thank you for your compliments. How I look at it, the LISP wasn't a hard one to write, but if it helps someone save a few hours, I'm happy to spend a few minutes working on it. Quote Link to comment Share on other sites More sharing options...
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.