Jump to content

Attribute Modification Suite


Lee Mac

Recommended Posts

  • Replies 59
  • Created
  • Last Reply

Top Posters In This Topic

  • Lee Mac

    25

  • The Buzzard

    8

  • JeepMaster

    3

  • MarcoW

    3

Top Posters In This Topic

Posted Images

I have done a major update to the program - version 6 is now in the first post of this thread.

 

I have added the ability to remove items from the block selection set if ET are installed.

 

Also, OSnap now works during the GrRead loops.

 

Enjoy,

 

Lee

Link to comment
Share on other sites

LeeMac,

Thanks for continually updating your lisp. Your hard work here on the forum is greatly appreciated.

Your lisp works wonderfully...on normal blocks. My only wish is for it to work on dynamic blocks since my work place only use dynamic blocks. For now, I can only dream of using it at work.:D

Link to comment
Share on other sites

LeeMac,

Thanks for continually updating your lisp. Your hard work here on the forum is greatly appreciated.

Your lisp works wonderfully...on normal blocks. My only wish is for it to work on dynamic blocks since my work place only use dynamic blocks. For now, I can only dream of using it at work.:D

 

Thanks JeepMaster,

tbh I would like it to work on dynamic blocks also, but I have never used them myself, and don't know what I'm doing when it comes to accessing the sub-entites... :(

 

but glad you like the program :)

Link to comment
Share on other sites

Thanks JeepMaster,

tbh I would like it to work on dynamic blocks also, but I have never used them myself, and don't know what I'm doing when it comes to accessing the sub-entites... :(

 

but glad you like the program :)

 

 

Lee,

 

I am posting this link for your own curiosity.

 

http://mdouglas.blogs.com/in_the_dynamic_interface/2005/07/dynamic_lisp_co.html

 

Below is the code from this link.

Dblockcode.lsp

Link to comment
Share on other sites

Just as a future reference incase you want to attack this dynamic beast. This one does multiple attribute on multiple dynamic blocks. :D

;   Lisp to move attributes 
;   
;   Thanks to T.Willey & VovKa - Dec 2007
;   [url]http://www.theswamp.org/index.php?topic=19881.15[/url]


