明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 自贡黄明儒

[基础] 局部放大

  [复制链接]
发表于 2011-4-30 11:48:24 | 显示全部楼层
强哦,比我常用的强大得多了
发表于 2011-4-30 11:48:29 | 显示全部楼层
又要币,这种你得先给个图片看看才行呀
发表于 2011-4-30 11:54:11 | 显示全部楼层
本帖最后由 AMTONNY 于 2011-4-30 11:54 编辑

这是我常用的一个,有待改进

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-4-30 12:18:19 | 显示全部楼层
回复 lrd1861 的帖子

因为已经被过滤了,你可以重新设置啊,见下图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-4-30 12:21:29 | 显示全部楼层
lrd1861 发表于 2011-4-30 11:36
回复 clh521 的帖子

为何放大后标注不见了

因为已经被过滤了,你可以重新设置啊,见下图
 楼主| 发表于 2011-4-30 12:44:31 | 显示全部楼层
回复 AMTONNY 的帖子

此程序还是不能处理块,效率到是较高
发表于 2011-4-30 12:47:17 | 显示全部楼层
回复 clh521 的帖子

谢谢 标注问题解决  不过带属性的轴号有问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2011-5-1 19:27:40 | 显示全部楼层
;;;这个能处理块,因功力不足,不能继续...
;;;局部放大===========================================
;;;全部变量JBHD-A(标记字母),JBHD-SC(放大倍数)
(DEFUN C:JBFD (/        CIR_R         CLAY          CP           DATA            DATA_A
               DATA_B        DATA_C         DATA_D          DATA_G   DIMCE    DIMT
               HD        IN_P         JBHD-STRD           JBHD-STRIN
               LAST1        LASTP         LASTT          MODE           OSMO            PD
               SCA_TT        STRD         STRD1          STRD2           X
              )
  (SETVAR "CMDECHO" 0)
  (SETVAR "MENUECHO" 0)
  (COMMAND "_.UNDO" "_GROUP")

  (IF (NULL (TBLSEARCH "LAYER" "DIM"))
    (COMMAND "LAYER" "M" "DIM" "C" "256" "" "" "" "" "")
  )
  (SETVAR "CLAYER" "DIM")
  (INITGET 1)
  (SETQ CP (GETPOINT "\n局部放大中心点: "))
  (PROMPT "\n放大范围: ")
  (COMMAND "_.CIRCLE" CP PAUSE)
  (SETQ LAST1 (ENTLAST))                ;圆
  (setq lastt (cons last1 (list (GETVAR "LASTPOINT")))) ;(圆.圆心)
  (SETQ CIR_R (CDR (ASSOC 40 (ENTGET LAST1))))
  (SETQ        DATA_G (list 0.0        0.0872665  0.174533   0.261799
                     0.349066        0.436332   0.523599   0.610865
                     0.698132        0.785398   0.872665   0.959931
                     1.0472        1.13446           1.22173    1.309
                     1.39626        1.48353           1.5708     1.65806
                     1.74533        1.8326           1.91986    2.00713
                     2.0944        2.18166           2.26893    2.35619
                     2.44346        2.53073           2.61799    2.70526
                     2.79253        2.87979           2.96706    3.05433
                     3.14159        3.22886           3.31613    3.40339
                     3.49066        3.57792           3.66519    3.75246
                     3.83972        3.92699           4.01426    4.10152
                     4.18879        4.27606           4.36332    4.45059
                     4.53786        4.62512           4.71239    4.79966
                     4.88692        4.97419           5.06145    5.14872
                     5.23599        5.32325           5.41052    5.49779
                     5.58505        5.67232           5.75959
                    )

  )
  (SETQ DATA_A (MAPCAR '(LAMBDA (X) (POLAR CP X CIR_R)) DATA_G))
;;;DATA_A各点坐标
  (SETQ        DATA (SSGET "CP"
                    DATA_A
                    '((-4 . "<NOT")
                      (0 . "TEXT")
                      (-4 . "NOT>")
                      (-4 . "<NOT")
                      (0 . "MTEXT")
                      (-4 . "NOT>")
                      (-4 . "<NOT")
                      (0 . "DIMENSION")
                      (-4 . "NOT>")
                      (-4 . "<NOT")
                      (0 . "insert")
                      (-4 . "NOT>")
                      (-4 . "<NOT")
                      (0 . "HATCH")
                      (-4 . "NOT>")
                     )
             )
  )
  (SETQ DATA (SSDEL LAST1 DATA))        ;去除圆
  (command "_copy" DATA "" CP CP)

;;;DATABlocks为含块的选择集
  (SETQ        DATABlocks
         (SSGET        "CP"
                DATA_A
                '((-4 . "<and")
                  (0 . "insert")
                  (-4 . "and>")
                 )
         )
  )
  (command "_copy" DATABlocks "" CP CP)
  (setq DATABlocks (ListToSS DATABlocks))
;;;用原选择的块爆后各实体组成的选择集
  (setq DATAjoin (SS_SSjoin DATA DATABlocks))
;;;合并两个选择集

  (if (numberp JBHD-A)
    (setq JBHD-A (1+ JBHD-A))
    (setq JBHD-A 65)
  )
  (SETQ JBHD-STRD (chr JBHD-A))
  (setq JBHD-strin (STRCAT "\n放大标记字母<" JBHD-STRD ">: "))
  (SETQ STRD1 (GETSTRING JBHD-strin))
  (if (= STRD1 "")
    (SETQ STRD1 JBHD-STRD)
  )
  (SETQ STRD2 (STRCAT STRD1 " 放大"))
(SETQ HD (* 1.5 (GETVAR "DIMTXT") (GETVAR "DIMSCALE")));;;字体高度
  (INITGET 6)
  (SETQ JBHD-SC (GETREAL "\n放大倍率<2.5>: "))
  (if (= JBHD-SC nil)
    (setq JBHD-SC 2.5)
  )

  (command "_copy" LAST1 "" CP CP);;;产生一个新的圆
  (setq entCircl2 (entlast))
  (command "scale" entCircl2 "" cp JBHD-SC);;;放大圆
  (PROMPT "\n放大图形放置中心点: ")
  (command "move" entCircl2 "" CP PAUSE)
  (SETQ LASTP (GETVAR "LASTPOINT"));;;放大图形的圆心
  (command "_move" DATAjoin "" CP LASTP)
  (command "scale" entCircl2 "" LASTP (/ 1 JBHD-SC));;;还原成原大小
  
  ;;;以下进行剪切
  (SETQ CIR_R (/  CIR_R  (COS (ANGTOF "2.5"))))
  (SETQ        DATA_B (MAPCAR
                 '(LAMBDA (X)
                    (POLAR LASTP X (1+ CIR_R))
                  )
                 DATA_G
               )
  )
  (COMMAND "_.TRIM" entCircl2 "" "F")
  (WHILE (CAR DATA_B)
    (SETQ IN_P (CAR DATA_B))
    (COMMAND IN_P)
    (SETQ DATA_B (CDR DATA_B))
  )                                        ; WHILE  
  (COMMAND "" "")
