我有一点时间,所以希望你能从这段喃喃自语中找到值得一读的东西:
- [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] [color=black]c:test[/color] [b][color=RED]([/color][/b] [b][color=BLUE]/[/color][/b] entity [b][color=RED])[/color][/b]
- [i][color=#990099];; Define function, localise variable 'entity' used.[/color][/i]
- [i][color=#990099];; You can try to think of a better function syntax :-)[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [i][color=#990099];; IF the following expression returns True[/color][/i]
- [i][color=#990099];; (any non-nil value in fact, string, number you name it - just not 'nil')[/color][/i]
- [i][color=#990099];; we will proceed to the 'then' expression...[/color][/i]
- [i][color=#990099];; IF 'Test' Expression Starts Here {[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [i][color=#990099];; All of the expressions enclosed must return True[/color][/i]
- [i][color=#990099];; for the AND function to return True. AND will stop[/color][/i]
- [i][color=#990099];; evaluating expressions as soon as an expression returns[/color][/i]
- [i][color=#990099];; False.[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] entity [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entsel[/color][/b] [b][color=#a52a2a]"\nSelect Attributed Block: "[/color][/b][b][color=RED])))[/color][/b]
- [i][color=#990099];; Prompt user for selection.[/color][/i]
- [i][color=#990099];; If user misses, entsel returns nil, hence (car (entsel)) also returns nil.[/color][/i]
- [i][color=#990099];; [Try it! (car nil) = nil][/color][/i]
- [i][color=#990099];; Else, if user picks object, entsel returns list of entity and picked point[/color][/i]
- [i][color=#990099];; [Try it! type (entsel) at the command line, pick an object and...[/color][/i]
- [i][color=#990099];; (<Entity> (x y z)), so (car (entsel)) returns <Entity> [bingo!][/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]"INSERT"[/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] entity[b][color=RED]))))[/color][/b]
- [i][color=#990099];; Check that our user has picked a block and not some other unwanted[/color][/i]
- [i][color=#990099];; object like a pesky line.[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]=[/color][/b] [b][color=#009900]1[/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]66[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] entity[b][color=RED]))))[/color][/b]
- [i][color=#990099];; Check that the block is attributed, the 66 code means that ATTRIB[/color][/i]
- [i][color=#990099];; entities follow the block entity terminated by a SEQEND entity.[/color][/i]
- [i][color=#990099];; It is these ATTRIBute entities that we will query.[/color][/i]
- [i][color=#990099];; Source: http://autodesk.com/techpubs/autocad/acad2000/dxf/insert_dxf_06.htm[/color][/i]
-
- [b][color=RED])[/color][/b] [i][color=#990099];; End AND[/color][/i]
- [i][color=#990099];; } IF 'Test' Expression Ends Here[/color][/i]
- [i][color=#990099];; All of our conditions have returned True, so lets rock and roll...[/color][/i]
- [i][color=#990099];; IF 'Then' Expression Starts Here {[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [i][color=#990099];; While the following expression returns a non-nil value:[/color][/i]
-
- [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] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] entity [b][color=RED]([/color][/b][b][color=BLUE]entnext[/color][/b] entity[b][color=RED]))))))[/color][/b]
- [i][color=#990099];; We now look at the entity following the INSERT entity by using the[/color][/i]
- [i][color=#990099];; ENTNEXT function (pretty self-explanatory, 'next entity' so we use 'ent next'[/color][/i]
- [i][color=#990099];; We've checked that the INSERT entity has ATTRIBute entities following it[/color][/i]
- [i][color=#990099];; (DXF code 66=1) hence we know that the loop will run through at least once.[/color][/i]
- [i][color=#990099];; So: WHILE we are dealing with an ATTRIB entity and not a SEQEND Entity...[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]"\nAttribute: "[/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]2[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] entity[b][color=RED])))))[/color][/b]
- [i][color=#990099];; Print the Attribute TAG string to the screen for all to see[/color][/i]
- [i][color=#990099];; (DXF code 2 of the ATTRIB entity)[/color][/i]
- [i][color=#990099];; Source: http://autodesk.com/techpubs/autocad/acad2000/dxf/attrib_dxf_06.htm[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]" Value: "[/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]1[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] entity[b][color=RED])))))[/color][/b]
- [i][color=#990099];; Print the Attribute VALUE string to the screen for all to see[/color][/i]
- [i][color=#990099];; (DXF code 1 of the ATTRIB entity)[/color][/i]
- [i][color=#990099];; Source: You can't have missed it if you studied the previous comment ;-)[/color][/i]
-
- [b][color=RED])[/color][/b] [i][color=#990099];; End WHILE[/color][/i]
- [i][color=#990099];; Doh! No 'Else' expression to evaluate...[/color][/i]
-
- [b][color=RED])[/color][/b] [i][color=#990099];; End IF[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099];; Lets keep the return of the last function a secret and exit quietly[/color][/i]
-
- [b][color=RED])[/color][/b] [i][color=#990099];; End DEFUN[/color][/i]
-
|