(defun SelAtts (Message bAllowText / Sel EntData Pt1 Pt3 gr p1 p2 p3 p4 po   ss SelMode SelObjList flag)
; updated by gile @theSwamp.org to show the selection correctly.
; updated by T.Willey to allow the option to select text objects, not mtext
; updated by T.Willey, added new sub to see if the selection box and the bounding box of the objects
;    selected cross, so that a true crossing is simulated

  (defun DoBoxesCross (PtList1 PtList2 / Intersect cnt cnt2)
  
     (setq cnt 0)
     (while
        (and
           (not Intersect)
           (< cnt 4)
        )
        (setq cnt2 0)
        (repeat 4
           (if
              (inters
                 (nth cnt PtList1)
                 (nth
                    (if (equal cnt 3)
                       0
                       (1+ cnt)
                    )
                    PtList1
                 )
                 (nth cnt2 PtList2)
                 (nth
                    (if (equal cnt2 3)
                       0
                       (1+ cnt2)
                    )
                    PtList2
                 )
                 T
              )
              (setq Intersect T)
           )
           (setq cnt2 (1+ cnt2))
        )
        (setq cnt (1+ cnt))
     )
     Intersect
  )
;----------------------------------------------------------------------------------------------------
  (defun GetAttSelection (ss SelMode / ObjList PtList TestList ll ur tempPtList SelObjList)
  
     (foreach lst (ssnamex ss)
        (cond
           ((equal (car lst) 3)
              (setq ObjList (cons (vlax-ename->vla-object (cadr lst)) ObjList))
           )
           ((equal (car lst) -1)
              (foreach sub-lst (cdr lst)
                 (setq PtList (cons (cadr sub-lst) PtList))
              )
           )
        )
     )
     (foreach obj ObjList
        (cond
           ((= (vla-get-ObjectName obj) "AcDbBlockReference")
              (foreach att (vlax-invoke obj 'GetAttributes)
                 (if
                    (and
                       (/= (vla-get-TextString att) "")
                       (= (vla-get-Invisible att) :vlax-false)
                    )
                    (progn
                       (setq TestList nil)
                       (vla-GetBoundingBox att 'll 'ur)
                       (setq tempPtList
                          (list
                             (setq ll (safearray-value ll))
                             (setq ur (safearray-value ur))
                             (list (car ur) (cadr ll) (caddr ll))
                             (list (car ll) (cadr ur) (caddr ll))
                          )
                       )
                       (foreach pt tempPtList
                          (if
                             (and
                                (< (caar PtList) (car pt) (caadr PtList))
                                (< (cadar PtList) (cadr pt) (cadr (caddr PtList)))
                             )
                             (setq TestList (cons T TestList))
                          )
                       )
                       (if (= SelMode "Windowing")
                          (if (equal (length TestList) 4)
                             (setq SelObjList (cons att SelObjList))
                          )
                          (if
                             (or
                                TestList
                                (DoBoxesCross PtList tempPtList)
                             )
                             (setq SelObjList (cons att SelObjList))
                          )
                       )
                    )
                 )
              )
           )
           (
              (or
                 (= (vla-get-ObjectName obj) "AcDbText")
                 (= (vla-get-ObjectName obj) "AcDbAttributeDefinition")
              )
              (if 
                 (or
                    (/= (vla-get-TextString obj) "")
                    (and
                       (vlax-property-available-p obj 'TagString)
                       (/= (vla-get-TagString obj) "")
                    )
                 )
                 (progn
                    (setq TestList nil)
                    (vla-GetBoundingBox obj 'll 'ur)
                    (setq tempPtList
                       (list
                          (setq ll (safearray-value ll))
                          (setq ur (safearray-value ur))
                          (list (car ur) (cadr ll) (caddr ll))
                          (list (car ll) (cadr ur) (caddr ll))
                       )
                    )
                    (foreach pt tempPtList
                       (if
                          (and
                             (< (caar PtList) (car pt) (caadr PtList))
                             (< (cadar PtList) (cadr pt) (cadr (caddr PtList)))
                          )
                          (setq TestList (cons T TestList))
                       )
                    )
                    (if (= SelMode "Windowing")
                       (if (equal (length TestList) 4)
                          (setq SelObjList (cons obj SelObjList))
                       )
                       (if
                          (or
                             TestList
                             (DoBoxesCross PtList tempPtList)
                          )
                          (setq SelObjList (cons obj SelObjList))
                       )
                    )
                 )
              )
           )
        )
     )
     SelObjList
  )
;----------------------------------------------------------------------------------------------------
   (defun gr-sel   (/ loop gr pt)
   
     (setq loop T)
     (while (and (setq gr (grread T 12 2)) (/= (car gr) 3) loop)
        (cond
           ((= (car gr) 5)
              (setq pt (cadr gr))
           )
           (
              (or 
                 (member gr '((2 13) (2 32)))
                 (or (= (car gr) 11) (= (car gr) 25))
              )
              (setq loop nil
                 pt   nil
              )
           )
        )
     )
     (if   pt
        (cond
           ((car (nentselp pt)))
           (pt)
        )
     )
  )
;---------------------------------------------------------------------------------------------------------
  (setvar "ErrNo" 0)
  (while
     (and
        (princ (strcat "\n" Message))
        (setq sel (gr-sel))
     )
     (if   (listp sel)
        (progn
           (setq p1  (list (car sel) (cadr sel))
              pt1 (trans p1 1 2)
           )
           (princ "\nSpecify the opposite corner: ")
           (while (and (setq gr (grread T 12 1)) (/= (car gr) 3))
              (if (= 5 (car gr))
                 (progn
                    (redraw)
                    (setq pt3   (trans (cadr gr) 1 2)
                       p2   (trans (list (car pt3) (cadr pt1)) 2 1)
                       p3   (list (caadr gr) (cadadr gr))
                       p4   (trans (list (car pt1) (cadr pt3)) 2 1)
                    )
                    (if (< (car pt1) (car (trans p2 1 2)))
                       (progn
                          (setq SelMode "Windowing")
                          (grvecs (list 255 p1 p2 255 p2 p3 255 p3 p4 255 p4 p1))
                       )
                       (progn
                          (setq SelMode "Crossing")
                          (grvecs
                             (list -255 p1 p2 -255 p2 p3 -255 p3 p4 -255 p4 p1)
                          )
                       )
                    )
                 )
              )
           )
           (redraw)
           (if
              (if bAllowText
                 (setq ss (ssget "_C" p1 p3 '((0 . "INSERT,TEXT,ATTDEF"))))
                 (setq ss (ssget "_C" p1 p3 '((0 . "INSERT"))))
              )
              (setq SelObjList (append SelObjList (GetAttSelection ss SelMode)))
           )
        )
        (progn
           (setq EntData (entget Sel))
           (if
              (or
                 (= (cdr (assoc 0 EntData)) "ATTRIB")
                 (and
                    bAllowText
                    (vl-position (cdr (assoc 0 EntData)) '("TEXT" "ATTDEF"))
                 )
              )
              (progn
                 (setq SelObjList
                    (cons (vlax-ename->vla-object Sel) SelObjList)
                 )
                 (redraw Sel 3)
              )
           )
        )
     )
     (foreach att SelObjList
        (redraw (vlax-vla-object->ename att) 3)
     )
  )
  (foreach att SelObjList
     (redraw (vlax-vla-object->ename att) 4)
  )
  SelObjList
)


;----------------------------------------------------------------------------------------------------
(defun GetBBPoints (VlaxObj / tmpLL tmpUR LowLeft LowRight UpRight LowRight)
; Get bounding box points for a valid vlax-object
; Returns a list of point lists.

  (vla-GetBoundingBox VlaxObj 'tmpLL 'tmpUR)
  (setq LowLeft (safearray-value tmpLL))
  (setq UpRight (safearray-value tmpUR))
  (setq LowRight (list (car UpRight) (cadr LowLeft) (caddr UpRight)))
  (setq UpLeft (list (car LowLeft) (cadr UpRight) (caddr LowLeft)))
  (list LowLeft LowRight UpRight UpLeft)
)


;---------------------------------------------------------------------------------------------------------


(defun c:MoveAttText (/ ActDoc Plss CurSpace ObjList tempPtList PtList tempPline BasePt NewPt *error* LL UR)

  (defun *error* (msg)
  
     (command)
     (if (> (sslength Plss) 0)
        (command "_.erase" Plss "")
     )
     (vla-EndUndoMark ActDoc)
  )

  (defun GetCurrentSpace (Doc / BlkCol SpaceList CurSpace ActSpace temp1)
  ; Returns the "block object" for the active space
  ; Thanks to Jeff Mishler

     (if (= (getvar "cvport") 1)
        (vla-get-PaperSpace Doc)
        (vla-get-ModelSpace Doc)
     )
  )

  
  (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  (vla-EndUndoMark ActDoc)
  (vla-StartUndoMark ActDoc)
  (setq Plss (ssadd))
  (setq CurSpace (GetCurrentSpace ActDoc))
  (if (setq ObjList (SelAtts "Select attributes and/or text to move: " T))
     (foreach obj ObjList
        (setq tempPtList (GetBBPoints obj))
        (setq BasePt (car tempPtList))
        (setq PtList nil)
        (foreach pt tempPtList
           (setq PtList (cons (car pt) PtList))
           (setq PtList (cons (cadr pt) PtList))
        )
        (setq tempPline
           (vlax-invoke
              CurSpace
              'AddLightWeightPolyline
              (reverse PtList)
           )
        )
        (vla-put-Closed tempPline :vlax-true)
        (ssadd (vlax-vla-object->ename tempPline) Plss)
     )
  )

(setq
 BasePt (apply
     (function
       (lambda (p1 p2)
         (mapcar (function (lambda (e1 e2) (/ (+ e1 e2) 2.))) p1 p2)
       )
     )
     ((lambda (Coords)
        (apply
     (function
       (lambda (mn mx) (mapcar (function (lambda (n x) (list n x))) mn mx))
     )
     (mapcar   (function (lambda (c) (list (apply 'min c) (apply 'max c))))
        (list (mapcar 'car Coords) (mapcar 'cadr Coords))
     )
        )
      )
       (apply
         'append
         (mapcar
      (function (lambda (Obj)
             (vla-GetBoundingBox Obj 'LL 'UR)
             (list (vlax-safearray->list LL) (vlax-safearray->list UR))
           )
      )
      ObjList
         )
       )
     )
   )
)

  (if (> (sslength Plss) 0)
     (progn
        (setvar 'cmdecho 1)
        (command "_.move"
           Plss
           ""
           BasePt
           pause
        )
        (setq NewPt (getvar 'lastpoint))
        (setvar 'cmdecho 0)
        (command "_.erase" Plss "")
        (foreach obj ObjList
          (vlax-invoke obj 'Move (append BasePt (cddr NewPt)) NewPt)
        )
     )
  )
  (vla-EndUndoMark ActDoc)
  (princ)
)

Link to comment
Share on other sites

  • 4 weeks later...
  • 2 months later...

Lee,

 

Thanks a lot for a great lisp:)

As you said, "what's gonna be next?"

I have a continuous problem that might be worth solving.

 

There's a tendency for each CAD user to have its own idea of accuracy. When I get to work on somebody else's files, I usually find myself correcting small inaccuracies that could cause problems in hatches, dimensioning etc. and finally wind up with more time consumed on filleting lines and closing plines than it would take if error really occured, or if I decided to draw it all anew.

 

To cut the long story, does anyone know of a lisp that could, for example, round up all of polyline's vertices into integer values? Or for that matter do the same with lines, or block insert points?

 

If not, there's your chalenge:D

Link to comment
Share on other sites

  • 5 months later...

Hi Lee,

I've been using this routine for a while now. First time I saw it I was very impressed, but didn't really know what to do with it. It didn't take long though to find a way to put it to good use on occasion. So far I've only really used the move attribute function.

 

I have a few suggestions for the program.

I always work with Polar Tracking turned on, and prefer this a lot over having Ortho Mode turned on. When moving the attributes though, polar tracking no longer works, and need to turn on Ortho Mode to move my attribute 2mm left or right.

Another thing that would be really useful for me, is the ability to change text properties of multiple attributes. However, with your EdAtt command I am forced to change the value of the attribute as well, whereas I would like to keep the value as is and just edit the text properties. Of all the available text options it can change, the one thing that's most useful to me is not available; the text width factor. I never need to change angle or rotation, and only sometimes the alignment. If you could find a moment to include width factor that'd be great :)

 

Last, I noticed that if I select a block that contains an attribute that has no value, it returns an error. I would still like to be able to move/change this attribute though, so that when it does get a value, the text and placement will be the same as all the others.

 

Thanks!

Link to comment
Share on other sites

Hi DVDM,

 

Thanks for your continued reviews of my program - they are truly appreciated, its great to hear feedback.

 

I haven't looked at the code for this program in a long time, so there are probably quite a few things that I could code in a better way. The issue is that the program runs on a GrRead loop to create the "dynamic" effect, however this grRead loop completely irradicates all standard AutoCAD functionality, and so everything must be imitated and hard coded into the program. This is difficult enough for imitating ObjectSnap, but for Polar Tracking etc this task becomes almost impossible. To resolve the issue, I could make a version that is not 'dynamic', and hence all AutoCAD functionality is available.

 

I shall look over your other suggestions and see what I can incorporate when I get some spare time.

 

Again, many thanks for your interest,

 

Lee

Link to comment
Share on other sites

  • 5 months later...

Hi

 

i have one question,

 

i dont wanna to change or replace block attributes (value) i just wanna use options from "Advanced" button to modify other properties of the Attribute Text like Text Style...

 

Is there any option to do that?

Link to comment
Share on other sites

Hi,

 

Here is a concept code that will act akin to AutoCAD's Match Properties

 

[i][color=#990099];;-------------------=={ Match Attribs }==--------------------;;[/color][/i]
[i][color=#990099];;                                                            ;;[/color][/i]
[i][color=#990099];;  Prompts for selection of source attribute, then proceeds  ;;[/color][/i]
[i][color=#990099];;  to match the listed properties for subsequently picked    ;;[/color][/i]
[i][color=#990099];;  attributes.                                               ;;[/color][/i]
[i][color=#990099];;------------------------------------------------------------;;[/color][/i]
[i][color=#990099];;  Author: Lee McDonnell, 2010                               ;;[/color][/i]
[i][color=#990099];;                                                            ;;[/color][/i]
[i][color=#990099];;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;[/color][/i]
[i][color=#990099];;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;[/color][/i]
[i][color=#990099];;------------------------------------------------------------;;[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:MatchAttribs [b][color=RED]([/color][/b] [b][color=BLUE]/[/color][/b] properties source [b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
 [i][color=#990099];; © Lee Mac 2010[/color][/i]

 [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] properties
  [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b]
    Backward
    Height
    Layer
    Linetype
    LinetypeScale
    Lineweight
    ObliqueAngle
    Rotation
    ScaleFactor
    StyleName
    Thickness
    UpsideDown
   [b][color=RED])[/color][/b]
 [b][color=RED])[/color][/b]

 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] source
       [b][color=RED]([/color][/b]LM:Selectif
         [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]"ATTRIB"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]0[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] x[b][color=RED]))))[/color][/b]
         [b][color=RED])[/color][/b]
         [b][color=BLUE]nentsel[/color][/b] [b][color=#a52a2a]"\nSelect Source Attribute: "[/color][/b]
       [b][color=RED])[/color][/b]
     [b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] properties values [b][color=BLUE]/[/color][/b] dest [b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dest
           [b][color=RED]([/color][/b]LM:Selectif
             [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]"ATTRIB"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]0[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] x[b][color=RED]))))[/color][/b]
             [b][color=RED])[/color][/b]
             [b][color=BLUE]nentsel[/color][/b] [b][color=#a52a2a]"\nSelect Destination Attributes: "[/color][/b]
           [b][color=RED])[/color][/b]
         [b][color=RED])[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dest [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] dest[b][color=RED]))[/color][/b]

         [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] property value [b][color=RED])[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]vlax-put-property[/color][/b] dest property value[b][color=RED])[/color][/b]
             [b][color=RED])[/color][/b]
           [b][color=RED])[/color][/b]
           properties values
         [b][color=RED])[/color][/b]
       [b][color=RED])[/color][/b]
     [b][color=RED])[/color][/b]
     properties
     [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] source [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] source[b][color=RED]))[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] property [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-property[/color][/b] source property[b][color=RED]))[/color][/b]
         [b][color=RED])[/color][/b]
         properties
       [b][color=RED])[/color][/b]
     [b][color=RED])[/color][/b]
   [b][color=RED])[/color][/b]
 [b][color=RED])[/color][/b]

 [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b]
