Veryname 发表于 2022-7-6 15:15:15

From dtext to a z-position

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.

eldon 发表于 2022-7-6 15:22:10

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

Tiger 发表于 2022-7-6 15:28:36

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

Veryname 发表于 2022-7-6 15:35:33

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 nightI 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

Lee Mac 发表于 2022-7-6 15:38:07

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.

Lee Mac 发表于 2022-7-6 15:43:29

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

Veryname 发表于 2022-7-6 15:50:22

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

Lee Mac 发表于 2022-7-6 15:55:41

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))

Veryname 发表于 2022-7-6 16:01:40

Sweet, worked like a charm
 
Here are the points loaded in some program I Googled:
 

 
Thanks alot!!

Lee Mac 发表于 2022-7-6 16:04:44

No Probs VeryName, glad it worked for you
 
Let me know if you have any more questions
页: [1] 2
查看完整版本: From dtext to a z-position