明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 17880|回复: 72

怎么对线状地形图进行按线路走向分幅

    [复制链接]
发表于 2014-5-16 12:31 | 显示全部楼层 |阅读模式
我现在的分幅方法是:1、先把A3矩形框沿线路套到地形图上,因为线路不是直的,所以套的矩形框一般都是倾斜的。
2、对每个矩形框进行 命名视图 。
现在问题来了,我发现命名视图的时候只能框选水平或垂直的矩形框,所以对于倾斜的矩形框我都会为它专门建立一个直角坐标系,然后进入新建立的坐标系下面框选,这样来做工作量就挺大了。所以在请教各路大神支招,有什么方法能够让我在命名视图的时候可以框选倾斜的矩形框。或者还有什么其他更好的分幅方法赐教一下。
发表于 2015-4-3 17:20 | 显示全部楼层
本帖最后由 Atsai 于 2015-4-30 22:47 编辑

代码的主要构思是从下面的三个部分组成的,里面的副程式请自己到黄大侠、高飞版主的个别帖子找!
偶而花花时间去翻帖子也是不错的。

最小包围核代码是 自贡黄明儒:http://bbs.mjtd.com/thread-107647-1-1.html
                         及 highflybir:http://bbs.mjtd.com/thread-99926-1-1.html
视埠旋转的想法是 自贡黄明儒:http://bbs.mjtd.com/thread-111691-1-1.html

