天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 19|回复: 0

AutoLisp mc对图器.lsp

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    99

    主题

    11

    回帖

    1234

    积分

    管理员

    积分
    1234
    QQ
    发表于 2024-9-30 10:44:48 | 显示全部楼层 |阅读模式
    1. (defun c:dt (/ dc VC-Apt VC-Bpt bb mouse a aa bb VC-Ap VC-Bp VC-ID VC-A-PZ VC-b-PZ vc-idA vc-idb vc-idx)
    2.                                          (YL_begin)
    3.                                          (setvar "OSMODE" 6079)
    4.                                          (if (/= (getvar "tilemode") 1)  (setvar "tilemode" 1));返回模型空间
    5.                                          (setq dc (vlax-get-acad-object))
    6.                                          (foreach x '(ActiveDocument viewports count)  (setq dc (vlax-get dc x)));;获取视口数量
    7.                                          (cond
    8.                                                  ((> dc 2)  ;;大于等于3个视口
    9.                                                          (if (and
    10.                                                                                  (setq VC-Ap (getpoint "\n指定第1视口的中心点 : "))
    11.                                                                                  (setq VC-Bp (getpoint VC-Ap "\n指定第2视口的中心点 : ")))
    12.                                                                  (progn
    13.                                                                          (command "-vports" "si"  "-vports" "2" "v");;重新创建垂直双视口
    14.                                                                          (setvar "cvport" (car (car (reverse (vports)))))        ;;返回视口
    15.                                                                  )
    16.                                                                  (princ "未指定两点。程序退出")))
    17.                                                  ((= dc 2) ;;于等于2个视口
    18.                                                          (PROGN
    19.                                                                  (setvar "cvport" (car (car (reverse (vports)))))
    20.                                                                  (setq VC-PZ (getvar 'ViewCtr))
    21.                                                                  (setvar "cvport" (car (car (reverse (vports)))))
    22.                                                                  (setq VC-A-PZ (vlax-ldata-get "字典" "VC-A-PZ"))
    23.                                                                  (setq VC-B-PZ (vlax-ldata-get "字典" "VC-B-PZ"))
    24.                                                                  (if (or (equal VC-PZ VC-A-PZ 1e-8)
    25.                                                                                           (equal VC-PZ VC-B-PZ 1e-8)
    26.                                                                                  )  ;;判断此双视口是否由本插件生成,以继续执行
    27.                                                                          (PROGN
    28.                                                                                  (setq VC-Ap        (vlax-ldata-get "字典" "PTA"));;读取基点A
    29.                                                                                  (setq VC-Bp        (vlax-ldata-get "字典" "PTB"));;读取基点B
    30.                                                                          )
    31.                                                                          (PROGN
    32.                                                                                  (setvar "OSMODE" 6079)
    33.                                                                                  (if (and
    34.                                                                                                          (setq VC-Ap (getpoint "\n指定第1视口的中心点 : "))
    35.                                                                                                          (setq VC-Bp (getpoint VC-Ap "\n指定第2视口的中心点 : ")))
    36.                                                                                          (progn       
    37.                          (setq ZY (car (caddr (car (vports)))))
    38.                                                                                                  (command "-vports" "si" "-vports" "2" "v");;重新创建垂直双视口
    39.                         (if (equal zy 0.5)
    40.                                                                                                     (setvar "cvport" (car (car (reverse (vports)))))
    41.                                                                                           )
    42.                                                                                          )
    43.                                                                                          (princ "未指定两点。程序退出")
    44.                                                                                  )
    45.                                                                          )
    46.                                                                  )                                                                         
    47.                                                          )
    48.                                                  )
    49.                                                  ((= dc 1) ;;于等于1个视口
    50.                                                          (if (and
    51.                                                                                  (setq VC-Ap (getpoint "\n指定第1视口的中心点 : "))
    52.                                                                                  (setq VC-Bp (getpoint VC-Ap "\n指定第2视口的中心点 : ")))
    53.                                                                  (progn
    54.                                                                          (command "-vports" "2" "v");;创建垂直双视口
    55.                                                                          (setvar "cvport" (car (car (reverse (vports)))))        ;;返回视口
    56.                                                                  )
    57.                                                                  (princ "未指定两点。程序退出"))
    58.                                                  )
    59.                                          )
    60.                                                                                                  (vlax-ldata-PUt "字典" "PTA" VC-Ap);;保存基点A
    61.                                                                                                  (vlax-ldata-PUt "字典" "PTB" VC-Bp);;保存基点B
    62.        
    63.                                          (setq bb T) ;BB为真,进入循环
    64.                                          (while bb
    65.                                                  (setq mouse (grread t 12 0));获取设备按键值
    66.                                                  (setq a (car mouse) aa (cadr mouse))
    67.                                                  (cond
    68.                                                          ((and (= a 5) (= nil (equal (getvar 'ViewCtr) (vlax-ldata-get "字典" "VC-A-PZ"))));视口中心坐标发生变
    69.                                                                  (PROGN
    70.                                                                           (setq ZYx (car (caddr (car (vports)))))
    71.                                                                          (IF (equal ZYx 0.5)
    72.                                                                                  (SETQ VC-APT VC-AP VC-BPT VC-BP)
    73.                                                                                  (SETQ VC-APT VC-BP VC-BPT VC-AP)
    74.                                                                          )
    75.                                                                          (VCB-VCA VC-Apt VC-Bpt)           ;;另一个视口跟随当前视口缩放
    76.                                                                  )
    77.                                                          )
    78.                                                          ((and (= a 2) (= aa 32));空格暂停对比.                                                         
    79.                                                                  (setq bb nil);结束对比                                                                                                                                  
    80.                                                          )
    81.                                                          ((or (= 25 a) (= 11 a) ;右键
    82.                                                                         (and (= a 2) (= aa 13));或回车
    83.                                                                 )
    84.                                                                  (progn
    85.                                                                          (setq bb nil);结束对比
    86.                                                                          (command "-vports" "si" );还原层单视口
    87.                                                                  )
    88.                                                          )
    89.                                                  )
    90.                                          )
    91.                                          (YL_end)

    92.                                  )
    93. ;钩子
    94. (defun VCB-VCA (VC-Apt VC-Bpt / ptmin ptminn ptmax ptmaxn)
    95.         (vlax-ldata-PUt "字典" "VC-A-PZ" (getvar 'ViewCtr))
    96.         (setq ptmin (car (viewpnts)) ptmax (cadr (viewpnts)))        ;获取当前模型视口对角点
    97.         (setq ptminn (polar  ptmin  (angle VC-ApT VC-BpT) (distance VC-ApT VC-BpT)))
    98.         (setq ptmaxn (polar  ptmax  (angle VC-ApT VC-BpT) (distance VC-ApT VC-BpT)))
    99.         (setvar "cvport" (car (car (reverse (vports)))))        ;;切换视口
    100.         (zoom-pts ptminn  ptmaxn)
    101.         (vlax-ldata-PUt "字典" "VC-B-PZ" (getvar 'ViewCtr)) ;;临时保存视口中心点坐标
    102.         (setvar "cvport" (car (car (reverse (vports)))))        ;;返回视口
    103. )
    104. ;通过两点来缩放当前视口
    105. (defun zoom-pts ( pt1 pt2 )
    106.         (vla-zoomwindow
    107.                 (vlax-get-acad-object)
    108.                 (vlax-3d-point pt1)
    109.                 (vlax-3d-point pt2)
    110.         ))

    111. ;;;117.3 [功能] 返回当前视窗左下角和右上角 坐标
    112. (defun viewpnts        (/ A B C D X)
    113.   (setq d (getvar "screensize"))              ;屏像素
    114.   (setq        b (* (getvar "viewsize") 0.5)          ;viewsize屏竖长
    115.         a (* b (/ (car d) (cadr d)))                            ;屏横长
    116.         x (trans (getvar "viewctr") 1 2)                    ;屏中点viewctr
    117.         c (list (- (car x) a) (- (cadr x) b) 0.0)
    118.         d (list (+ (car x) a) (+ (cadr x) b) 0.0)
    119.   )
    120.   (list (trans c 2 1) (trans d 2 1))
    121. )

    122. ;;;;===============================必备函数=============================
    123. ;;*****************************************************************************
    124. ;;功 能:绘图程序的初始化处理,记录当前层名、线型、颜色、捕捉方式、文本样式、文本高度,
    125. ;; 控制点标记可见方式、主单位值消零处理方式、命令行回显方式、然后关闭目标捕捉,
    126. ;; 设置线形随层、颜色随层、设置命令行不回显、不显示控制点标记、对主单位值后续零作消零处理
    127. ;;说 明:和函数YL_end配对使用。
    128. (defun YL_begin ()
    129.         (setq oderr *error*) ;;保存原来的*error*
    130.         (setq *error* YL_err) ;;将*error*用自己的错误处理函数替代
    131.         (setq odltp (getvar "celtype")) ;;记录当前线型设置
    132.         (setq odclr (getvar "cecolor")) ;;记录当前颜色设置
    133.         (setq odosm (getvar "osmode")) ;;记录当前捕捉方式
    134.         (setq odlay (getvar "clayer")) ;;记录当前层
    135.         (setq odsty (getvar "textstyle")) ;;记录当前文本样式
    136.         (setq odtsz (getvar "textsize")) ;;记录当前文本高度
    137.         (setq odbpm (getvar "blipmode")) ;;记录当前控制点标记是否可见
    138.         (setq odzin (getvar "dimzin")) ;;记录主单位值消零处理方式
    139.         (setq odcmd (getvar "cmdecho")) ;;记录命令行回显方式
    140.         (setvar "celtype" "bylayer") ;;设置线形随层
    141.         (setvar "cecolor" "bylayer") ;;设置颜色随层
    142.         (setvar "cmdecho" 0) ;;设置命令行不回显
    143.         (setvar "blipmode" 0) ;;不显示控制点标记
    144.         (setvar "dimzin" 8) ;;对主单位值后续零作消零处理,因为DIMZIN 对 AutoLISP rtos 和 angtos 函数执行实数向字符串转换操作有影响。
    145.         (setvar "osmode" 0) ;;关闭对象捕捉方式
    146. )
    147. ;;*****************************************************************************
    148. ;;YL_end
    149. ;;功 能:程序结束,恢复程序开始前的设置。
    150. ;; 恢复YL_begin设置的系统变量表中的数值。
    151. ;;说 明:和函数YL_begin配对使用。
    152. (defun YL_end ()
    153.         (setvar "celtype" odltp)
    154.         (setvar "cecolor" odclr)
    155.         (setvar "osmode" odosm)
    156.         (setvar "textstyle" odsty)
    157.         (setvar "textsize" odtsz)
    158.         (setvar "blipmode" odbpm)
    159.         (setvar "dimzin" odzin) ;;恢复主单位值消零处理方式
    160.         (setvar "cmdecho" odcmd)
    161.         (setq *error* oderr) ;;恢复原来的*error*
    162.         (princ)
    163. )
    164. ;;*****************************************************************************
    165. ;;YL_err
    166. ;;功 能:错误处理函数。
    167. (defun YL_err (msg)
    168.         (princ (strcat "\n错误:" msg "\n")) ;;打印错误原因
    169.         (YL_end) ;;调用函数YL_end恢复程序开始前的设置
    170.         (setq *error* oderr) ;;恢复原来的*error*
    171.         (princ)
    172. )
    复制代码

     

     

     

     

    AutoLisp   mc对图器.lsp
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-10-27 08:28 , Processed in 0.169869 second(s), 25 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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