Author Topic: please give me advice at this lisp  (Read 2741 times)

0 Members and 1 Guest are viewing this topic.

Sam

  • Bull Frog
  • Posts: 201
please give me advice at this lisp
« on: January 15, 2011, 06:16:18 AM »
Dear All,
i'm trying create layer & text style but not create text style & text boundary.
confusion mark is red
Code: [Select]
;;------------------------------------------------------------;;
;; This Program Created area of pline (@ mm Drawing only)        ;;
;;------------------------------------------------------------;;
(defun c:CA nil (c:CarpetArea))
(defun c:CarpetArea ( / *error* _EndUndo _StartUndo p5 p6 a b c d e f s )
(vl-load-com)

;;------------------------------------------------------------;;
;;                        SubFunctions                        ;;
;;                        Error Handler                       ;;
;;------------------------------------------------------------;;
;;                      © Lee Mac 2010                       ;;
  (defun *error* ( msg )
   [color=red] (if doc (_EndUndo doc))[/color]   
 (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
        (princ (strcat "\n** Error: " msg " **")))
    (princ)
  )
  [color=red](defun _StartUndo ( doc ) (_EndUndo doc)
    (vla-StartUndoMark doc)
  )
  (defun _EndUndo ( doc )
    (if (= 8 (logand 8 (getvar 'UNDOCTL)))
      (vla-EndUndoMark doc)[/color]   
 )
  )
;;------------------------------------------------------------;;

;;--------------------- Create Layer & Text Style ------------;;
  (if(not(tblsearch "LAYER" "Tx"))
     (command "-layer" "new" "Tx" "Color" 4 "Tx" "LTYPE" "Continuous" "Tx" "")
     );end if
  (setvar "clayer" "Tx")
  (setvar "celtype" "bylayer")
  (setvar "cecolor" "bylayer")
    (setvar "insunits" 0)
   
[color=red](if(not(tblsearch "Style" "Tx"))
  (command "-style" "tx" "ARIAL" "0" "1" "0" "" "" ""))

    ; ((0 . "STYLE") (2 . "Tx") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 0.3) (3 . "txt") (4 . ""))
     );end if
  ;(getvar "textstyle" "rd")[/color]
 ;;-----------------------------------------------------------;;

(if (and (setq s (ssget "_:S:E" '((0 . "LWPOLYLINE"))))
         (setq p5 (getpoint "\nWHERE TO PLACE TEXT: "))
)
(progn
(setq p5 (polar p5 pi 1250))
(setq p6 (polar p5 0 2500))
;(setq fn (getstring t "\nFLAT NO.:"))
(command "._area" "_e" (ssname s 0))
(SETQ A (GETVAR "AREA"))
(setq f (* A 0.000010764))
(setq f (rtos f 2 2))
(SETQ f (strcat f " SQ. FT."))
(SETQ B (/ A 1000000))
(SETQ C (RTOS B 2 2))
(SETQ D "CARPET AREA")
;(setq e (strcat FN " = " C " SQ.MT."))
(setq e (strcat "= " C " SQ.MT."))
(setq F (strcat "= " F))

[color=red](COMMAND "_TEXT" "_S" "standard" "_f" P5 p6 "225" D
         "_text" "" e
         "_text" "" f
         "_.rectangle"
         (mapcar '+ P5 '(-165 440 0))
         (mapcar '+ P6 '(165 -1045 0))[/color]
); end command
); End Progn
(princ "\n   ~¤~            ...Type \"Ca\" to Invoke...               ~¤~   ")
)
(princ)
;; Exit Cleanly
)
;; End defun
;;;;;;;;; ------ End Program ---
Every time we waste electricity, we put our planet's future in the dark. Let's turn around our attiude and start saving power and our planet, before it's too late
http://www.theswamp.org/donate.html

kruuger

  • Swamp Rat
  • Posts: 637
Re: please give me advice at this lisp
« Reply #1 on: January 15, 2011, 06:54:21 AM »
you can use this as a template.
in your code all these ..Undo.. are undo mark, will not work beacuse there is no doc variable. see my template how it works (with ACTOBJ and ACTDOC variable)
Code: [Select]
[color=RED]([/color][color=BLUE]defun[/color] C:CA [color=RED]([/color][color=BLUE]/[/color] OLDERR ACOBJ ACTDOC[color=RED])[/color]
  [color=RED]([/color][color=BLUE]setq[/color] OLDERR [color=BLUE]*error*[/color] [color=BLUE]*error*[/color] CA_Error
        ACOBJ [color=RED]([/color][color=BLUE]vlax-get-Acad-Object[/color][color=RED])[/color]
        ACTDOC [color=RED]([/color][color=BLUE]vla-get-ActiveDocument[/color] ACOBJ[color=RED])[/color]
  [color=RED])[/color]
  [color=RED]([/color][color=BLUE]vla-endundomark[/color] ACTDOC[color=RED])[/color]
  [color=RED]([/color][color=BLUE]vla-startundomark[/color] ACTDOC[color=RED])[/color]
    [color=RED]([/color][color=DARKRED].[/color][color=DARKRED].[/color]calculation..[color=RED])[/color]
    [color=RED]([/color][color=DARKRED].[/color][color=DARKRED].[/color]create layer..[color=RED])[/color]
    [color=RED]([/color][color=DARKRED].[/color][color=DARKRED].[/color]create text..[color=RED])[/color]
  [color=RED]([/color][color=BLUE]vla-endundomark[/color] ACTDOC[color=RED])[/color]
  [color=RED]([/color][color=BLUE]if[/color] OLDERR [color=RED]([/color][color=BLUE]setq[/color] [color=BLUE]*error*[/color] OLDERR[color=RED]))[/color]
[color=RED])[/color]
[color=#990099]; ============================================================ ;[/color]
[color=#990099]; Error handling                                               ;[/color]
[color=#990099]; ============================================================ ;[/color]
[color=RED]([/color][color=BLUE]defun[/color] CA_Error [color=RED]([/color]Msg[color=RED])[/color]
  [color=RED]([/color][color=BLUE]if[/color]
    [color=RED]([/color][color=BLUE]=[/color] [color=#009900]8[/color] [color=RED]([/color][color=BLUE]logand[/color] [color=#009900]8[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=#a52a2a]"UNDOCTL"[/color][color=RED])))[/color]
    [color=RED]([/color][color=BLUE]vla-endundomark[/color] ACTDOC[color=RED])[/color]
  [color=RED])[/color]
  [color=RED]([/color][color=BLUE]if[/color]
    [color=RED]([/color][color=BLUE]or[/color]
      [color=RED]([/color][color=BLUE]=[/color] Msg [color=#a52a2a]"Function cancelled"[/color][color=RED])[/color]
      [color=RED]([/color][color=BLUE]=[/color] Msg [color=#a52a2a]"quit / exit abort"[/color][color=RED])[/color]
    [color=RED])[/color]
    [color=RED]([/color][color=BLUE]princ[/color] [color=RED]([/color][color=BLUE]strcat[/color] [color=#a52a2a]"\nError: "[/color] msg[color=RED]))[/color]
    [color=RED]([/color][color=BLUE]princ[/color] [color=#a52a2a]" Cancelled. "[/color][color=RED])[/color]
  [color=RED])[/color]
  [color=RED]([/color][color=BLUE]if[/color] OLDERR [color=RED]([/color][color=BLUE]setq[/color] [color=BLUE]*error*[/color] OLDERR[color=RED]))[/color]
[color=RED])[/color]
[color=#990099]; ============================================================ ;[/color]
[color=#990099]; Make TEXT                                                    ;[/color]
[color=#990099];   Point  [LIST] - insertion point                            ;[/color]
[color=#990099];   Height  [INT] - text height                                ;[/color]
[color=#990099];   String  [STR] - text string                                ;[/color]
[color=#990099];   Layer   [STR] - text layer                                 ;[/color]
[color=#990099]; ------------------------------------------------------------ ;[/color]
[color=#990099]; (kr:ENT_MakeText '(0 0 0) 6 "tralala" "0")                   ;[/color]
[color=#990099]; ============================================================ ;[/color]
[color=RED]([/color][color=BLUE]defun[/color] kr:ENT_MakeText [color=RED]([/color]Point Height String Layer[color=RED])[/color]
  [color=RED]([/color][color=BLUE]entmakex[/color]
    [color=RED]([/color][color=BLUE]list[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#a52a2a]"TEXT"[/color][color=RED])[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]10[/color] [color=RED]([/color][color=BLUE]trans[/color] Point [color=#009900]1[/color] [color=#009900]0[/color] [color=BLUE]t[/color][color=RED]))[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]8[/color] Layer[color=RED])[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]40[/color] Height[color=RED])[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]1[/color]  String[color=RED])[/color]
    [color=RED])[/color]
  [color=RED])[/color]
[color=RED])[/color]

[color=#990099]; ============================================================ ;[/color]
[color=#990099]; Make LAYER                                                   ;[/color]
[color=#990099];   Name  (STR) - layer name                                   ;[/color]
[color=#990099];   Color (INT) - layer color                                  ;[/color]
[color=#990099];   Ltype (STR) - layer linetype                               ;[/color]
[color=#990099]; ------------------------------------------------------------ ;[/color]
[color=#990099]; (kr:ENT_MakeLayer "Line" 6 "CONTINUOUS")                     ;[/color]
[color=#990099]; ============================================================ ;[/color]
[color=RED]([/color][color=BLUE]defun[/color] [color=BLUE]kr:ENT_MakeLayer[/color] [color=RED]([/color]Name Color Ltype[color=RED])[/color]
  [color=RED]([/color][color=BLUE]or[/color]
    [color=RED]([/color][color=BLUE]entmakex[/color]
      [color=RED]([/color][color=BLUE]list[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#a52a2a]"LAYER"[/color][color=RED])[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]100[/color] [color=#a52a2a]"AcDbSymbolTableRecord"[/color][color=RED])[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]100[/color] [color=#a52a2a]"AcDbLayerTableRecord"[/color][color=RED])[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]2[/color] Name[color=RED])[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]62[/color] [color=RED]([/color][color=BLUE]if[/color] Color Color [color=#009900]7[/color][color=RED]))[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]6[/color]
          [color=RED]([/color][color=BLUE]if[/color] [color=RED]([/color][color=BLUE]and[/color] Ltype [color=RED]([/color][color=BLUE]tblsearch[/color] [color=#a52a2a]"LTYPE"[/color] Ltype[color=RED]))[/color]
            Ltype
            [color=#a52a2a]"CONTINUOUS"[/color]
          [color=RED])[/color]
        [color=RED])[/color]
      [color=RED])[/color]
    [color=RED])[/color]
  [color=RED])[/color]
[color=RED])[/color]
kruuger

Sam

  • Bull Frog
  • Posts: 201
Re: please give me advice at this lisp
« Reply #2 on: January 17, 2011, 01:14:48 AM »
you can use this as a template.
in your code all these ..Undo.. are undo mark, will not work beacuse there is no doc variable. see my template how it works (with ACTOBJ and ACTDOC variable)
Code: [Select]
[color=RED]([/color][color=BLUE]defun[/color] C:CA [color=RED]([/color][color=BLUE]/[/color] OLDERR ACOBJ ACTDOC[color=RED])[/color]
  [color=RED]([/color][color=BLUE]setq[/color] OLDERR [color=BLUE]*error*[/color] [color=BLUE]*error*[/color] CA_Error
        ACOBJ [color=RED]([/color][color=BLUE]vlax-get-Acad-Object[/color][color=RED])[/color]
        ACTDOC [color=RED]([/color][color=BLUE]vla-get-ActiveDocument[/color] ACOBJ[color=RED])[/color]
  [color=RED])[/color]
  [color=RED]([/color][color=BLUE]vla-endundomark[/color] ACTDOC[color=RED])[/color]
  [color=RED]([/color][color=BLUE]vla-startundomark[/color] ACTDOC[color=RED])[/color]
    [color=RED]([/color][color=DARKRED].[/color][color=DARKRED].[/color]calculation..[color=RED])[/color]
    [color=RED]([/color][color=DARKRED].[/color][color=DARKRED].[/color]create layer..[color=RED])[/color]
    [color=RED]([/color][color=DARKRED].[/color][color=DARKRED].[/color]create text..[color=RED])[/color]
  [color=RED]([/color][color=BLUE]vla-endundomark[/color] ACTDOC[color=RED])[/color]
  [color=RED]([/color][color=BLUE]if[/color] OLDERR [color=RED]([/color][color=BLUE]setq[/color] [color=BLUE]*error*[/color] OLDERR[color=RED]))[/color]
[color=RED])[/color]
[color=#990099]; ============================================================ ;[/color]
[color=#990099]; Error handling                                               ;[/color]
[color=#990099]; ============================================================ ;[/color]
[color=RED]([/color][color=BLUE]defun[/color] CA_Error [color=RED]([/color]Msg[color=RED])[/color]
  [color=RED]([/color][color=BLUE]if[/color]
    [color=RED]([/color][color=BLUE]=[/color] [color=#009900]8[/color] [color=RED]([/color][color=BLUE]logand[/color] [color=#009900]8[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=#a52a2a]"UNDOCTL"[/color][color=RED])))[/color]
    [color=RED]([/color][color=BLUE]vla-endundomark[/color] ACTDOC[color=RED])[/color]
  [color=RED])[/color]
  [color=RED]([/color][color=BLUE]if[/color]
    [color=RED]([/color][color=BLUE]or[/color]
      [color=RED]([/color][color=BLUE]=[/color] Msg [color=#a52a2a]"Function cancelled"[/color][color=RED])[/color]
      [color=RED]([/color][color=BLUE]=[/color] Msg [color=#a52a2a]"quit / exit abort"[/color][color=RED])[/color]
    [color=RED])[/color]
    [color=RED]([/color][color=BLUE]princ[/color] [color=RED]([/color][color=BLUE]strcat[/color] [color=#a52a2a]"\nError: "[/color] msg[color=RED]))[/color]
    [color=RED]([/color][color=BLUE]princ[/color] [color=#a52a2a]" Cancelled. "[/color][color=RED])[/color]
  [color=RED])[/color]
  [color=RED]([/color][color=BLUE]if[/color] OLDERR [color=RED]([/color][color=BLUE]setq[/color] [color=BLUE]*error*[/color] OLDERR[color=RED]))[/color]
[color=RED])[/color]
[color=#990099]; ============================================================ ;[/color]
[color=#990099]; Make TEXT                                                    ;[/color]
[color=#990099];   Point  [LIST] - insertion point                            ;[/color]
[color=#990099];   Height  [INT] - text height                                ;[/color]
[color=#990099];   String  [STR] - text string                                ;[/color]
[color=#990099];   Layer   [STR] - text layer                                 ;[/color]
[color=#990099]; ------------------------------------------------------------ ;[/color]
[color=#990099]; (kr:ENT_MakeText '(0 0 0) 6 "tralala" "0")                   ;[/color]
[color=#990099]; ============================================================ ;[/color]
[color=RED]([/color][color=BLUE]defun[/color] kr:ENT_MakeText [color=RED]([/color]Point Height String Layer[color=RED])[/color]
  [color=RED]([/color][color=BLUE]entmakex[/color]
    [color=RED]([/color][color=BLUE]list[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#a52a2a]"TEXT"[/color][color=RED])[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]10[/color] [color=RED]([/color][color=BLUE]trans[/color] Point [color=#009900]1[/color] [color=#009900]0[/color] [color=BLUE]t[/color][color=RED]))[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]8[/color] Layer[color=RED])[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]40[/color] Height[color=RED])[/color]
      [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]1[/color]  String[color=RED])[/color]
    [color=RED])[/color]
  [color=RED])[/color]
[color=RED])[/color]

[color=#990099]; ============================================================ ;[/color]
[color=#990099]; Make LAYER                                                   ;[/color]
[color=#990099];   Name  (STR) - layer name                                   ;[/color]
[color=#990099];   Color (INT) - layer color                                  ;[/color]
[color=#990099];   Ltype (STR) - layer linetype                               ;[/color]
[color=#990099]; ------------------------------------------------------------ ;[/color]
[color=#990099]; (kr:ENT_MakeLayer "Line" 6 "CONTINUOUS")                     ;[/color]
[color=#990099]; ============================================================ ;[/color]
[color=RED]([/color][color=BLUE]defun[/color] [color=BLUE]kr:ENT_MakeLayer[/color] [color=RED]([/color]Name Color Ltype[color=RED])[/color]
  [color=RED]([/color][color=BLUE]or[/color]
    [color=RED]([/color][color=BLUE]entmakex[/color]
      [color=RED]([/color][color=BLUE]list[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#a52a2a]"LAYER"[/color][color=RED])[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]100[/color] [color=#a52a2a]"AcDbSymbolTableRecord"[/color][color=RED])[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]100[/color] [color=#a52a2a]"AcDbLayerTableRecord"[/color][color=RED])[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]2[/color] Name[color=RED])[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]62[/color] [color=RED]([/color][color=BLUE]if[/color] Color Color [color=#009900]7[/color][color=RED]))[/color]
        [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]6[/color]
          [color=RED]([/color][color=BLUE]if[/color] [color=RED]([/color][color=BLUE]and[/color] Ltype [color=RED]([/color][color=BLUE]tblsearch[/color] [color=#a52a2a]"LTYPE"[/color] Ltype[color=RED]))[/color]
            Ltype
            [color=#a52a2a]"CONTINUOUS"[/color]
          [color=RED])[/color]
        [color=RED])[/color]
      [color=RED])[/color]
    [color=RED])[/color]
  [color=RED])[/color]
[color=RED])[/color]
kruuger
Dear Sir,
thx for help
 (..calculation..) please specify calculation opation
    (..create layer..)
    (..create text..)
« Last Edit: January 17, 2011, 01:29:54 AM by Sam »
Every time we waste electricity, we put our planet's future in the dark. Let's turn around our attiude and start saving power and our planet, before it's too late
http://www.theswamp.org/donate.html

kruuger

  • Swamp Rat
  • Posts: 637
Re: please give me advice at this lisp
« Reply #3 on: January 17, 2011, 02:44:51 AM »
Dear Sir,
thx for help
 (..calculation..) please specify calculation opation
    (..create layer..)
    (..create text..)
calculation (my english sucks) i mean all your SETQ
kruuger

Sam

  • Bull Frog
  • Posts: 201
Re: please give me advice at this lisp
« Reply #4 on: January 17, 2011, 02:52:37 AM »
Dear Sir,
thx for help
 (..calculation..) please specify calculation opation
    (..create layer..)
    (..create text..)
calculation (my english sucks) i mean all your SETQ
kruuger
Dear Sir
thx
Every time we waste electricity, we put our planet's future in the dark. Let's turn around our attiude and start saving power and our planet, before it's too late
http://www.theswamp.org/donate.html