下面是其他拼拼凑凑的代码如果不合用就自己再改改吧!


  1. ;;最小包围核代码是 自贡黄明儒:http://bbs.mjtd.com/thread-107647-1-1.html]http://bbs.mjtd.com/thread-107647-1-1.html
  2. ;;                            及 highflybir:http://bbs.mjtd.com/thread-99926-1-1.html]http://bbs.mjtd.com/thread-99926-1-1.html
  3. ;;视埠旋转的想法是 自贡黄明儒:http://bbs.mjtd.com/thread-111691-1-1.html]http://bbs.mjtd.com/thread-111691-1-1.html

  4. (princ
  5.   "\n===================================================="
  6. )
  7. (princ "\n命令:rv")
  8. (princ "\n说明:批次依“模型”内图框于“配置”产生视埠")
  9. (princ "\n说明:可适用于有旋转角的图框")
  10. (princ "\nby Atsai 2015.03.12")
  11. (princ
  12.   "\n===================================================="
  13. )

  14. (defun c:rv (/ cp cl cs vpl os vplyes l0 svpc ptlst ssvp)
  15.   (vl-load-com)
  16.   (setvar "cmdecho" 0) ; Turn off command line echoing
  17.   (setq cp (getvar "ctab")) ; Store current tab name
  18.   (setq cl (getvar "clayer")) ; Store current layer name
  19.   (setq cs (getvar "osmode")) ; Store current osnap mode
  20.   (setq vpl "视埠") ; ==>> Assume using Viewport layer for viewport frames, change code value here if needed <<==
  21.   (setq os (getvar "osmode")) ;读取锁点原设定
  22.   (setvar "osmode" 0)

  23.   (setq        nselect
  24.          (getstring
  25.            "\n选择排序方式,(1)自选顺序(2)左->右(3)右->左(4)上->下(5)下->上:预设(1)"
  26.          )
  27.   )

  28.   (if (= nselect "")
  29.     (setq nselect "1")
  30.   )

  31.   (if (/= cp "Model") ; Must be started from a layout tab to establish destination, quit quietly if on Model tab
  32.     (progn
  33.       (setq vplyes 0) ; Assume viewport doesn't exist
  34.       (setq l0 (tblnext "LAYER" 1)) ; Get past 0 layer in layer list
  35.       (while (setq layers (tblnext "LAYER"))
  36.         ;; Loop through layer list collection
  37.         (setq ln (cdr (assoc 2 layers))) ; Extract layer name from list
  38.         (if (= (strcase ln) (strcase vpl))
  39.           (setq vplyes 1)
  40.         ) ; Check if viewport layer exists
  41.       )
  42.       (if (= vplyes 0)
  43.         (command "layer" "NEW" vpl "COLOR" "RED" vpl "")
  44.       ) ; Make viewport layer and assign color to magenta if doesn't exist
  45.       (setvar "clayer" vpl) ; Change to viewport layer
  46.       (command "layer"
  47.                "ON"
  48.                (strcat "0," vpl)
  49.                "UNLOCK"
  50.                (strcat "0," vpl)
  51.                ""
  52.       ) ; Turn on and unlock viewport and 0 layer
  53.       (command "zoom" "ALL") ; View entire layout tab
  54.       (setvar "ctab" "Model") ; Activate Model tab
  55.       (command "zoom" "E") ; View entire Model Space area
  56.       (setq ss nil)
  57.       (if (setq ss (ssget '((0 . "INSERT"))))
  58.         (progn
  59.           (setq        l (sslength ss)
  60.                 i 0
  61.           )

  62.           (setq ent_lst nil)
  63.           (repeat (sslength ss)
  64.             (setq ent_lst (append ent_lst (list (ssname ss i)))
  65.                   i          (1+ i)
  66.             )
  67.           )

  68.           (princ "\n") ; Clean up command line
  69.           (setvar "ctab" cp) ; Return to layout tab program was started from
  70.           (command "pspace") ; Switch to Paper Space of layout tab

  71.           (setq ptlst nil)
  72.           (setq ptlst (HH:Ent4pt (nth 0 ent_lst) T))
  73.           (setq vpc1 (nth 0 ptlst))
  74.           (setq vpc2 (nth 1 ptlst))
  75.           (setq vpc3 (nth 2 ptlst))
  76.           (setq vpc4 (nth 3 ptlst))
  77.           (setq sf 1.0)
  78.           (setq vpyd (* sf (distance vpc2 vpc3)))


  79.           (defun viewpnts (/ a b c d x)
  80.             (setq b (getvar "viewsize")
  81.                   c (car (getvar "screensize"))
  82.                   d (cadr (getvar "screensize"))
  83.                   a (* b (/ c d))
  84.                   x (setq x (getvar "viewctr"))
  85.                   x (trans x 1 2)
  86.                   c (list (- (car x) (/ a 2.0)) (- (cadr x) (/ b 2.0)) 0.0)
  87.                   d (list (+ (car x) (/ a 2.0)) (+ (cadr x) (/ b 2.0)) 0.0)
  88.                   c (trans c 2 1)
  89.                   d (trans d 2 1)
  90.             )
  91.             (list c d)
  92.           )

  93.           (setq c (nth 0 (viewpnts)))
  94.           (setq d (nth 1 (viewpnts)))

  95.           (setq mvpc (list (/ (+ (car c) (car d)) 2.0) (/ (+ (cadr c) (cadr d)) 2.0) 0.0))
  96.           (command "zoom" "C" mvpc (rtos (* (* 2 l) vpyd)))


  97.           (setq        svpc
  98.                  (getpoint
  99.                    "\n选择插入点:"
  100.                  )
  101.           ) ; Can't change layout tabs manually here


  102.           (cond
  103.             ((= nselect "1")
  104.              (setq ent_lst ent_lst)
  105.             )

  106.             ((= nselect "2")
  107.              (progn
  108.                ;;按X座标排序
  109.                (setq
  110.                  ent_lst (vl-sort ent_lst
  111.                                   '(lambda (e1 e2)
  112.                                      (<        (cadr (assoc 10 (entget e1)))
  113.                                         (cadr (assoc 10 (entget e2)))
  114.                                      )
  115.                                    )
  116.                          )
  117.                )
  118.                ;;按X座标排序
  119.              )
  120.             )

  121.             ((= nselect "3")
  122.              (progn
  123.                ;;按X座标排序
  124.                (setq
  125.                  ent_lst (vl-sort ent_lst
  126.                                   '(lambda (e1 e2)
  127.                                      (>        (cadr (assoc 10 (entget e1)))
  128.                                         (cadr (assoc 10 (entget e2)))
  129.                                      )
  130.                                    )
  131.                          )
  132.                )
  133.                ;;按X座标排序
  134.              )
  135.             )

  136.             ((= nselect "4")
  137.              (progn
  138.                ;;按Y座标排序
  139.                (setq
  140.                  ent_lst (vl-sort ent_lst
  141.                                   '(lambda (e1 e2)
  142.                                      (>        (caddr (assoc 10 (entget e1)))
  143.                                         (caddr (assoc 10 (entget e2)))
  144.                                      )
  145.                                    )
  146.                          )
  147.                )
  148.                ;;按Y座标排序
  149.              )
  150.             )

  151.             ((= nselect "5")
  152.              (progn
  153.                ;;按Y座标排序
  154.                (setq
  155.                  ent_lst (vl-sort ent_lst
  156.                                   '(lambda (e1 e2)
  157.                                      (<        (caddr (assoc 10 (entget e1)))
  158.                                         (caddr (assoc 10 (entget e2)))
  159.                                      )
  160.                                    )
  161.                          )
  162.                )
  163.                ;;按Y座标排序
  164.              )
  165.             )
  166.           )

  167.           (mapcar
  168.             '(lambda (ssn)
  169.                (setq ptlst nil)
  170.                (setq ptlst (HH:Ent4pt ssn T))
  171.                (setq vpc1 (nth 0 ptlst))
  172.                (setq vpc2 (nth 1 ptlst))
  173.                (setq vpc3 (nth 2 ptlst))
  174.                (setq vpc4 (nth 3 ptlst))

  175.                (setq sf 1.0)
  176.                (setq vpxd (* sf (distance vpc1 vpc2)))
  177.                ;; Determine horizontal length of selected window
  178.                (setq vpyd (* sf (distance vpc2 vpc3)))
  179.                ;; Determine vertical height of selected window
  180.                (setq
  181.                  vpc
  182.                   (list        (/ (+ (car vpc1) (car vpc3)) 2.0)
  183.                         (/ (+ (cadr vpc1) (cadr vpc3)) 2.0)
  184.                         0.0
  185.                   )
  186.                )
  187.                ;; Determine center point of selected model window

  188.                (command        "mview"
  189.                         (list (car svpc) (cadr svpc))
  190.                         (strcat "@" (rtos vpxd) "," (rtos vpyd))
  191.                )
  192.                ;; Create Paper Space viewport

  193.                (setq ssvp nil)

  194.                (setq ssvp (ssget "L"))
  195.                ;; Start selection set with last viewport frame


  196.                (command        "zoom"
  197.                         "w"
  198.                         (list (car svpc) (cadr svpc))
  199.                         (strcat "@" (rtos vpxd) "," (rtos vpyd))
  200.                )

  201.                
  202.                (command "mspace")
  203.                ;; Open viewport window to Model Space

  204.                (command "ucsicon" "ON")
  205.                ;; Turn on UCS icon for viewport

  206.                (command "ucs" "Z" "non" vpc1 "non" vpc2)

  207.                (command "Plan" "")

  208.                (command "ucs" "WORLD") ; Reset UCS to WCS

  209.                (command "zoom" "C" vpc (rtos vpyd))
  210.                ;; Center view of viewport window using determined point
  211.                (command "zoom" "SCALE" (strcat (rtos sf) "XP"))
  212.                ;; Set zoom scale of viewport window

  213.                (command "vports" "LOCK" "ON" ssvp "")
  214.                ;; Lock scale and position of model in viewport
  215.                (command "pspace")
  216.                ;; Close viewport window

  217.                (setq w (distance vpc1 vpc2))
  218.                (setq svpc (polar svpc 0 (* 1.5 w)))

  219.              )
  220.             ent_lst
  221.           )
  222.         )
  223.       )
  224.     )
  225.     (princ "\n这个LISP程式只能在Layout使用!")
  226.     ;; Need to start on a layout tab so program knows where to create the new viewports
  227.   )
  228.   (command "zoom" "all")
  229.   (setvar "ctab" cp) ; Reset to stored tab name
  230.   (setvar "clayer" cl) ; Reset to stored layer name
  231.   (setvar "osmode" os) ;回复锁点原设定
  232.   (princ)
  233. )

