Jump to content

Attribute editor question


77077

Recommended Posts

Hi all

I have two question, I need some help .Thanks.

 

First question.

I use Lee's Attribute Functions ,But error:

Select Attribute block:; error: bad DXF group: (1)

 

Lee' function is very great !!! Include this "LISPStyler"

[color=#990099];;(editlst '(("tag1" . "val1") ("tag2" . "val2") ("tag3" . "val3") ("tag4" . "val4")))[/color]
[color=RED]([/color][color=BLUE]defun[/color] editlst [color=RED]([/color]lst [color=BLUE]/[/color] getdata fname fn i lst1 dclid[color=RED])[/color]  
[color=RED]([/color][color=BLUE]defun[/color] getdata[color=RED]()[/color]
	[color=RED]([/color][color=BLUE]setq[/color] lst1 [color=BLUE]nil[/color] i [color=#009900]1[/color][color=RED])[/color]
	[color=RED]([/color][color=BLUE]foreach[/color] n lst
		[color=RED]([/color][color=BLUE]setq[/color] lst1 [color=RED]([/color][color=BLUE]cons[/color] [color=RED]([/color][color=BLUE]cons[/color] [color=RED]([/color][color=BLUE]car[/color] n[color=RED])[/color] [color=RED]([/color][color=BLUE]get_tile[/color] [color=RED]([/color][color=BLUE]strcat[/color] [color=#a52a2a]"key"[/color] [color=RED]([/color][color=BLUE]itoa[/color] i[color=RED]))))[/color] lst1[color=RED])[/color]
			i [color=RED]([/color][color=BLUE]1+[/color] i[color=RED])[/color]
		[color=RED])[/color]
	[color=RED])[/color]
[color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] fname [color=RED]([/color][color=BLUE]vl-filename-mktemp[/color] [color=BLUE]nil[/color] [color=BLUE]nil[/color] [color=#a52a2a]".dcl"[/color][color=RED]))[/color]
[color=RED]([/color][color=BLUE]setq[/color] fn [color=RED]([/color][color=BLUE]open[/color] fname [color=#a52a2a]"w"[/color][color=RED]))[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"EditDCL:dialog{label=\"Attribute block Editor\";"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]":boxed_column{ "[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]":row{\n:column{"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] I [color=#009900]1[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]foreach[/color] n lst
	[color=RED]([/color][color=BLUE]write-line[/color]
		[color=RED]([/color][color=BLUE]strcat[/color] [color=#a52a2a]":edit_box{label=\""[/color] [color=RED]([/color][color=BLUE]car[/color] n[color=RED])[/color]
			[color=#a52a2a]"\";value=\""[/color] [color=RED]([/color][color=BLUE]cdr[/color] n[color=RED])[/color]
			[color=#a52a2a]"\";key=\"KEY"[/color] [color=RED]([/color][color=BLUE]itoa[/color] I[color=RED])[/color] [color=#a52a2a]"\";}"[/color] 
		[color=RED])[/color] 
		fn
	[color=RED])[/color]
	[color=RED]([/color][color=BLUE]if[/color] [color=RED]([/color][color=BLUE]=[/color] [color=RED]([/color][color=BLUE]rem[/color] i [color=#009900]10[/color][color=RED])[/color] [color=#009900]0[/color][color=RED])[/color] [color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"}\n:column{"[/color] fn[color=RED]))[/color]
	[color=RED]([/color][color=BLUE]setq[/color] I [color=RED]([/color][color=BLUE]1+[/color] I[color=RED]))[/color]
[color=RED])[/color]
[color=RED]([/color][color=BLUE]if[/color] [color=RED]([/color][color=BLUE]/=[/color] [color=RED]([/color][color=BLUE]rem[/color] [color=RED]([/color][color=BLUE]1-[/color] i[color=RED])[/color] [color=#009900]10[/color][color=RED])[/color] [color=#009900]0[/color][color=RED])[/color] [color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"}"[/color] fn[color=RED]))[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"}\n}"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"ok_cancel;"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"}"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]close[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] dclid [color=RED]([/color][color=BLUE]load_dialog[/color] fname[color=RED]))[/color]
[color=RED]([/color][color=BLUE]vl-file-delete[/color] fname[color=RED])[/color]
[color=RED]([/color][color=BLUE]new_dialog[/color] [color=#a52a2a]"EditDCL"[/color] dclid[color=RED])[/color]
[color=RED]([/color][color=BLUE]action_tile[/color] [color=#a52a2a]"accept"[/color] [color=#a52a2a]"(getdata)(done_dialog 1)"[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]action_tile[/color] [color=#a52a2a]"cancel"[/color] [color=#a52a2a]"(done_dialog 0)"[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]start_dialog[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]unload_dialog[/color] dclid[color=RED])[/color]
[color=RED]([/color][color=BLUE]if[/color] lst1
	[color=RED]([/color][color=BLUE]setq[/color] lst [color=RED]([/color][color=BLUE]reverse[/color] lst1[color=RED]))[/color]
	[color=RED]([/color][color=BLUE]setq[/color] lst lst[color=RED])[/color]
[color=RED])[/color]
[color=RED])[/color]

[color=#990099];;Main[/color]
[color=RED]([/color][color=BLUE]defun[/color] c:test[color=RED]([/color][color=BLUE]/[/color] ent attlst[color=RED])[/color]
[color=RED]([/color][color=BLUE]prompt[/color] [color=#a52a2a]"Attribute block Editor"[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]while[/color] [color=RED]([/color][color=BLUE]setq[/color] ent [color=RED]([/color][color=BLUE]car[/color][color=RED]([/color][color=BLUE]entsel[/color] [color=#a52a2a]"\n Select Attribute block:"[/color][color=RED])))[/color]
	[color=RED]([/color][color=BLUE]setq[/color] attlst[color=RED]([/color]editlst [color=RED]([/color]LM:getattributes ent[color=RED])))[/color]
	[color=RED]([/color]LM:setattributevalues ent attlst[color=RED])[/color]
	[color=RED]([/color][color=BLUE]princ[/color] [color=#a52a2a]"Select the next attribute block"[/color][color=RED])[/color]
[color=RED])[/color]
[color=RED]([/color][color=BLUE]princ[/color][color=RED])[/color]
[color=RED])[/color][color=#990099];end defun[/color]

[color=#990099]; Set Attribute Values: Iterative Version[/color]
[color=#990099];; Set Attribute Values  -  Lee Mac[/color]
[color=#990099];; Sets attributes with tags found in the association list to their associated values.[/color]
[color=#990099];; blk - [ent] Block (Insert) Entity Name[/color]
[color=#990099];; lst - [lst] Association list of ((<tag> . <value>) ... )[/color]
[color=#990099];; Returns: nil[/color]

[color=RED]([/color][color=BLUE]defun[/color] LM:setattributevalues [color=RED]([/color] blk lst [color=BLUE]/[/color] enx itm [color=RED])[/color]
   [color=RED]([/color][color=BLUE]while[/color] [color=RED]([/color][color=BLUE]=[/color] [color=#a52a2a]"ATTRIB"[/color] [color=RED]([/color][color=BLUE]cdr[/color] [color=RED]([/color][color=BLUE]assoc[/color] [color=#009900]0[/color] [color=RED]([/color][color=BLUE]setq[/color] enx [color=RED]([/color][color=BLUE]entget[/color] [color=RED]([/color][color=BLUE]setq[/color] blk [color=RED]([/color][color=BLUE]entnext[/color] blk[color=RED])))))))[/color]
       [color=RED]([/color][color=BLUE]if[/color]
           [color=RED]([/color][color=BLUE]and[/color]
               [color=RED]([/color][color=BLUE]setq[/color] itm [color=RED]([/color][color=BLUE]assoc[/color] [color=RED]([/color][color=BLUE]cdr[/color] [color=RED]([/color][color=BLUE]assoc[/color] [color=#009900]2[/color] enx[color=RED]))[/color] lst[color=RED]))[/color]
               [color=RED]([/color][color=BLUE]entmod[/color] [color=RED]([/color][color=BLUE]subst[/color] [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]1[/color] [color=RED]([/color][color=BLUE]cdr[/color] itm[color=RED]))[/color] [color=RED]([/color][color=BLUE]assoc[/color] [color=#009900]1[/color] enx[color=RED])[/color] enx[color=RED]))[/color]
           [color=RED])[/color]
           [color=RED]([/color][color=BLUE]entupd[/color] blk[color=RED])[/color]
       [color=RED])[/color]
   [color=RED])[/color]
[color=RED])[/color]
[color=#990099]; Get Attributes: Iterative Version[/color]
[color=#990099];; Get Attributes  -  Lee Mac[/color]
[color=#990099];; Returns an association list of attributes present in the supplied block.[/color]
[color=#990099];; blk - [ent] Block (Insert) Entity Name[/color]
[color=#990099];; Returns: [lst] Association list of ((<Tag> . <Value>) ... )[/color]

[color=RED]([/color][color=BLUE]defun[/color] LM:getattributes [color=RED]([/color] blk [color=BLUE]/[/color] enx lst [color=RED])[/color]
   [color=RED]([/color][color=BLUE]while[/color] [color=RED]([/color][color=BLUE]=[/color] [color=#a52a2a]"ATTRIB"[/color] [color=RED]([/color][color=BLUE]cdr[/color] [color=RED]([/color][color=BLUE]assoc[/color] [color=#009900]0[/color] [color=RED]([/color][color=BLUE]setq[/color] enx [color=RED]([/color][color=BLUE]entget[/color] [color=RED]([/color][color=BLUE]setq[/color] blk [color=RED]([/color][color=BLUE]entnext[/color] blk[color=RED])))))))[/color]
       [color=RED]([/color][color=BLUE]setq[/color] lst
           [color=RED]([/color][color=BLUE]cons[/color]
               [color=RED]([/color][color=BLUE]cons[/color]
                   [color=RED]([/color][color=BLUE]cdr[/color] [color=RED]([/color][color=BLUE]assoc[/color] [color=#009900]2[/color] enx[color=RED]))[/color]
                   [color=RED]([/color][color=BLUE]cdr[/color] [color=RED]([/color][color=BLUE]assoc[/color] [color=#009900]1[/color] enx[color=RED]))[/color]
               [color=RED])[/color]
               lst
           [color=RED])[/color]
       [color=RED])[/color]
   [color=RED])[/color]
   [color=RED]([/color][color=BLUE]reverse[/color] lst[color=RED])[/color]
[color=RED])[/color]

 

 

 

 

Second question:

Edit box not the same size. cause Dialog is not beautiful.

block.png

Edited by 77077
Link to comment
Share on other sites

Lower case the name of the key attribute as following :

 

"\";key=\"[color="magenta"]key[/color]" (itoa I) "\";}" 

 

Oops! negligent! Thank you Tharwat. What about Second question ?

Link to comment
Share on other sites

Oops! negligent! Thank you Tharwat. What about Second question ?

You're welcome .

 

In regard to your second question , just add width attribute and set the value as per your needs.

Link to comment
Share on other sites

You're welcome .

 

In regard to your second question , just add width attribute and set the value as per your needs.

 

I think It's Not That Simple . editlst function need rewrite .maybe.

Link to comment
Share on other sites

I think It's Not That Simple . editlst function need rewrite .maybe.

Really? :facepalm:

 

(strcat ": row { : text { label=\"" (car n) "\";}
                : edit_box {value=\"" (cdr n) "\";key=\"key" (itoa I) "\"; width = 5; fixed_width = true;}}"
     )

Link to comment
Share on other sites

Really? :facepalm:

 

(strcat ": row { : text { label=\"" (car n) "\";}
                : edit_box {value=\"" (cdr n) "\";key=\"key" (itoa I) "\"; width = 5; fixed_width = true;}}"
     )

 

Thanks Tharwat.

I mean like this :

[color=RED]([/color][color=BLUE]defun[/color] [color=BLUE]editlst[/color] [color=RED]([/color]lst [color=BLUE]/[/color] fname fn i dclid lst_tag lst_val len_txt len_edbox[color=RED])[/color]  
[color=RED]([/color][color=BLUE]setq[/color] lst_tag[color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]car[/color] lst[color=RED]))[/color][color=#990099];new[/color]
[color=RED]([/color][color=BLUE]setq[/color] lst_val[color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]cdr[/color] lst[color=RED]))[/color][color=#990099];new[/color]
[color=RED]([/color][color=BLUE]setq[/color] len_txt[color=RED]([/color][color=BLUE]+[/color][color=RED]([/color][color=BLUE]apply[/color] [color=DARKRED]'[/color][color=BLUE]max[/color] [color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]strlen[/color] lst_tag[color=RED]))[/color][color=#009900]2[/color][color=RED]))[/color][color=#990099];new[/color]
[color=RED]([/color][color=BLUE]setq[/color] len_edbox[color=RED]([/color][color=BLUE]+[/color][color=RED]([/color][color=BLUE]apply[/color] [color=DARKRED]'[/color][color=BLUE]max[/color] [color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]strlen[/color] lst_val[color=RED]))[/color][color=#009900]2[/color][color=RED]))[/color][color=#990099];new[/color]
[color=RED]([/color][color=BLUE]setq[/color] fname [color=RED]([/color][color=BLUE]vl-filename-mktemp[/color] [color=BLUE]nil[/color] [color=BLUE]nil[/color] [color=#a52a2a]".dcl"[/color][color=RED]))[/color]
[color=RED]([/color][color=BLUE]setq[/color] fn [color=RED]([/color][color=BLUE]open[/color] fname [color=#a52a2a]"w"[/color][color=RED]))[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"EditDCL:dialog{label=\"Attribute block Editor\";"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]":boxed_row { "[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]":column {"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]foreach[/color] n lst_tag
	[color=RED]([/color][color=BLUE]write-line[/color]
		[color=RED]([/color][color=BLUE]strcat[/color] [color=#a52a2a]": text { label=\""[/color] n [color=#a52a2a]"\";
			width ="[/color][color=RED]([/color][color=BLUE]itoa[/color] [color=RED]([/color][color=BLUE]fix[/color] len_txt[color=RED]))[/color][color=#a52a2a]"; fixed_width = true;}"[/color]
		[color=RED])[/color]
		fn
	[color=RED])[/color]
[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"}"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]":column {"[/color] fn[color=RED])[/color][color=#990099];;[/color]
[color=RED]([/color][color=BLUE]setq[/color] i [color=#009900]1[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]foreach[/color] n lst_val
	[color=RED]([/color][color=BLUE]write-line[/color]
		[color=RED]([/color][color=BLUE]strcat[/color] [color=#a52a2a]": edit_box {value=\""[/color] n [color=#a52a2a]"\";
			key=\"key"[/color] [color=RED]([/color][color=BLUE]itoa[/color] i[color=RED])[/color] [color=#a52a2a]"\"; 
			width ="[/color][color=RED]([/color][color=BLUE]itoa[/color] [color=RED]([/color][color=BLUE]fix[/color] len_edbox[color=RED]))[/color][color=#a52a2a]"; fixed_width = true;}"[/color]
		[color=RED])[/color]
		fn
	[color=RED])[/color]
	[color=RED]([/color][color=BLUE]setq[/color] i [color=RED]([/color][color=BLUE]1+[/color] i[color=RED]))[/color]
[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"}\n}"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"ok_cancel;"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]write-line[/color] [color=#a52a2a]"}"[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]close[/color] fn[color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] dclid [color=RED]([/color][color=BLUE]load_dialog[/color] fname[color=RED]))[/color]
[color=RED]([/color][color=BLUE]vl-file-delete[/color] fname[color=RED])[/color]
[color=RED]([/color][color=BLUE]new_dialog[/color] [color=#a52a2a]"EditDCL"[/color] dclid[color=RED])[/color]
[color=RED]([/color][color=BLUE]action_tile[/color] [color=#a52a2a]"accept"[/color] [color=#a52a2a]"(done_dialog 1)"[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]action_tile[/color] [color=#a52a2a]"cancel"[/color] [color=#a52a2a]"(done_dialog 0)"[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]start_dialog[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]unload_dialog[/color] dclid[color=RED])[/color]
[color=RED])[/color]

 

 

But , this is not perfect . if more Attribute (>= 20), The Dialog will very long.

 

I want one column =10 , if attribute >10 , need Add a column ...

Edited by 77077
Link to comment
Share on other sites

It seems to me you're one step away from gettting back to the standard attribute edit dialog ;-)

 

 

If nobody has the nerve to bug me at my work I will see if I can post my own version of an attribute editor. But it's not completely generic and certainly not like anything posted before.

 

 

I don't now , can you post word documents here? Because the manual is about 50 pages (and it's writen in dutch) so I have to translate it first to...

 

 

 

gr. Rlx

Edited by rlx
Link to comment
Share on other sites

It seems to me you're one step away from gettting back to the standard attribute edit dialog ;-)

 

I can use command "attedit" for attribute edit. My purpose is to learning methods .

 

if more Attribute (>= 20), The Dialog will very long.

I hope one column =10 , if attribute >10 , need Add a column ...

if necessary, use the "spacer" controls to filling

 

Dialog.png

 

If nobody has the nerve to bug me at my work I will see if I can post my own version of an attribute editor. But it not completely generic and certainly not like anything posted before.

 

Welcome and await.

 

I don't now , can you post word documents here? Because the manual is about 50 pages (and it's writen in ducth) so I have to translate it first to...

 

gr. Rlx

 

what word documents ?

Link to comment
Share on other sites

Wow! While i powered on AutoCAD, there are some new posts appears :)

1st question: usually i use this routine to edit any attribute:

(defun _kpblc-set-attr-value (blk-ref tag string / _kpblc-conv-vla-to-list att err)
                            ;|
*    Set attribute value
*    Call parameters:
 blk-ref     block reference. ename, vla or nil. If nil, user should select block reference
 tag         attribute tag
 string      value
*    Call samples:
(_kpblc-set-attr-value (car (entsel)) "tag" "new value")
|;

 (defun _kpblc-conv-vla-to-list (value / res)
   (cond
     ((listp value)
      (mapcar (function _kpblc-conv-vla-to-list) value)
      )
     ((= (type value) 'variant)
      (_kpblc-conv-vla-to-list (vlax-variant-value value))
      )
     ((= (type value) 'safearray)
      (if (>= (vlax-safearray-get-u-bound value 1) 0)
        (_kpblc-conv-vla-to-list (vlax-safearray->list value))
        ) ;_ end of if
      )
     ((and (= (type value) 'vla-object)
           (vlax-property-available-p value 'count)
           ) ;_ end of and
      (vlax-for sub value
        (setq res (cons sub res))
        ) ;_ end of vlax-for
      )
     (t value)
     ) ;_ end of cond
   ) ;_ end of defun

 (cond
   ((and (not blk-ref)
         (= (type (setq blk-ref (vl-catch-all-apply
                                  (function
                                    (lambda ()
                                      (car (entsel "\nSelect block reference <Cancel> : "))
                                      ) ;_ end of lambda
                                    ) ;_ end of function
                                  ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'ename
            ) ;_ end of =
         (= (cdr (assoc 0 (entget blk-ref))) "INSERT")
         (= (cdr (assoc 66 (entget blk-ref))) 1)
         ) ;_ end of and
    (_kpblc-set-attr-value (vlax-ename->vla-object blk-ref) tag string)
    )
   ((and (= (type blk-ref) 'ename)
         (= (cdr (assoc 0 (entget blk-ref))) "INSERT")
         (= (cdr (assoc 66 (entget blk-ref))) 1)
         ) ;_ end of and
    (_kpblc-set-attr-value (vlax-ename->vla-object blk-ref) tag string)
    )
   ((and (= (type blk-ref) 'vla-object)
         (= (vla-get-objectname blk-ref) "AcDbBlockReference")
         (vlax-property-available-p blk-ref 'hasattributes)
         (equal (vla-get-hasattributes blk-ref) :vlax-true)
         ) ;_ end of and
    (if (vl-catch-all-error-p
          (setq err (vl-catch-all-apply
                      (function
                        (lambda ()
                          (if (setq att (car (vl-remove-if-not
                                               (function (lambda (x) (= (strcase (vla-get-tagstring x)) (strcase tag))))
                                               (_kpblc-conv-vla-to-list (vla-getattributes blk-ref))
                                               ) ;_ end of vl-remove-if-not
                                             ) ;_ end of car
                                    ) ;_ end of setq
                            (progn
                              (vla-put-textstring att string)
                              (vla-update blk-ref)
                              ) ;_ end of progn
                            (princ "\nAttribute not found")
                            ) ;_ end of if
                          ) ;_ end of lambda
                        ) ;_ end of function
                      ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
          ) ;_ end of vl-catch-all-error-p
      (princ "\n** Error : " (vl-catch-all-error-p err) " **")
      ) ;_ end of if
    )
   ) ;_ end of cond
 ) ;_ end of defun

2nd question: unfortunally i have no time to write and test dcl-dialg :( Sorry

Link to comment
Share on other sites

Wow! While i powered on AutoCAD, there are some new posts appears :)

1st question: usually i use this routine to edit any attribute:

2nd question: unfortunally i have no time to write and test dcl-dialg :( Sorry

 

Thanks a lot. kpblc, 1st question has been resolved . Just a new question, at #7 & #9

Link to comment
Share on other sites

Right now i can't start Windows, so the answer is not tested. Try to use "align" and "children_align" attributes to place all rows to up. Perhaps it will works.

 

Dear kpblc, Why can't start windows? :o ,

 

Now ,my problem is not about align , Did you see my post at #7 ? is about add new column . Thanks a lot.

Link to comment
Share on other sites

OK! All the problems have been resolved.:P

 

(setq lst_tag(mapcar 'car lst))
(setq new_lst(LM:groupbynum lst_tag 10))
(setq nt (length new_lst))
(setq lst_val(mapcar 'cdr lst))
(setq new_lst2(LM:groupbynum lst_val 10))

(setq len_txt(+(apply 'max (mapcar 'strlen lst_tag))2))
(setq len_edbox(+(apply 'max (mapcar 'strlen lst_val))2))
(setq fname (vl-filename-mktemp nil nil ".dcl"))
(setq fn (open fname "w"))
(write-line "EditDCL:dialog{label=\"Attribute block Editor\";" fn)
(write-line ":boxed_row { " fn);;2
(setq i 1)	
(repeat nt
(write-line ":column {" fn)
(setq v2 (- nt v1) v1(1- v1))
(foreach n (nth v2 new_lst)
	(write-line
		(strcat ": text { value=\"" n "\";
			width ="(itoa (fix len_txt))"; fixed_width = true;}"
		)
		fn
	)
)
(if (<(length (nth v2 new_lst))10)
	(write-line
		(strcat ":spacer { height ="(itoa(fix(*(- 10(length(nth v2 new_lst)))2)))" ;}")
		fn
	)
);end_if
(write-line "}" fn)
(write-line ":column {" fn);;
(foreach n (nth v2 new_lst2)
	(write-line
		(strcat ": edit_box {value=\"" n "\";
			key=\"key" (itoa i) "\"; 
			width ="(itoa (fix len_edbox))"; fixed_width = true;}"
		)
		fn
	)
	(setq i (1+ i))
)
(if (<(length (nth v2 new_lst))10)
	(write-line
		(strcat ":spacer { height ="(itoa(fix(*(- 10(length(nth v2 new_lst)))2)))" ;}")
		fn
	)
);end_if
(write-line "}" fn)
);;end_repeat

 

Test list1

(setq lst 
'(
	("tag1" . "val1") 
	("tag2" . "val2") 
	("tag3" . "val3") 
	("tag4" . "val4")
	("tag5" . "val5")
	("tag6" . "val6")
	("tag7" . "val7")
	("tag8" . "val8")
	("tag9" . "val9")
	("tag10" . "val10")
	("tag11" . "val11")
	("tag12" . "val12")
	("tag13" . "val13")
	("tag14" . "val14")
	("tag15" . "val15")
	("tag16" . "val16")
	("tag17" . "val17")
	("tag18" . "val18")
	("tag19" . "val19")
	("tag20" . "val20")
	("tag21" . "val21")
	("tag22" . "val22")
	("tag23" . "val23")
	("tag24" . "val24")
	("tag25" . "val25")
	("tag26" . "val26")
	("tag27" . "val27")
	("tag28" . "val28")
	("tag29" . "val29")
	("tag30" . "val30")
)
)

 

Result:

1.png

 

Test list2

(setq lst 
'(
	("tag1" . "val1") 
	("tag2" . "val2") 
	("tag3" . "val3") 
	("tag4" . "val4")
	("tag5" . "val5")
	("tag6" . "val6")
	("tag7" . "val7")
	("tag8" . "val8")
	("tag9" . "val9")
	("tag10" . "val10")
	("tag11" . "val11")
	("tag12" . "val12")
)
)

 

Result:

2.png

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