明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2535|回复: 8

如何根据鼠标点击坐标智能插入图块?

[复制链接]
发表于 2011-8-4 14:07:28 | 显示全部楼层 |阅读模式
请问如何实现鼠标点击自动插入文件的功能,路径文件名格式如c:\tuku\756512-10.dwg。涉及到鼠标取点、运算,最后插入功能。具体如下:
1、在图形界面上用鼠标点击任一点取个坐标,如(512325.22,3756252.55),X取前三位512,y舍掉第一位后取三位756组成文件名部分756512
2、另外文件名部分取剩下数值(325.22,252.55)计算,规则如下:把1000*1000大小的正方形分成4行4列16个正方形,赋给编号如下
1,  2,    5,  6
3,  4,    7,  8
9, 10, 13, 14
11,12, 15, 16
根据(325.22,252.55)计算知道该点在10这个方格内,得出文件名为756512-10,插入c:\tuku\756512-10.dwg这个文件。

发表于 2011-8-4 20:50:55 | 显示全部楼层
本帖最后由 Gu_xl 于 2011-8-5 18:19 编辑

回复 myzwsc 的帖子

  1. (DEFUN C:TT (/ PT X STRX Y X0 STRY Y0 STRNUM FILENAME inspt)
  2. (while
  3.   (setq pt (getpoint "\n选取点位置:"))
  4.   (setq x    (car pt)
  5. strX (itoa (fix (* x 0.001)))
  6. y    (cadr pt)
  7. x0   (- x (* 1000 (fix (* x 0.001))))
  8. strY (itoa (fix (* 0.001 (- y (* 1e6 (fix (* y 1e-6)))))))
  9. y0   (- y (* 1000 (fix (* y 0.001))))
  10.   )
  11.   (cond ((< x0 250)
  12.   (cond ((< y0 250)
  13.   (setq strNum "11")
  14.   (setq inspt (list (* 1000 (fix (* x 0.001)))
  15.       (* 1000 (fix (* y 0.001)))
  16.       0
  17.        )
  18.   )
  19.         )
  20.         ((< y0 500)
  21.   (setq strNum "9")
  22.   (setq inspt (list (* 1000 (fix (* x 0.001)))
  23.       (+ 250 (* 1000 (fix (* y 0.001))))
  24.       0
  25.        )
  26.   )
  27.         )
  28.         ((< y0 750)
  29.   (setq strNum "3")
  30.   (setq inspt (list (* 1000 (fix (* x 0.001)))
  31.       (+ 500 (* 1000 (fix (* y 0.001))))
  32.       0
  33.        )
  34.   )
  35.         )
  36.         ((< y0 1000)
  37.   (setq strNum "1")
  38.   (setq inspt (list (* 1000 (fix (* x 0.001)))
  39.       (+ 750 (* 1000 (fix (* y 0.001))))
  40.       0
  41.        )
  42.   )
  43.         )
  44.   )
  45. )
  46. ((< x0 500)
  47.   (cond ((< y0 250)
  48.   (setq strNum "12")
  49.   (setq inspt (list (+ 250 (* 1000 (fix (* x 0.001))))
  50.       (* 1000 (fix (* y 0.001)))
  51.       0
  52.        )
  53.   )
  54.         )
  55.         ((< y0 500)
  56.   (setq strNum "10")
  57.   (setq inspt (list (+ 250 (* 1000 (fix (* x 0.001))))
  58.       (+ 250 (* 1000 (fix (* y 0.001))))
  59.       0
  60.        )
  61.   )
  62.         )
  63.         ((< y0 750)
  64.   (setq strNum "4")
  65.   (setq inspt (list (+ 250 (* 1000 (fix (* x 0.001))))
  66.       (+ 500 (* 1000 (fix (* y 0.001))))
  67.       0
  68.        )
  69.   )
  70.         )
  71.         ((< y0 1000)
  72.   (setq strNum "2")
  73.   (setq inspt (list (+ 250 (* 1000 (fix (* x 0.001))))
  74.       (+ 750 (* 1000 (fix (* y 0.001))))
  75.       0
  76.        )
  77.   )
  78.         )
  79.   )
  80. )
  81. ((< x0 750)
  82.   (cond ((< y0 250)
  83.   (setq strNum "15")
  84.   (setq inspt (list (+ 500 (* 1000 (fix (* x 0.001))))
  85.       (* 1000 (fix (* y 0.001)))
  86.       0
  87.        )
  88.   )
  89.         )
  90.         ((< y0 500)
  91.   (setq strNum "13")
  92.   (setq inspt (list (+ 500 (* 1000 (fix (* x 0.001))))
  93.       (+ 250 (* 1000 (fix (* y 0.001))))
  94.       0
  95.        )
  96.   )
  97.         )
  98.         ((< y0 750)
  99.   (setq strNum "7")
  100.   (setq inspt (list (+ 500 (* 1000 (fix (* x 0.001))))
  101.       (+ 500 (* 1000 (fix (* y 0.001))))
  102.       0
  103.        )
  104.   )
  105.         )
  106.         ((< y0 1000)
  107.   (setq strNum "5")
  108.   (setq inspt (list (+ 500 (* 1000 (fix (* x 0.001))))
  109.       (+ 750 (* 1000 (fix (* y 0.001))))
  110.       0
  111.        )
  112.   )
  113.         )
  114.   )
  115. )
  116. ((< x0 1000)
  117.   (cond ((< y0 250)
  118.   (setq strNum "16")
  119.   (setq inspt (list (+ 750 (* 1000 (fix (* x 0.001))))
  120.       (* 1000 (fix (* y 0.001)))
  121.       0
  122.        )
  123.   )
  124.         )
  125.         ((< y0 500)
  126.   (setq strNum "17")
  127.   (setq inspt (list (+ 750 (* 1000 (fix (* x 0.001))))
  128.       (+ 250 (* 1000 (fix (* y 0.001))))
  129.       0
  130.        )
  131.   )
  132.         )
  133.         ((< y0 750)
  134.   (setq strNum "8")
  135.   (setq inspt (list (+ 750 (* 1000 (fix (* x 0.001))))
  136.       (+ 500 (* 1000 (fix (* y 0.001))))
  137.       0
  138.        )
  139.   )
  140.         )
  141.         ((< y0 1000)
  142.   (setq strNum "6")
  143.   (setq inspt (list (+ 750 (* 1000 (fix (* x 0.001))))
  144.       (+ 750 (* 1000 (fix (* y 0.001))))
  145.       0
  146.        )
  147.   )
  148.         )
  149.   )
  150. )
  151.   )
  152. ;;;补足三位数
  153.   (repeat (- 3 (strlen strY))
  154.     (setq strY (strcat "0" strY))
  155.   )
  156.   (repeat (- 3 (strlen strX))
  157.     (setq strX (strcat "0" strX))
  158.   )
  159. ;;;得到文件名
  160.   (setq filename (strcat strY strX "-" strNum ".dwg"))
  161. ;;;插入块
  162.   (if (setq filename (findfile (strcat "c:\\tuku\\" filename)))
  163.     (command "insert" filename inspt 1 1 0)
  164.   )
  165. )
  166. )


