Jump to content

Recommended Posts

Posted

hi,all

the following codes are used to draw dynamic text and lines.

as the picture describe.

1745_1287803822VAzw.png

 

but error always happened. after I debug.

I found the codes exited in these codes.

(setq text (vla-addtext mSpace fh (vlax-3d-point nextPt)))

 

 

the whole program.thank you for your time to read this.

(defun c:tt(/)
 	(vl-load-com)
(defun *error* (msg)
	(setvar "osmod" osmode_old)
)
(defun text_length (Text / textent ang sinrot cosrot t1 t2 p0 p1 p2 p3 p4)
	(setq 	textent (entget (vlax-vla-object->ename Text)))
	(setq 	p0  (cdr (assoc 10 textent))
			ang  (cdr (assoc 50 textent))
			sinrot (sin ang)
			cosrot (cos ang)
			t1  (car (textbox textent))
			t2  (cadr (textbox textent))
			p1  (list (+ (car p0) (- (* (car t1) cosrot) (* (cadr t1) sinrot)))
				(+ (cadr p0)
				(+ (* (car t1) sinrot) (* (cadr t1) cosrot))
				)
				)
			p2  (list
				(+ (car p0)
				(- (* (car t2) cosrot) (* (cadr t1) sinrot))
				)
				(+ (cadr p0)
				(+ (* (car t2) sinrot) (* (cadr t1) cosrot))
				)
				)
	)
			(distance p1 p2)
) 
(setq mSpace (vla-get-ModelSpace(vla-get-ActiveDocument (vlax-get-acad-object))))
 	(setq entbak (ssadd))
 	(setq osmode_old (getvar "osmode"))
 	(setvar "osmode" 0)
 	(setq pt (getpoint "\nget the center point."))
 	(command "_.circle" pt)
  	(princ (strcat "\ninput the radius of circle"))
 	(command pause)
 	(setq cir (vlax-ename->vla-object (entlast)))
 	(ssadd (entlast) entbak)

 	;start to input the makr.
 	(setq hasMore T)
 	(while hasMore
  	(setq nextPt (grread T 4 0)
  		   readtype (car nextPt)
	  	   readvale (cadr nextPt)
	)

    (cond ((= readtype 5)
				(setq nextPt (cadr nextPt))
				(setq nextPt (trans nextPt 1 0))
				(setq basePt (vlax-curve-getclosestpointto cir nextPt))
				(if (not line)
					(progn
						(if (not fh)
							(setq fh "A")
						)
						(setq text (vla-addtext mSpace fh (vlax-3d-point nextPt)))
						(ssadd (entlast) entbak)
						(setq txtlen (text_length text))
						(setq l2end (vla-addline mSpace (vlax-3d-point nextPt) (vlax-3d-point l2end)))
					)
					(progn
						(vla-put-startpoint line (vlax-3d-point basePt))
						(vla-put-endpoint line (vlax-3d-point nextPt))
						(vla-update line)
						(setq ptt (car nextPt))
						(if (> ptt pt)
							(progn
								(setq textleft (+ (car nextPt) (getvar "dimgap")))
								(setq l2left (+ (car nextPt) txtlen (getvar "dimgap")))
							)
							(progn
								(setq textleft (- (car nextPt) (getvar "dimgap") txtlen))
								(setq l2left textleft)
							)
						)
						(vla-put-insertionpoint text (vlax-3d-point list textleft (+ (cadr nextPt) (getvar "dimgap")) 0))
						(vla-update text)
						(vla-put-startpoint l2 (vlax-3d-point nextPt))
						(setq l2end (list l2left (cadr nextPt) 0))
						(vla-put-endpoint l2 (vlax-3d-point l2end))
						(vla-update l2)
					)
				)	
		   )
		   ((= readtype 3)
				(setq i nil)
		   )
		   ((or (= 25 readtype) (= 13 readtype))
				;(
		   )
	)
)
)

Posted

find the reason.should be :

(setq text (vla-addtext mSpace fh (vlax-3d-point nextPt) (getvar "dimtxt")))

 

the updated codes:

(defun c:tt(/ line fh text)
 	(vl-load-com)
(defun *error* (msg)
	(setvar "osmod" osmode_old)
)
(defun text_length (Text / textent ang sinrot cosrot t1 t2 p0 p1 p2 p3 p4)
	(setq 	textent (entget (vlax-vla-object->ename Text)))
	(setq 	p0  (cdr (assoc 10 textent))
			ang  (cdr (assoc 50 textent))
			sinrot (sin ang)
			cosrot (cos ang)
			t1  (car (textbox textent))
			t2  (cadr (textbox textent))
			p1  (list (+ (car p0) (- (* (car t1) cosrot) (* (cadr t1) sinrot)))
				(+ (cadr p0)
				(+ (* (car t1) sinrot) (* (cadr t1) cosrot))
				)
				)
			p2  (list
				(+ (car p0)
				(- (* (car t2) cosrot) (* (cadr t1) sinrot))
				)
				(+ (cadr p0)
				(+ (* (car t2) sinrot) (* (cadr t1) cosrot))
				)
				)
	)
			(distance p1 p2)
) 
(setq mSpace (vla-get-ModelSpace(vla-get-ActiveDocument (vlax-get-acad-object))))
 	(setq entbak (ssadd))
 	(setq osmode_old (getvar "osmode"))
 	(setvar "osmode" 0)
 	(setq pt (getpoint "\nget the center point."))
 	(command "_.circle" pt)
  	(princ (strcat "\ninput the radius of circle"))
 	(command pause)
 	(setq cir (vlax-ename->vla-object (entlast)))
 	(ssadd (entlast) entbak)

 	;start to input the makr.
 	(setq hasMore T)
 	(while hasMore
  	(setq nextPt (grread T 4 0)
  		   readtype (car nextPt)
	  	   readvale (cadr nextPt)
	)

    (cond ((= readtype 5)
				(setq nextPt (cadr nextPt))
				(setq nextPt (trans nextPt 1 0))
				(setq basePt (vlax-curve-getclosestpointto cir nextPt))
				(if (not line)
					(progn
						(if (not fh)
							(setq fh "A")
						)
						(setq text (vla-addtext mSpace fh (vlax-3d-point nextPt) (getvar "dimtxt")))
						(ssadd (entlast) entbak)
						;(setq txtlen (text_length text))
						(setq line (vla-addline mSpace (vlax-3d-point basePt) (vlax-3d-point nextPt)))
						(ssadd (entlast) entbak)
						(setq txtlen (text_length text))
						(setq l2end (list (+ (car nextPt) txtlen) (cadr nextPt) 0))
						(setq l2 (vla-addline mspace (vlax-3d-point nextPt) (vlax-3d-point l2end)))
						(ssadd (entlast) entbak)
					)
					(progn
						(vla-put-startpoint line (vlax-3d-point basePt))
						(vla-put-endpoint line (vlax-3d-point nextPt))
						(vla-update line)
						(setq ptt (car nextPt))
						(setq ptx (car pt))
						(if (> ptt ptx)
							(progn
								(setq textleft (+ (car nextPt) (getvar "dimgap")))
								(setq l2left (+ (car nextPt) txtlen (getvar "dimgap")))
							)
							(progn
								(setq textleft (- (car nextPt) (getvar "dimgap") txtlen))
								(setq l2left textleft)
							)
						)
						(vla-put-insertionpoint text (vlax-3d-point (list textleft (+ (cadr nextPt) (getvar "dimgap")) 0)))
						(vla-update text)
						(vla-put-startpoint l2 (vlax-3d-point nextPt))
						(setq l2end (list l2left (cadr nextPt) 0))
						(vla-put-endpoint l2 (vlax-3d-point l2end))
						(vla-update l2)
					)
				)	
		   )
		   ((= readtype 3)
				(setq hasMore nil)
		   )
		   ((or (= 25 readtype) (= 13 readtype))
				;(
		   )
	)
)
)

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...