[b][color=RED])[/color][/b]

[i][color=#990099];;---------------------=={ Select if }==----------------------;;[/color][/i]
[i][color=#990099];;                                                            ;;[/color][/i]
[i][color=#990099];;  Continuous selection prompts until the predicate function ;;[/color][/i]
[i][color=#990099];;  foo is validated                                          ;;[/color][/i]
[i][color=#990099];;------------------------------------------------------------;;[/color][/i]
[i][color=#990099];;  Author: Lee McDonnell, 2010                               ;;[/color][/i]
[i][color=#990099];;                                                            ;;[/color][/i]
[i][color=#990099];;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;[/color][/i]
[i][color=#990099];;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;[/color][/i]
[i][color=#990099];;------------------------------------------------------------;;[/color][/i]
[i][color=#990099];;  Arguments:                                                ;;[/color][/i]
[i][color=#990099];;  foo - optional predicate function taking ename argument   ;;[/color][/i]
[i][color=#990099];;  fun - selection function to invoke                        ;;[/color][/i]
[i][color=#990099];;  str - prompt string                                       ;;[/color][/i]
[i][color=#990099];;------------------------------------------------------------;;[/color][/i]
[i][color=#990099];;  Returns:  selected entity ename if successful, else nil   ;;[/color][/i]
[i][color=#990099];;------------------------------------------------------------;;[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] LM:Selectif [b][color=RED]([/color][/b] foo fun str [b][color=BLUE]/[/color][/b] e [b][color=RED])[/color][/b]
 [i][color=#990099];; © Lee Mac 2010[/color][/i]
 [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] e [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] [b][color=RED]([/color][/b]fun str[b][color=RED])))[/color][/b]      
     [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b]
       [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]ENAME [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] e[b][color=RED]))[/color][/b]

         [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] foo [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b]foo e[b][color=RED])))[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#a52a2a]"\n** Invalid Object Selected **"[/color][/b][b][color=RED])[/color][/b]
         [b][color=RED])[/color][/b]
       [b][color=RED])[/color][/b]
     [b][color=RED])[/color][/b]
   [b][color=RED])[/color][/b]
 [b][color=RED])[/color][/b]
 e
[b][color=RED])[/color][/b]

Link to comment
Share on other sites

Got one for you Lee, when using your EdAtt function, would that be possible to "Insert field"?

 

Good luck on that one,

Guiboard

 

I would be inclined to use the existing AutoCAD functionality on that one. - The whole program needs a rewrite really.. I just don't have the time.

Link to comment
Share on other sites

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