明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: citykunan

将viewport中的内复制到modle中

  [复制链接]
发表于 2004-4-9 17:07:00 | 显示全部楼层
1. 问题2好像我没有碰到
圖中有很多VIEWPORTS有些VIEWPORT像"點"一樣大時,你會發現程序失敗 2. 我想等你過些時日再想解決辦法,目前你是解決不了!
 楼主| 发表于 2004-4-10 06:26:00 | 显示全部楼层
半夜突然想到如何比较好的解决问题2,忍不住早起开始编程了。


我想了想,好像只能用zoom命令将其放大才行。


       

本帖子中包含更多资源

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

x
发表于 2004-4-10 07:52:00 | 显示全部楼层
;;沒這兩句也"好像"能執行,你真有測試嗎?
;;查一下幫助你會更了解它的作用!!如viewport中ucs並不平行xy平面

好像只能用zoom命令将其放大才行。

->不是每個都zoom,小的才zoom(很麻煩的,試看看)

 楼主| 发表于 2004-4-12 08:51:00 | 显示全部楼层
版主,我有遇到一个问题,我是想把这个程序扩充到可以用在pline的viewport上。 可是我遇到一奇怪的问题。以下是程序。我用(setq a (car (entsel)))便可以实现,提 取pline上的viewport各节点,并画了一条pline,而用(setq ss_i (ssget '((0 . "VIEWPORT"))))....却不行不知为何? ;这个可以 (defun c:test ()
(setq a (car (entsel)))
;(setq ss_i (ssget '((0 . "VIEWPORT"))))
;(setq i 0)
; (while (< i (sslength ss_i))
; (setq a (ssname ss_i i))
(setq nlist_list (MASSOC 10 (entget a)))
(setq len_list (length nlist_list ))
(command "_.pline" (setq first_point (car nlist_list)))
(while (setq nlist_list (cdr nlist_list))
(command (car nlist_list))
);enf while
(command first_point "")
; (setq i (+ i 1))
;);end while
) (defun massoc (key alist / x nlist)
(foreach x alist
(if (eq key (car x))
(setq nlist (cons (cdr x) nlist))
)
)
(reverse nlist)
) ;这个不行 (defun c:test ()
;(setq a (car (entsel)))
(setq ss_i (ssget '((0 . "VIEWPORT"))))
(setq i 0)
(while (< i (sslength ss_i))
(setq a (ssname ss_i i))
(setq nlist_list (MASSOC 10 (entget a)))
(setq len_list (length nlist_list ))
(command "_.pline" (setq first_point (car nlist_list)))
(while (setq nlist_list (cdr nlist_list))
(command (car nlist_list))
);enf while
(command first_point "")
(setq i (+ i 1))
);end while
) (defun massoc (key alist / x nlist)
(foreach x alist
(if (eq key (car x))
(setq nlist (cons (cdr x) nlist))
)
)
(reverse nlist)
)
发表于 2004-4-12 12:33:00 | 显示全部楼层
Pline只是附帶viewport,查看Pline的dxf 330
 楼主| 发表于 2004-4-12 13:51:00 | 显示全部楼层
版主能不能说的在详细一点,330码怎么用啊?谢谢。


我将330码提出,再用entget取值,还是得不到viewport的节点坐标啊。
发表于 2004-4-12 14:33:00 | 显示全部楼层

330碼是告訴你這PLINE附帶VIEWPORT, VIEWPORT的節點就是PLINE的節點,你應該過濾那些PLINE附帶VIEWPORT(轉一下腦筋好嗎?)

 楼主| 发表于 2004-4-12 15:50:00 | 显示全部楼层
在版主的提示下,已经有点眉目,但总是差一点,我已经很努力了,基础太差了。 版主有空时帮我看看我的程序,谢谢了。 (defun C:M_VIEW (/ HOLDECHO HOLDOSMODE A AA
W10 W12 W40 W41 W69 VCTRX VCTRY
LPT RPT INS XP SS ss_i i RT LB len_list
) (defun DO_IT (CEN)
(setq VCTRX (car CEN))
(setq VCTRY (cadr CEN))
(setq
LPT (list (- VCTRX (/ W40 2.0)) (- VCTRY (/ W41 2.0)))
)
(setq
RPT (list (+ VCTRX (/ W40 2.0)) (+ VCTRY (/ W41 2.0)))
)
);得出矩形两个角点坐标
(setq HOLDECHO (getvar "cmdecho"))
(setq HOLDOSMODE (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(command "_.undo" "be")
(command "_.PSPACE")
(leo_sc)
;(setq A (car (entsel "\nSelect Viewport: ")))
(setq ss_i (ssget '((0 . "LWPOLYLINE,VIEWPORT"))))
(setq i 0)
(while (< i (sslength ss_i))
(setq a (ssname ss_i i))

(setq nlist_list (MASSOC 10 (entget a)))
(setq len_list (length nlist_list ))
(if (= (cdr (assoc 0 (entget a))) "LWPOLYLINE")
(progn
(command "_.pline" (setq first_point (car nlist_list)))
(while (setq nlist_list (cdr nlist_list))
(command (car nlist_list))
);enf while
(command first_point "")

(setq BOX (entlast))

);end progn

(progn
(setq WDXF (entget A))
(setq XP (/ (cdr (assoc 41 WDXF)) (cdr (assoc 45 WDXF))));-------45号码是什么用的?好像是个比例因子,我研究下来发现可以得到viewport的比例
;经多次研究发现41号码除以45号码总能得到viewport的比例
(setq W10 (cdr (assoc 10 WDXF)));viewport视图的中点
(setq W12 (cdr (assoc 12 WDXF)));wcs下的目标点
(setq W40 (cdr (assoc 40 WDXF)));视图的高度


(setq W41 (cdr (assoc 41 WDXF)));视图的宽度
(setq W69 (cdr (assoc 69 WDXF)));app:视口的表示数字
(DO_IT W10)

(if (= (cdr (assoc 0 (entget a))) "VIEWPORT")
(progn
(command "_.rectang" LPT RPT)
(setq BOX (entlast))
)
)

(command "zoom" LPT RPT)
(setq W40 (/ W40 XP))
(setq W41 (/ W41 XP))
(command "_.MSPACE")
(setvar "cvport" W69);
(command "_.ucs" "v");
(DO_IT W12);得到相应大小的矩形框。
(setq SS (ssget "c" RPT LPT))
(if SS
(progn
(setq AA (rtos (* (getvar "CDATE") 1E8)));做块名
(command "_.block" AA W12 SS "")
(command "_.oops");undo erase
(command "_.pspace")
(command "_.insert" AA W10 XP "" "")
(command "_.xclip" (entlast) "" "N" "S" BOX)
)
)
(command "_.pspace")
(command "_.ERASE" A "")
);end progn
);end if
(command "zoom" rb lt)
(setq i (+ i 1))
);end whlie
(setvar "osmode" HOLDOSMODE)
(setvar "cmdecho" HOLDECHO)
(command "_.undo" "e")
(princ)
) ;可以做参考,取得绘图窗口坐标
(defun leo_sc (/ ctr size SCREEN SCALE XSIZE)
(command "_.UCS" "V")
(setq CTR (getvar "VIEWCTR"))
(setq SIZE (getvar "VIEWSIZE"))
(setq SCREEN (getvar "SCREENSIZE"))
(setq SCALE (/ (car SCREEN) (cadr SCREEN)))
(setq XSIZE (* SCALE SIZE))
(setq RT (list (+ (car CTR) (/ XSIZE 2)) (+ (cadr CTR) (/ SIZE 2))))
(setq LB (list (- (car CTR) (/ XSIZE 2)) (- (cadr CTR) (/ SIZE 2))))
;(command "_.line" RT LB "")
;(command "_.UCS" "P")
(princ)
)
;得到同一dxf码的多个值,如 (MASSOC 10 (entget (car (entsel)))),可以得到pline的多个节点
(defun massoc (key alist / x nlist)
(foreach x alist
(if (eq key (car x))
(setq nlist (cons (cdr x) nlist))
)
)
(reverse nlist)
)
发表于 2004-4-12 16:05:00 | 显示全部楼层

你完全看不懂我說的! 8-(

PLINE不見得都附帶VIEWPORT,

能附帶VIEWPORT物件相當多

"circle,ellipse,region,lwpolyline,polyline,spline"這些(closed)都可以

(多轉n下腦筋好嗎?) 8^)

 楼主| 发表于 2004-4-12 16:20:00 | 显示全部楼层
版主不要生气,让我这个愚人再试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 09:52 , Processed in 0.191268 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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