<BR>;;;希望能起抛砖引玉的作用,能有人把放大(fd)的那一块给写下去。
(vl-load-com)<BR>;;;(alert "\n局部放大jbfd,小金鱼2004.2.18")<BR>(defun c:jbfd (/ *error* mSpace cir i NEXT_PT<BR> READTYP READVAL basept line text tzz<BR> txtlen l2 l2end cen pt text_x<BR> ptt l2_x fh fh1 ss1<BR> MakeUnNameBlock<BR> )
(defun *error* (msg / ent count)<BR> (cond<BR> ((or (= msg "函数被取消") (= msg "function cancelled"))<BR> (command "_.ERASE" ss1 "")<BR> )<BR> ((= msg "ActiveX 服务器返回错误: 未知名称: Center") ;处理输入d<BR> (alert (strcat "唉,我无法处理\"d\"错误,"<BR> "\n如果你知道请通知我。"<BR> "\nE_mail:cag25@sohu.com"<BR> "\nQQ:297240086"<BR> )<BR> )<BR> )<BR> (T<BR> (alert (strcat msg<BR> "\n\n对不起,有错误产生,请通知我。"<BR> "\nE_mail:cag25@sohu.com"<BR> "\nQQ:297240086"<BR> )<BR> )<BR> )<BR> )<BR> )
(setq mSpace (vla-get-ModelSpace<BR> (vla-get-ActiveDocument (vlax-get-acad-object))<BR> )<BR> )<BR> (setq ss1 (ssadd))
(defun MakeUnNameBlock (ss pt / count entlist ent blk)<BR> (entmake (list '(0 . "BLOCK")<BR> '(2 . "*U")<BR> '(70 . 1)<BR> (cons 10 pt)<BR> )<BR> )<BR> (setq count 0)<BR> (repeat (sslength ss)<BR> (setq entlist (entget (setq ent (ssname ss count))))<BR> (setq count (1+ count))<BR> (entmake entlist)<BR> )<BR> (setq count 0)<BR> (repeat (sslength ss)<BR> (setq ent (ssname ss count))<BR> (setq count (1+ count))<BR> (entdel ent)<BR> )<BR> (setq blk (entmake '((0 . "ENDBLK"))))<BR> (if T<BR> (entmake (list (cons 0 "INSERT")<BR> (cons 2 blk)<BR> (cons 10 pt)<BR> )<BR> )<BR> )<BR> )
(defun Tzz (Text / textent ang sinrot cosrot t1 t2 p0 p1 p2 p3 p4)<BR> (setq textent (entget (vlax-vla-object->ename Text)))<BR> (setq p0 (cdr (assoc 10 textent))<BR> ang (cdr (assoc 50 textent))<BR> sinrot (sin ang)<BR> cosrot (cos ang)<BR> t1 (car (textbox textent))<BR> t2 (cadr (textbox textent))<BR> p1 (list<BR> (+ (car p0)<BR> (- (* (car t1) cosrot) (* (cadr t1) sinrot))<BR> )<BR> (+ (cadr p0)<BR> (+ (* (car t1) sinrot) (* (cadr t1) cosrot))<BR> )<BR> )<BR> p2 (list<BR> (+ (car p0)<BR> (- (* (car t2) cosrot) (* (cadr t1) sinrot))<BR> )<BR> (+ (cadr p0)<BR> (+ (* (car t2) sinrot) (* (cadr t1) cosrot))<BR> )<BR> )<BR> )<BR> (distance p1 p2)<BR> )
(defun fd (/ minpt maxpt ss2)<BR> (vla-getboundingbox cir 'minpt 'maxpt)<BR> (setq minpt (vlax-safearray->list minpt)<BR> maxpt (vlax-safearray->list maxpt)<BR> )<BR> (setq ss2 (ssget "C" maxpt minpt))<BR> (command "copy" ss2 "" cen)<BR> (princ "\n指定放大图位置:")<BR> (if (not (command pause))<BR> (MakeUnNameBlock ss1 cen)<BR> )<BR> )<BR> <BR> (setvar "cmdecho" 0)<BR> (initget 1)<BR> (setq p1 (getpoint "\n指定放大中心点:"))<BR> (command "circle" p1)<BR> (princ<BR> (strcat "\n指定放大半径 <" (rtos (getvar "CIRCLERAD")) ">:")<BR> )<BR> (command pause)<BR> (setq cir (vlax-ename->vla-object (entlast)))<BR> (vla-put-color cir (getvar "dimclrd"))<BR> (vla-update cir)<BR> (ssadd (entlast) ss1)<BR> (setq cen (vlax-safearray->list<BR> (vlax-variant-value (vla-get-center cir))<BR> )<BR> )<BR> (setq pt (car cen))<BR> (princ "\n指定视图符号放置位置 <右键或回车修改视图符号>:")<BR> (setq i T)<BR> (while i<BR> (Setq NEXT_PT (GrRead T 4 0)<BR> READTYP (car NEXT_PT)<BR> READVAL (cadr NEXT_PT)<BR> )<BR> (cond<BR> ((= READTYP 5) ;移动<BR> (setq NEXT_PT (cadr NEXT_PT))<BR> (setq next_pt (trans next_pt 1 0))<BR> (setq basept (vlax-curve-getclosestpointto cir NEXT_PT))<BR> (if (not line)<BR> (progn<BR> (if (not fh)<BR> (setq fh "A")<BR> )<BR> (setq text (vla-addtext<BR> mspace<BR> fh<BR> (vlax-3d-point next_pt)<BR> (getvar "dimtxt")<BR> )<BR> )<BR> (vla-put-color text (getvar "dimclrt"))<BR> (vla-put-stylename text (getvar "dimtxsty"))<BR> (vla-update text)<BR> (ssadd (entlast) ss1)<BR> (setq line (vla-addline<BR> mspace<BR> (vlax-3d-point basept)<BR> (vlax-3d-point next_pt)<BR> )<BR> )<BR> (vla-put-color line (getvar "dimclrd"))<BR> (ssadd (entlast) ss1)<BR> (setq txtlen (tzz text))<BR> (setq l2end (list (+ (car next_pt) txtlen) (cadr next_pt) 0))<BR> (setq l2 (vla-addline<BR> mspace<BR> (vlax-3d-point next_pt)<BR> (vlax-3d-point l2end)<BR> )<BR> )<BR> (vla-put-color l2 (getvar "dimclrd"))<BR> (ssadd (entlast) ss1)<BR> )<BR> (progn<BR> (vla-put-startpoint line (vlax-3d-point basept))<BR> (vla-put-endpoint line (vlax-3d-point next_pt))<BR> (vla-update line)<BR> (setq ptt (car next_pt))<BR> (if (> ptt pt)<BR> (progn<BR> (setq text_x (+ (car next_pt) (getvar "dimgap")))<BR> (setq l2_x (+ (car next_pt) txtlen (getvar "dimgap")))<BR> )<BR> (progn<BR> (setq text_x (- (car next_pt) (getvar "dimgap") txtlen))<BR> (setq l2_x text_x)<BR> )<BR> )<BR> (vla-put-insertionpoint<BR> text<BR> (vlax-3d-point<BR> (list text_x (+ (cadr next_pt) (getvar "dimgap")) 0)<BR> )<BR> )<BR> (vla-update text)<BR> (vla-put-startpoint l2 (vlax-3d-point next_pt))<BR> (setq l2end (list l2_x (cadr next_pt) 0))<BR> (vla-put-endpoint l2 (vlax-3d-point l2end))<BR> (vla-update l2)<BR> )<BR> )<BR> )<BR> ((= READTYP 3) ;左键击<BR>;;; (MakeUnNameBlock ss1 cen)<BR> (setq i nil)<BR> )<BR> ((or (= 25 readtyp) (= 13 READVAL)) ;回车或右键<BR> (setq fh1 fh)<BR> (setq fh (getstring (strcat<BR> "\n输入新视图符号 <"<BR> fh<BR> ">:"<BR> )<BR> )<BR> )<BR> (if (= fh "")<BR> (setq fh fh1)<BR> )<BR> (vla-put-textstring text fh)<BR> (vla-update text)<BR> (setq txtlen (tzz text))<BR> (princ "\n指定视图符号放置位置 <右键或回车修改视图符号>:")<BR> )<BR> )<BR> )<BR> (fd)<BR> (princ)<BR>)
<BR>這個OK
<BR> 還有些地方有待改進. 將就用用先.
<BR>(vl-load-com)<BR>;;;(alert "\n局部放大jbfd,小金?2004.2.18")<BR>(defun c:jbfd (/ *error* mSpace cir i NEXT_PT<BR> READTYP READVAL basept line text tzz<BR> txtlen l2 l2end cen pt text_x<BR> ptt l2_x fh fh1 ss1<BR> MakeUnNameBlock<BR> )
(defun *error* (msg / ent count)<BR> (cond<BR> ((or (= msg "函?被取消") (= msg "function cancelled"))<BR> (command "_.ERASE" ss1 "")<BR> )<BR> ((= msg "ActiveX 服?器返回??: 未知名?: Center") ;?理?入d<BR> (alert (strcat "唉,我?法?理\"d\"??,"<BR> "\n如果你知道?通知我。"<BR> "\nE_mail:cag25@sohu.com"<BR> "\nQQ:297240086"<BR> )<BR> )<BR> )<BR> (T<BR> (alert (strcat msg<BR> "\n\n?不起,有???生,?通知我。"<BR> "\nE_mail:cag25@sohu.com"<BR> "\nQQ:297240086"<BR> )<BR> )<BR> )<BR> )<BR> )
(setq mSpace (vla-get-ModelSpace<BR> (vla-get-ActiveDocument (vlax-get-acad-object))<BR> )<BR> )<BR> (setq ss1 (ssadd))
(defun MakeUnNameBlock (ss pt / count entlist ent blk)<BR> (entmake (list '(0 . "BLOCK")<BR> '(2 . "*U")<BR> '(70 . 1)<BR> (cons 10 pt)<BR> )<BR> )<BR> (setq count 0)<BR> (repeat (sslength ss)<BR> (setq entlist (entget (setq ent (ssname ss count))))<BR> (setq count (1+ count))<BR> (entmake entlist)<BR> )<BR> (setq count 0)<BR> (repeat (sslength ss)<BR> (setq ent (ssname ss count))<BR> (setq count (1+ count))<BR> (entdel ent)<BR> )<BR> (setq blk (entmake '((0 . "ENDBLK"))))<BR> (if T<BR> (entmake (list (cons 0 "INSERT")<BR> (cons 2 blk)<BR> (cons 10 pt)<BR> )<BR> )<BR> )<BR> )
(defun Tzz (Text / textent ang sinrot cosrot t1 t2 p0 p1 p2 p3 p4)<BR> (setq textent (entget (vlax-vla-object->ename Text)))<BR> (setq p0 (cdr (assoc 10 textent))<BR> ang (cdr (assoc 50 textent))<BR> sinrot (sin ang)<BR> cosrot (cos ang)<BR> t1 (car (textbox textent))<BR> t2 (cadr (textbox textent))<BR> p1 (list<BR> (+ (car p0)<BR> (- (* (car t1) cosrot) (* (cadr t1) sinrot))<BR> )<BR> (+ (cadr p0)<BR> (+ (* (car t1) sinrot) (* (cadr t1) cosrot))<BR> )<BR> )<BR> p2 (list<BR> (+ (car p0)<BR> (- (* (car t2) cosrot) (* (cadr t1) sinrot))<BR> )<BR> (+ (cadr p0)<BR> (+ (* (car t2) sinrot) (* (cadr t1) cosrot))<BR> )<BR> )<BR> )<BR> (distance p1 p2)<BR> )
<BR> <BR> (setvar "cmdecho" 0)<BR> (initget 1)<BR> (setq p1 (getpoint "\n指定放大中心?:"))<BR> (command "circle" p1)<BR> (princ<BR> (strcat "\n指定放大半? <" (rtos (getvar "CIRCLERAD")) ">:")<BR> )<BR> (command pause)<BR> (setq newcircle (entlast))<BR> (setq cir (vlax-ename->vla-object (entlast)))<BR> (vla-put-color cir (getvar "dimclrd"))<BR> (vla-update cir)<BR> (ssadd (entlast) ss1)<BR> (setq cen (vlax-safearray->list<BR> (vlax-variant-value (vla-get-center cir))<BR> )<BR> )<BR> (setq pt (car cen))<BR> (princ "\n指定??符?放置位置 <右?或回?修改??符?>:")<BR> (setq i T)<BR> (while i<BR> (Setq NEXT_PT (GrRead T 4 0)<BR> READTYP (car NEXT_PT)<BR> READVAL (cadr NEXT_PT)<BR> )<BR> (cond<BR> ((= READTYP 5) ;移?<BR> (setq NEXT_PT (cadr NEXT_PT))<BR> (setq next_pt (trans next_pt 1 0))<BR> (setq basept (vlax-curve-getclosestpointto cir NEXT_PT))<BR> (if (not line)<BR> (progn<BR> (if (not fh)<BR> (setq fh "A")<BR> )<BR> (setq text (vla-addtext<BR> mspace<BR> fh<BR> (vlax-3d-point next_pt)<BR> (getvar "dimtxt")<BR> )<BR> )<BR> (vla-put-color text (getvar "dimclrt"))<BR> (vla-put-stylename text (getvar "dimtxsty"))<BR> (vla-update text)<BR> (ssadd (entlast) ss1)<BR> (setq line (vla-addline<BR> mspace<BR> (vlax-3d-point basept)<BR> (vlax-3d-point next_pt)<BR> )<BR> )<BR> (vla-put-color line (getvar "dimclrd"))<BR> (ssadd (entlast) ss1)<BR> (setq txtlen (tzz text))<BR> (setq l2end (list (+ (car next_pt) txtlen) (cadr next_pt) 0))<BR> (setq l2 (vla-addline<BR> mspace<BR> (vlax-3d-point next_pt)<BR> (vlax-3d-point l2end)<BR> )<BR> )<BR> (vla-put-color l2 (getvar "dimclrd"))<BR> (ssadd (entlast) ss1)<BR> )<BR> (progn<BR> (vla-put-startpoint line (vlax-3d-point basept))<BR> (vla-put-endpoint line (vlax-3d-point next_pt))<BR> (vla-update line)<BR> (setq ptt (car next_pt))<BR> (if (> ptt pt)<BR> (progn<BR> (setq text_x (+ (car next_pt) (getvar "dimgap")))<BR> (setq l2_x (+ (car next_pt) txtlen (getvar "dimgap")))<BR> )<BR> (progn<BR> (setq text_x (- (car next_pt) (getvar "dimgap") txtlen))<BR> (setq l2_x text_x)<BR> )<BR> )<BR> (vla-put-insertionpoint<BR> text<BR> (vlax-3d-point<BR> (list text_x (+ (cadr next_pt) (getvar "dimgap")) 0)<BR> )<BR> )<BR> (vla-update text)<BR> (vla-put-startpoint l2 (vlax-3d-point next_pt))<BR> (setq l2end (list l2_x (cadr next_pt) 0))<BR> (vla-put-endpoint l2 (vlax-3d-point l2end))<BR> (vla-update l2)<BR> )<BR> )<BR> )<BR> ((= READTYP 3) ;左??<BR>;;; (MakeUnNameBlock ss1 cen)<BR> (setq i nil)<BR> )<BR> ((or (= 25 readtyp) (= 13 READVAL)) ;回?或右?<BR> (setq fh1 fh)<BR> (setq fh (getstring (strcat<BR> "\n?入新??符? <"<BR> fh<BR> ">:"<BR> )<BR> )<BR> )<BR> (if (= fh "")<BR> (setq fh fh1)<BR> )<BR> (vla-put-textstring text fh)<BR> (vla-update text)<BR> (setq txtlen (tzz text))<BR> (princ "\n指定??符?放置位置 <右?或回?修改??符?>:")<BR> )<BR> )<BR> )<BR> (fd)<BR> (bdycad)<BR> (princ)<BR>)
<BR>(defun fd (/ minpt maxpt ss2)<BR> (vla-getboundingbox cir 'minpt 'maxpt)<BR> (setq minpt (vlax-safearray->list minpt)<BR> maxpt (vlax-safearray->list maxpt)<BR> )<BR> (setq ss2 (ssget "C" maxpt minpt))<BR> <BR> (command "copy" ss2 "" cen)<BR> (princ "\n指定放大?位置:")<BR> (command pause)<BR>;;; (if (not (command pause))<BR>;;;;;; (MakeUnNameBlock ss1 cen)<BR>;;; )<BR> )<BR>(defun bdycad()<BR> (defun GetPoints2004-04-22 (lst1 / pt lst1 )<BR> (while (setq lst1 (member (assoc 10 lst1) lst1))<BR> (setq pt (append pt (list (cdr (car lst1)))))<BR> (setq lst1 (cdr lst1)))<BR> pt<BR>)<BR>(setq ssb (ssget "x" (list (cons 10(getvar "lastpoint")) (assoc 40 (entget newcircle)))))<BR>(command ".POLYGON" 40 (getvar "lastpoint") "c" (+(cdr (assoc 40 (entget newcircle)))0.1))<BR>(setq polsel (entlast))<BR>(setq trimp (GetPoints2004-04-22 (entget polsel)))<BR>(progn ; 強行修剪 搞掂<BR>(command ".trim" ssb "" );"f" trimp)<BR>(setq it 0)<BR>(repeat (- (length trimp) 1)<BR> (setq trp1 (nth it trimp)<BR> trp2 (nth (1+ it) trimp))<BR> (command "f" trp1 trp2 "")<BR> (setq it (1+ it)))<BR>(command ""))<BR>(progn ; 強行刪除搞掂<BR>(setq it 0)<BR>(repeat (- (length trimp) 1)<BR> (setq trp1 (nth it trimp)<BR> trp2 (nth (1+ it) trimp))<BR> (if (setq erase (ssget "f" (list trp1 trp2 )))<BR> (command ".erase" erase ""))<BR> (setq it (1+ it)))<BR>)<BR> (if (=(setq scalebb (getreal "\n輸入放大的倍數<2>:"))nil)<BR> (setq scalebb 2))<BR>(command ".scale" (ssget "cp" trimp)"" (getvar "lastpoint") scalebb)<BR> (princ)<BR> )<BR>
|