;;;剪切完毕

  ;;;取得剪切后的实体
  (SETQ        DATA_B (MAPCAR
                 '(LAMBDA (X)
                    (POLAR LASTP X  CIR_R)
                  )
                 DATA_G
               )
  )
  (SETQ        trimafter (SSGET "CP" DATA_B))
  (command "_copy" trimafter "" LASTP LASTP)  

  ;;;删除
  (command "erase" DATAjoin "")

  ;|;;;放大图形
  (SETQ        DATA_B (MAPCAR
                 '(LAMBDA (X)
                    (POLAR LASTP X  CIR_R)
                  )
                 DATA_G
               )
  )
  (SETQ        trimafter (SSGET "CP" DATA_B))
  (command "scale" trimafter "" LASTP JBHD-SC)
  

  (SETQ PD (GETPOINT CP "\n标记字母放置点: "))
  (COMMAND "_.TEXT" "_J" "_M" PD HD 0 STRD)

  (COMMAND "_.UNDO" "_E")
  (gc)
;|;
)



;;;-----------------------------------------------------------------------------
;;;本函数将块选择集内各元素组成一个新的选择集,并滤去尺寸、文字、填充、块等

;;;ListToSS列表滤去尺寸、文字、填充、块等的选择集
(defun ListToSS        (ss / BOOL EN ENLIST LIS N SS1)
  (setq ss1 (ssadd))
  (setq lis (SSBlocks_sslist ss))
  (setq n 0)
  (repeat (length lis)
    (setq en (nth n lis))
    (setq enlist (LI_item 0 (entget en)))
    (setq bool (wcmatch        enlist
                        "*TEXT,ATTDEF,DIMENSION,HATCH,insert,ATTRIB"
               )
    )
    (if        bool
      (entdel en)
      (setq ss1 (ssadd en ss1))
    )
    (setq n (1+ n))
  )
  ss1
)
;;;ListToSS列表滤去尺寸、文字、填充、块等的选择集

;;;SSBlocks_sslist将块选择集内各元素列成表
(defun SSBlocks_sslist (ss / CNT EL ELST SINGLEBLOCKSS SSL)
  (setq
    ssl         (if ss
           (sslength ss)
           0
         )
    cnt         0
    ELst '()
  )
  (repeat ssl
    (setq EL (ssname ss cnt))
    (command "_explode" EL "")
    (setq singleblockss (ssget "_P"))
    (setq ELst (append (SS_sslist singleblockss) ELst))
    (setq cnt (1+ cnt))
  )
  (reverse ELst)
)
;;;SSBlocks_sslist将块选择集内各元素列成表

;;;SS_sslist将选择集各元素列成表
(defun SS_sslist (ss / ssl cnt ELst)
  (setq
    ssl         (if ss
           (sslength ss)
           0
         )
    cnt         0
    ELst '()
  )
  (repeat ssl
    (setq
      ELst (cons (ssname ss cnt) ELst)
      cnt  (1+ cnt)
    )
  )
  (reverse ELst)
)
;;;SS_sslist将选择集各元素列成表

;;;-----------------------------------------------------------------------------


;;;选择集合并
(defun SS_SSjoin (ss1 ss2 / EN N)
  (setq n 0)
  (repeat (sslength ss2)
    (setq en (ssname ss2 n))
    (setq ss1 (ssadd en ss1))
    (setq n (1+ n))
  )
  ss1
)
;;;选择集合并
发表于 2011-5-3 09:30:37 | 显示全部楼层
回复 liminnet 的帖子

你不是不玩lisp吗,要源码又想去骗钱呀
发表于 2011-5-4 18:29:29 | 显示全部楼层
          学习中,希望在更好的程序在论坛中,谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-4-30 21:17 , Processed in 0.271255 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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