qfkxc 发表于 2011-9-4 06:20:40

在一个DWG文件中插入鼠标位置所在的图幅

求助编程:在一个DWG文件中插入鼠标位置所在的图幅(可以连续插入)
步骤:
1,打开一幅DWG文件,鼠标在图形周围点击一下,取得XY坐标值
2,根据XY坐标值计算鼠标位置所在图幅(图幅为50CM*50CM),起名规则:A.B-C.D,A,C分别为X,Y坐标整公里数,B,D分别为X,Y坐标值的米数;
比例尺1:500 时B,D的取值:大于等于0小于250时为00,大于等于250小于500时为25,大于等于500小于750时为50,大于等于,750小于1000时为75.
比例尺1:1000时B,D的取值:大于等于0小于500时为00,大于等于500小于,1000时为50.
比例尺1:2000时B,D分别为00
如鼠标坐标值为X85230.233,Y66847.386,比例尺1:500 时图幅名为85.00-66.75,比例尺1:,1000 时图幅名为85.00-66.50,比例尺1:2000 时图幅名,85.00-66.00.
3,以块的形式插入图形,基点为0,0(图块为分解和不分解两种,默认插入所打开DWG文件夹下的的图块。)

Gu_xl 发表于 2011-9-4 06:20:41


(DEFUN C:TT (/ PT FILENAME path scale)
(defun getname (pt scale / X Y XKM A XM YKM YM dimzin)
    (setq dimzin (getvar 'dimzin))
    (setvar 'dimzin 0)
    (setq x (car pt)
          y (cadr pt)
          xkm (rtos (setq a (fix (* 0.001 y))) 2 0)
          xm (substr (rtos (* 0.001 (* (fix (/ (- y (* a 1000)) (* scale 0.5))) (* scale 0.5))) 2 2) 2)
          ykm (rtos (setq a (fix (* 0.001 x))) 2 0)
          ym (substr (rtos (* 0.001 (* (fix (/ (- x (* a 1000)) (* scale 0.5))) (* scale 0.5))) 2 2) 2)
          )
    (setvar 'dimzin dimzin)
    (strcat xkmxm "-" ykmym)
    )
(setq scale (getint "\n 图形比例尺<1:500>"))
(if (null scale) (setq scale 500))
(setq path (getvar 'DWGPREFIX))
(while
(setq pt (getpoint "\n选取点位置:"))
;;;得到文件名
(setq filename (strcat (getname pt scale) ".dwg"))

;;;插入块
(if (setq filename (findfile (strcat path filename)))
    (command "insert" filename '(0 0 0) 1 1 0)
)
)
)

Andyhon 发表于 2011-9-4 09:34:56

建议楼主改用图文解说
纯文字叙述不容易传达应有的图文讯息
贴出来是不就是要让见帖者容易转化理解?....

qfkxc 发表于 2011-9-4 17:47:31

本帖最后由 qfkxc 于 2011-9-4 17:52 编辑

功能与帖子http://bbs.mjtd.com/thread-88608-1-5.html相同,只是图幅号取名规则不同。如图所示,打开62.75-80.75,鼠标在图的周围点一下,得到鼠标所在位置XY坐标,根据图幅取名规则计算出鼠标所在位置的图幅号为62.75-81.00,以插入块的方式插入文件名为62.75-81.00.dwg的文件,然后鼠标在其他位置点击下插入相应的图幅。(图中文件结合表是不存在的,只是为了说明加入的)。

qfkxc 发表于 2011-9-5 06:28:51

多谢GU-XL版主,程序很好用
页: [1]
查看完整版本: 在一个DWG文件中插入鼠标位置所在的图幅