评分

参与人数 2明经币 +1 金钱 +25 收起 理由
树櫴希德 + 1 + 5 很给力!
wkq004 + 20 很给力!

查看全部评分

回复 支持 4 反对 0

使用道具 举报

发表于 2015-3-13 09:06 | 显示全部楼层
本帖最后由 Atsai 于 2015-4-4 07:51 编辑

楼主要的是这种吧!
源码及参考的函数连结放在13楼,主要是参考
自贡黄儒明、高飞鸟二位前辈的函数自己拼拼凑凑完成的。


本帖子中包含更多资源

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

x
回复 支持 1 反对 1

使用道具 举报

发表于 2019-2-13 21:51 | 显示全部楼层
Atsai 发表于 2015-4-3 17:20
代码的主要构思是从下面的三个部分组成的,里面的副程式请自己到黄大侠、高飞版主的个别帖子找!
偶而花花 ...

怎么  使用必须在layout空间里吗     
发表于 2014-5-16 14:41 | 显示全部楼层
cass有个带状图分副!
发表于 2014-8-24 16:31 | 显示全部楼层
同问啊.CASS自带的只能直的,
发表于 2014-8-29 15:37 | 显示全部楼层
最好的带状分幅是用纬地
发表于 2014-12-13 01:31 来自手机 | 显示全部楼层
关注,请用维地做个演示
发表于 2015-1-8 11:33 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-1-8 11:44 编辑

可以考虑自己按需要画分幅内图框,给他内图框的CASS编码,让CASS自动分幅,不过它会分为一个个的图形文件
当然它不会把图框旋转到水平方向,并不方便,所以最好是自己写程序来实现,关键是根据多边形裁剪部分比较难写,也不好直接调用CASS的命令。。。

如果确实裁剪部分难度过大,可以变通一下:直接用CASS分幅,然后另写一个根据图框进行旋转的以便于打印,这个难度最小
发表于 2015-1-8 11:44 | 显示全部楼层
本帖最后由 tfyyf 于 2015-1-8 11:46 编辑

送你个我做的小软件for CAD2012试试:http://bbs.mjtd.com/thread-25126-11-1.html
发表于 2015-1-8 20:16 | 显示全部楼层
用外部参照的方式,然后旋转+移动+裁剪不就可以了吗,只不过带状图过大的话,打开文件会慢一些。
发表于 2015-3-5 16:30 | 显示全部楼层
liujing95 发表于 2014-8-29 15:37
最好的带状分幅是用纬地

对,纬地专门针对带状。非常棒!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 09:36 , Processed in 0.438339 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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