查看: 1898|回复: 2

[转帖]一个局部放大程序

[复制链接]
2443725 发表于 2004-4-25 23:49 | 显示全部楼层 |阅读模式
<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-&gt;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-&gt;list minpt)<BR>                 maxpt (vlax-safearray-&gt;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指定放大半径 &lt;" (rtos (getvar "CIRCLERAD")) "&gt;:")<BR>         )<BR>         (command pause)<BR>         (setq cir (vlax-ename-&gt;vla-object (entlast)))<BR>         (vla-put-color cir (getvar "dimclrd"))<BR>         (vla-update cir)<BR>         (ssadd (entlast) ss1)<BR>         (setq cen (vlax-safearray-&gt;list<BR>                                                 (vlax-variant-value (vla-get-center cir))<BR>                                 )<BR>         )<BR>         (setq pt (car cen))<BR>         (princ "\n指定视图符号放置位置 &lt;右键或回车修改视图符号&gt;:")<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 (&gt; 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输入新视图符号 &lt;"<BR>                                                         fh<BR>                                                         "&gt;:"<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指定视图符号放置位置 &lt;右键或回车修改视图符号&gt;:")<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-&gt;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指定放大半? &lt;" (rtos (getvar "CIRCLERAD")) "&gt;:")<BR>         )<BR>         (command pause)<BR>         (setq newcircle (entlast))<BR>         (setq cir (vlax-ename-&gt;vla-object (entlast)))<BR>         (vla-put-color cir (getvar "dimclrd"))<BR>         (vla-update cir)<BR>         (ssadd (entlast) ss1)<BR>         (setq cen (vlax-safearray-&gt;list<BR>                                                 (vlax-variant-value (vla-get-center cir))<BR>                                 )<BR>         )<BR>         (setq pt (car cen))<BR>         (princ "\n指定??符?放置位置 &lt;右?或回?修改??符?&gt;:")<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 (&gt; 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?入新??符? &lt;"<BR>                                                         fh<BR>                                                         "&gt;:"<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指定??符?放置位置 &lt;右?或回?修改??符?&gt;:")<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-&gt;list minpt)<BR>                 maxpt (vlax-safearray-&gt;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輸入放大的倍數&lt;2&gt;:"))nil)<BR>                         (setq scalebb 2))<BR>(command ".scale" (ssget "cp" trimp)"" (getvar "lastpoint") scalebb)<BR>         (princ)<BR>         )<BR>

swaywood 发表于 2004-4-27 03:49 | 显示全部楼层
在明经上见到这个程序,还有一些小小问题,本来想等它完善之后,再转贴的,没想到老大的速度这么快,呵呵!
回复 支持 反对

使用道具 举报

Michael_66 发表于 2004-6-14 19:38 | 显示全部楼层
使用编译过的程序,有些设置方面的问题,正在找源程序,真是及时雨,谢谢提供。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | [加入论坛]

本版积分规则

化工技术网- 赠人玫瑰 手有余香 ( 苏ICP备14035884号 )

快速回复 返回顶部 返回列表