评分

参与人数 2明经币 +1 金钱 +40 收起 理由
myzwsc + 1 + 20 很给力!
gbhsu + 20 赞一个!

查看全部评分

 楼主| 发表于 2011-8-5 15:44:19 | 显示全部楼层
回复 Gu_xl 的帖子

太感谢版主了,你帮我解决了一个大问题。
使用过程中发现点问题:
1、第159行(setq filename (strcat strY strX "-" strNum))要改(setq filename (strcat strY strX "-" strNum ".dwg))才可以用;
2、我的图块插入点默认都是(0,0)过程简单很多,借鉴你的代码用(list 0 0 0)代替inspt
3、能否加个循环点击插图?
4、个别图没反应,手工尝试insert可以,是不是图纸原因?
发表于 2011-8-5 18:18:11 | 显示全部楼层
回复 myzwsc 的帖子

(DEFUN C:TT (/ PT X STRX Y X0 STRY Y0 STRNUM FILENAME inspt)
  (while
  (setq pt (getpoint "\n选取点位置:"))
  .
  .
  .
)
)
发表于 2011-8-6 15:46:36 | 显示全部楼层
干嘛用得?用不上。。。G版真是超帅啊
 楼主| 发表于 2011-8-8 11:56:44 | 显示全部楼层
插入地形图用的,文件名是有规律的,根据坐标命名的。
发表于 2011-8-15 05:38:15 | 显示全部楼层
本帖最后由 qfkxc 于 2011-8-15 12:37 编辑

取消1000*1000方格限制,以1:500标准图幅250*250图名以上代码如何修改?

图幅排序如下:
82009100     82009125     82009150     82009175
81759100     81759125     81759150     81759175
81509100     81509125     81509150     81509175

图号名取X值坐标整米数前4位,Y值坐标前4位。

发表于 2011-8-15 07:42:36 | 显示全部楼层
太专业了..用不上..看起来也是个繁琐的工序,有程序就好很多了
 楼主| 发表于 2013-8-19 17:32:08 | 显示全部楼层
本帖最后由 myzwsc 于 2013-8-19 21:38 编辑
Gu_xl 发表于 2011-8-5 18:18
回复 myzwsc 的帖子

(DEFUN C:TT (/ PT X STRX Y X0 STRY Y0 STRNUM FILENAME inspt)

谢谢版主,这个程序省很多插图时间。现在有点问题:插图点击过程中会出现插入错误,提示“**引用自身”,这时必须把这个文件找出来改个文件名就可以用insert命令插入,请教版主:有没有办法判断插入是否成功,如文件存在且插入不成功就把此文件复制到c:\temp下,更换文件名,再插入它。或者在插入的过程中直接改名,但原文件要保持不变。
再次谢谢版主。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-19 14:07 , Processed in 0.160177 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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