Zobrazit plnou verzi příspěvku: Lisp mleader

Pan.Fazole
12.04.2014, 23:17
AhojPotřeboval bych poradit - nějak nakopnout :• mám např. obdélník• ten obdélník je v bloku• ten blok má nějaký ref. bod a nějaký název (např. obdélník)a já bych potřeboval lisp který mi automaticky vytvoří odkaz (_mleader) vycházející z refenčního bodu a jehož text bude název toho blokusnažim se tu s googlem a nápovědou dvě noci po sobě něco vyplodit, ale výsledek takřka nula nula nic :(snad jen tento kód (háže okno s názvem bloku a ještě musim ten blok ručně vybrat - což je sice hezký ale to nechci :)  ) (defun c:test  (/ ent)(vl-load-com)      (cond            ((and                   (setq ent (car (entsel "\nVyber blok: ")))                   (eq (cdr (assoc 0 (entget ent))) "Vloz")                   (alert (strcat "Nazev:"                                  (vla-get-effectivename                                        (vlax-ename->vla-object ent)))))             ))Díky za každou pomoc

Vladimír Michl
13.04.2014, 11:12

A jak chcete ten blok vybrat když ne ručně? Potřebujete všechny bloky nebo jeden konkrétního jména? Nestačila by standardní popiska textovým polem?

hlusiakov
13.04.2014, 17:08
Ahoj, tady máš to co potřebuješ ;)Stačí složku v archivu zkopírovat do %appdata%\Autodesk\ApplicationPluginsa potom v AutoCAD zadáš jen příkaz BLEADERBlockLeader.bundle.rar

Vladimír Michl
13.04.2014, 18:07

Hezké, popřípadě verze v AutoLISPu (soubor.lsp):[CODE];popiska názvu bloku - CAD Studio;;(setvar "DIMTXT" 10)(defun C:BLeader ( / ss ent blkname pt) (setvar "CMDECHO" 0) (princ "\nVyberte blok:") (setq ss (ssget "_+.:E:S" '((0 . "INSERT")))) (if ss (progn  (setq ent (entget (ssname ss 0))        blkname (cdr (assoc 2 ent))        pt (cdr (assoc 10 ent)))  (princ (strcat blkname " - umístění popisky: "))  (command "_LEADER" pt pause "" blkname "") ));if (setvar "CMDECHO" 1) (prin1))(princ "\nPříkaz BLeader načten.")(prin1)[/CODE]

Pan.Fazole
28.04.2014, 00:58
Dobrý denMoc děkuji za odpovědi a pomoc.Ale toto není úplně to přesné co potřebuji.Řekněme že mám ve výkrese 3objekty (kvádr, krychle, kužel), každý je v samostatném bloku s názvem (kvádr, krychle,kužel)A já bych potřeboval, aby lisp prošel celý výkres a ke všem blokům přiřadil odkaz s názvem příslušného bloku. Takže bych měl 3odkazy (kvádr, krychle, kužel). Na pozici odkazu by nezáleželo.

Vladimír Michl
28.04.2014, 08:16

Na to bude stačit menší úprava: [CODE];popiska názvu bloku - CAD Studio;;(setvar "DIMTXT" 10)(defun C:BLeader ( / ss ent blkname pt) (setvar "CMDECHO" 0) (princ "\nVyberte bloky:"); (setq ss (ssget "_+.:E:S" '((0 . "INSERT")))) (setq ss (ssget '((0 . "INSERT")))) (if ss  (while (setq ent (ssname ss 0))   (ssdel ent ss)   (setq ent (entget ent)         blkname (cdr (assoc 2 ent))         pt (cdr (assoc 10 ent)))   (princ (strcat blkname " "))   (setvar "OSMODE" (boole 7 (getvar "OSMODE") 16384))   (command "_LEADER" pt (list (+ (car pt)(getvar "DIMTXT"))(+ (cadr pt)(getvar "DIMTXT"))) "" blkname "")   (setvar "OSMODE" (boole 2 (getvar "OSMODE") 16384)) )) ;if/while (setvar "CMDECHO" 1) (prin1))(princ "\nPříkaz BLeader načten.")(prin1)[/CODE]