下面是一个函数的草稿,用于确定具有文本内容的多重引线的文本框:
[color=GREEN];; MLeader Textbox - Lee Mac[/color][color=GREEN];; Returns four OCS points describing the textbox of the content for a given MLeader[/color][color=GREEN];; ent - [ent] MLeader entity[/color]([color=BLUE]defun[/color] LM:mleadertextbox ( ent [color=BLUE]/[/color] bpt enx hgt jus lst mat org prp rot wid ) ([color=BLUE]if[/color] ([color=BLUE]=[/color] [color=BLUE]acmtextcontent[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 172 ([color=BLUE]reverse[/color] ([color=BLUE]setq[/color] enx ([color=BLUE]entget[/color] ent)))))) ([color=BLUE]progn[/color] ([color=BLUE]setq[/color] prp ([color=BLUE]list[/color] ([color=BLUE]cons[/color] 40 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 41 enx))) ([color=BLUE]cons[/color] 07 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 02 ([color=BLUE]entget[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 340 enx)))))) ) lst ([color=BLUE]vl-remove-if[/color] '[color=BLUE]null[/color] ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( str [color=BLUE]/[/color] box ) ([color=BLUE]if[/color] ([color=BLUE]setq[/color] box ([color=BLUE]textbox[/color] ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] 1 str) prp))) ([color=BLUE]mapcar[/color] '[color=BLUE]-[/color] ([color=BLUE]cadr[/color] box) ([color=BLUE]car[/color] box)) ) ) (LM:str->lst ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 304 enx)) [color=MAROON]"\\P"[/color]) ) ) bpt ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 12 enx)) 0 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 11 enx))) rot ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 042 enx)) jus ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 171 enx)) wid ([color=BLUE]apply[/color] '[color=BLUE]max[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]car[/color] lst)) hgt ([color=BLUE]+[/color] ([color=BLUE]apply[/color] '[color=BLUE]+[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]cadr[/color] lst)) ([color=BLUE]*[/color] 0.68 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 45 enx)) ([color=BLUE]1-[/color] ([color=BLUE]length[/color] lst)))) org ([color=BLUE]list[/color] ([color=BLUE]cond[/color] (([color=BLUE]member[/color] jus '(2 5 ) ([color=BLUE]/[/color] wid -2.0)) (([color=BLUE]member[/color] jus '(3 6 9)) ([color=BLUE]-[/color] wid)) (0.0)) ([color=BLUE]cond[/color] (([color=BLUE]member[/color] jus '(1 2 3)) ([color=BLUE]-[/color] hgt)) (([color=BLUE]member[/color] jus '(4 5 6)) ([color=BLUE]/[/color] hgt -2.0)) (0.0)) ) mat ([color=BLUE]list[/color] ([color=BLUE]list[/color] ([color=BLUE]cos[/color] rot) ([color=BLUE]sin[/color] ([color=BLUE]-[/color] rot)) 0.0) ([color=BLUE]list[/color] ([color=BLUE]sin[/color] rot) ([color=BLUE]cos[/color] rot) 0.0) '(0.0 0.0 1.0) ) ) ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( p ) ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] (mxv mat p) bpt)) ([color=BLUE]list[/color] org ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] org ([color=BLUE]list[/color] wid 0)) ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] org ([color=BLUE]list[/color] wid hgt)) ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] org ([color=BLUE]list[/color] 0 hgt)) ) ) ) ))[color=GREEN];; String to List - Lee Mac[/color][color=GREEN];; Separates a string using a given delimiter[/color][color=GREEN];; str - [str] String to process[/color][color=GREEN];; del - [str] Delimiter by which to separate the string[/color][color=GREEN];; Returns: [lst] List of strings[/color]([color=BLUE]defun[/color] LM:str->lst ( str del [color=BLUE]/[/color] pos ) ([color=BLUE]if[/color] ([color=BLUE]setq[/color] pos ([color=BLUE]vl-string-search[/color] del str)) ([color=BLUE]cons[/color] ([color=BLUE]substr[/color] str 1 pos) (LM:str->lst ([color=BLUE]substr[/color] str ([color=BLUE]+[/color] pos 1 ([color=BLUE]strlen[/color] del))) del)) ([color=BLUE]list[/color] str) ))[color=GREEN];; Matrix x Vector - Vladimir Nesterovsky[/color][color=GREEN];; Args: m - nxn matrix, v - vector in R^n[/color]([color=BLUE]defun[/color] mxv ( m v ) ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( r ) ([color=BLUE]apply[/color] '[color=BLUE]+[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]*[/color] r v))) m))
和一个小测试程序:
([color=BLUE]defun[/color] c:test ( [color=BLUE]/[/color] e v ) ([color=BLUE]if[/color] ([color=BLUE]setq[/color] e ([color=BLUE]ssget[/color] [color=MAROON]"_+.:E:S"[/color] '((0 . [color=MAROON]"MULTILEADER"[/color])))) ([color=BLUE]progn[/color] ([color=BLUE]setq[/color] e ([color=BLUE]ssname[/color] e 0) v ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 11 ([color=BLUE]entget[/color] e))) ) ([color=BLUE]foreach[/color] x (LM:mleadertextbox e) ([color=BLUE]entmake[/color] ([color=BLUE]list[/color] '(0 . [color=MAROON]"POINT"[/color]) ([color=BLUE]cons[/color] 10 ([color=BLUE]trans[/color] x v 0)))) ) ) ) ([color=BLUE]princ[/color]))