chavlji Posted October 17, 2009 Posted October 17, 2009 I have attribute with value: 100 m2 Where "100" is value of field (area for polyline) and " m2" is plain string. If there is a field the string of attribute should look like this: "%%).Area \\f \"%lu2%pr2\">% m2" But intead (vla-put-TextString Attr) is returning plain "100 m2". Is there a function that would return the "% Quote
gile Posted October 18, 2009 Posted October 18, 2009 Hi, vla-FieldCode returns the field code but doesn't works on attributes. Here's a routine wich works with text mtext or attributes even with nested fields (formulas) ;; gc:FieldCode (gile) ;; Returns the string of an attributes text or mtext countaining field code(s) ;; ;; Argument : entity name (ENAME) (defun gc:FieldCode (ent / foo elst xdict dict field str) ;;--------------------------------------------------------;; (defun foo (field str / pos fldID objID) (setq pos 0) (if (setq pos (vl-string-search "\\_FldIdx " str pos)) (while (setq pos (vl-string-search "\\_FldIdx " str pos)) (setq fldId (entget (cdr (assoc 360 field))) field (vl-remove (assoc 360 field) field) str (strcat (substr str 1 pos) (if (setq objID (cdr (assoc 331 fldId))) (vl-string-subst (strcat "ObjId " (itoa (gc:EnameToObjectId objID))) "ObjIdx" (cdr (assoc 2 fldId)) ) (foo fldId (cdr (assoc 2 fldId))) ) (substr str (1+ (vl-string-search ">%" str pos))) ) ) ) str ) ) ;;--------------------------------------------------------;; (setq elst (entget ent)) (if (and (member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT")) (setq xdict (cdr (assoc 360 elst))) (setq dict (dictsearch xdict "ACAD_FIELD")) (setq field (dictsearch (cdr (assoc -1 dict)) "TEXT")) ) (setq str (foo field (cdr (assoc 2 field)))) ) ) ;;============================================================;; ;; gc:EnameToObjectId (gile) ;; Returns the object ID from an ename ;; ;; Argument : a ename (as returned by enlast, entsel ...) (defun gc:EnameToObjectId (ename) ((lambda (str) (hex2dec (substr (vl-string-right-trim ">" str) (+ 3 (vl-string-search ":" str))) ) ) (vl-princ-to-string ename) ) ) ;;============================================================;; ;; hex2dec (gile) ;; Converts an hexadecimal to a decimal ;; ;; Argument : an hexadecimal (string) ;; Return : an integer (defun hex2dec (s / r l n) (setq r 0 l (vl-string->list (strcase s))) (while (setq n (car l)) (setq l (cdr l) r (+ (* r 16) (- n (if (<= n 57) 48 55))) ) ) ) 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.