明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4363|回复: 15

[已解答] 求助:将选择的图元朝选定方向移动指定距离的程序

[复制链接]
发表于 2013-11-8 21:53 | 显示全部楼层 |阅读模式
经常用到将一些图元(如标注、文字、块等)移动到距离墙或者柱子一定距离,每次都要输入一个较长的数据,很麻烦,可不可以编写这样一个程序,程序使用时:
1.选择图元,输入命令,空格确定
2.程序提示:指定方向,方向通过鼠标指定(如果程序在这一步能将极轴打开更好)
3.已选择的图元在选定的方向上移动设定好的距离,设定的距离为245.6953
发表于 2018-12-5 13:09 | 显示全部楼层
不错的帖子
发表于 2013-11-9 01:53 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-11-9 14:42 编辑

  1. (defun c:tt(/ s1 sstoes p1 p2 d);不知道能不能达到你的要求;
  2.   (defun mymove(ss p p1 / ty q q1 s1);;参照by-xyp1964的xyp-ScaleEntity
  3.     (setq ty(type ss)i -1
  4.     q1(vlax-3D-point(trans p1 1 0))
  5.     q(vlax-3D-point(trans p 1 0)))
  6.     (cond((= ty 'ENAME)(vla-move(vlax-ename->vla-object ss)q q1))
  7.    ((= ty 'PICKSET)
  8.     (setq i -1)
  9.     (while (setq s1 (ssname ss (setq i (1+ i))))
  10.      (mymove s1 p p1)))
  11.    ((= ty 'LIST)(foreach x ss(mymove x p p1))))
  12.     );defun
  13.   (defun SstoEs(ss / a en lst)
  14.     (if ss(progn(setq a -1)
  15.       (while(setq en(ssname ss(setq a(1+ a))))(setq lst (cons en lst)))))
  16.     lst);defun
  17.   (while(null ASSSDs)(progn (prompt "请选择要移动的对象:")(setq ASSSDs(ssget))))
  18.   (setq s1(SstoEs ASSSDs))
  19.   ;;;(command"'snap")(command pause);;;
  20.   (while(null(setq p2(getpoint(setq p1(nth 1(grread 1 2 1))))"指定移动方向"))))
  21.   (if(null(setq d(getreal"需要移动的距离<245.6953>")))(setq d 245.6953));;如果不需要改变距离,不要这一行,把下边的d换成245.6953就行
  22.   (mymove s1 p1(polar p1(angle p1 p2) d))
  23.   (setq ASSSDs nil);;;;不要这句它会在不选择图元运行的情况下一直默认上一次所选择对象
  24.   (command"'snap" "OFF")
  25.   (princ)
  26.   )
















本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
theisland + 1 赞一个!

查看全部评分

 楼主| 发表于 2013-11-9 07:59 | 显示全部楼层
llsheng_73 发表于 2013-11-9 01:53

感谢大侠的热心帮助,程序测试了下,貌似只能对第一次选择的图元操作,想移动别的对象不行;还有就是希望方向选择那步能优化一下:不提示选择什么捕捉间距,而是在运行程序时,程序已经判断十字光标所在点为第一点,同时程序提示指定第二点,左键选定第二点,确定,已经选择的对象即被移动
发表于 2013-11-9 08:53 | 显示全部楼层


本帖子中包含更多资源

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

x
 楼主| 发表于 2013-11-9 09:59 | 显示全部楼层
xyp1964 发表于 2013-11-9 08:53

咋还是有那么多需要自己输入的啊?能不能简单点,最好不要出现对话框
发表于 2013-11-9 10:11 | 显示全部楼层
  1. (defun c:tt ()
  2.   (princ "\n选择实体<退出>: ")
  3.   (while (setq ss (ssget))
  4.     (setq p1 (xyp-9pt ss 5))
  5.     (if        (setq p2 (getpoint p1 "\n方向点<退出>: "))
  6.       (command"copy" ss "" "non" p1 "non" (polar p1 (angle p1 p2) 245.6953))
  7.     )
  8.     (princ "\n选择实体<退出>: ")
  9.   )
  10.   (princ)
  11. )
发表于 2013-11-9 10:16 | 显示全部楼层
  1. (defun c:tt ()
  2.   (princ "\n选择实体<退出>: ")
  3.   (while (setq ss (ssget))
  4.     (setq p1 (getvar 'VIEWCTR))
  5.     (if        (and (setq p2 (getpoint p1 "\n方向点<退出>: "))
  6.              (setq p2 (polar p1 (angle p1 p2) 245.6953))
  7.         )
  8.       (command "copy" ss "" "non" p1 "non" p2)
  9.     )
  10.     (princ "\n选择实体<退出>: ")
  11.   )
  12.   (princ)
  13. )
 楼主| 发表于 2013-11-9 10:36 | 显示全部楼层
xyp1964 发表于 2013-11-9 10:16

太好了!这就是我想要的结果,非常感谢您的帮助!
 楼主| 发表于 2013-11-9 10:40 | 显示全部楼层
奇怪,怎么找不到设为最佳答案的地方
发表于 2013-11-9 13:14 | 显示全部楼层
theisland 发表于 2013-11-9 07:59
感谢大侠的热心帮助,程序测试了下,貌似只能对第一次选择的图元操作,想移动别的对象不行;还有就是希望 ...

你现在的描述与起初的要求前后.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-23 20:18 , Processed in 0.470717 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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