明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3989|回复: 15

编程申请:指定图元基点与目标点间距移动物体

  [复制链接]
发表于 2012-7-31 21:11 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 半听可乐 于 2012-7-31 21:26 编辑

比如说我要进行这样的操作:移动图中已经存在的一个圆(或者其他图元,一个或多个),使得这个圆的圆心距离某道墙1000的距离,常规操作是先移动圆使其圆心位于墙边----再移动圆使其圆心偏离墙边1000距离

可不可以这样优化:运行程序--选择圆(或者其他图元集)并指定移动基点,选择目标直线(比如墙线)--输入移动基点与目标直线的距离1000---圆(或者其他图元集)正交移动至距离目标直线1000的位置

描述看起来很麻烦,实际操作其实很简单,希望大家能理解!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(defun C:MfDist () ;; 选择圆 / ... (setq ss (ssget)) ;; 指定移动基点 (setq pt (GetPoint "\n指定移动基点: ")) ;; 选择目标直线 (prompt "\n选择目标直线: ") (setq ee (ssget ":E:S") ee (ssname ee 0) ) ;; 输入移动基点与目标直线的距离1000 / 500 / ... (setq dd (getDist "\n输入移动基点与目标直线的距离: ")) (setq px (vlax-curve-getCl ...
发表于 2012-7-31 21:11 | 显示全部楼层
(defun C:MfDist ()
   ;; 选择圆 / ...
   (setq ss (ssget))
   
   ;; 指定移动基点
   (setq pt (GetPoint "\n指定移动基点: "))
   
   ;; 选择目标直线
   (prompt "\n选择目标直线: ")
   (setq ee (ssget ":E:S")
         ee (ssname ee 0)
   )
   
   ;; 输入移动基点与目标直线的距离1000 / 500 / ...
   (setq dd (getDist "\n输入移动基点与目标直线的距离: "))
   
   (setq px (vlax-curve-getClosestPointTo ee pt)
         p2 (polar px (angle px pt) dd)
   )
   (vl-cmdf "Move" ss "" pt "non" p2)
   (princ)
)
回复

使用道具 举报

发表于 2012-7-31 21:20 | 显示全部楼层
未见调试样图,且自行先试 vlax-curve-getClosestPointTo 函数
回复

使用道具 举报

 楼主| 发表于 2012-7-31 21:27 | 显示全部楼层
Andyhon 发表于 2012-7-31 21:20
未见调试样图,且自行先试 vlax-curve-getClosestPointTo 函数

已经添加,请帮忙
回复

使用道具 举报

 楼主| 发表于 2012-7-31 22:27 | 显示全部楼层
Andyhon 发表于 2012-7-31 21:54
(defun C:MfDist ()
   ;; 选择圆 / ...
   (setq ss (ssget))

朋友,你动作真是迅猛啊!程序也非常好用!感激不尽!
回复

使用道具 举报

发表于 2012-7-31 22:29 | 显示全部楼层

  1. ;; 伪源码需要e派工具箱(XCAD)的支持
  2. (defun c:tt ()
  3.   (CMDLA0)
  4.   (setq s0 (car (entsel "\n选择目标: ")))
  5.   (redraw s0 3)
  6.   (princ "\n圆实体: ")
  7.   (setq ss (ssget '((0 . "circle")))
  8. i  -1
  9.   )
  10.   (while (setq s1 (ssname ss (setq i (1+ i))))
  11.     (setq pt (xyp-get-dxf 10 s1)
  12.    p1 (vlax-curve-getclosestpointto s0 pt)
  13.    p1 (polar p1 (angle p1 pt) 1000)
  14.     )
  15.     (xyp-move s1 pt p1)
  16.   )
  17.   (redraw s0 4)
  18.   (CMDLA1)
  19. )


本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2012-7-31 22:43 | 显示全部楼层
本帖最后由 半听可乐 于 2012-7-31 22:59 编辑
Andyhon 发表于 2012-7-31 21:11
(defun C:MfDist ()
   ;; 选择圆 / ...
   (setq ss (ssget))


对了朋友,能不能将程序优化一下,使得当目标直线是块中的一条直线或多段线中一条线段时也管用呢?另外,经试用发现一个小bug:如果从图元基点出发到目标直线的垂线与目标直线不相交,则移动后基点与目标直线的距离会比输入值小
回复

使用道具 举报

发表于 2012-8-1 08:54 | 显示全部楼层
样本对象导引着思路来建立代码片断....
是以要能涵盖实务所需,用以避免造成状况外

  1. (defun C:MfDist ()
  2.    ;; 选择圆 / ...
  3.    (setq ss (ssget))

  4.    ;; 指定移动基点
  5.    (setq pt (GetPoint "\n指定移动基点: "))

  6.    ;; 选择目标直线
  7.    (setq ee (nentsel "\n选择目标直线: ")
  8.          pa (cadr ee)
  9.          pb (osnap pa "mid")
  10.          pa (osnap pb "end")
  11.    )

  12.    ;; 输入移动基点与目标直线的距离1000 / 500 / ...
  13.    (setq dd (getDist "\n输入移动基点与目标直线的距离: "))

  14.    (vl-cmdf "Xline" "none" pa "none" pb "")
  15.    (setq ee (entlast)
  16.          px (vlax-curve-getClosestPointTo ee pt)
  17.          p2 (polar px (angle px pt) dd)
  18.    )
  19.    (vl-cmdf "Move" ss "" pt "none" p2)
  20.    (entdel ee)
  21.    (princ)
  22. )
Try again

评分

参与人数 2明经币 +1 金钱 +20 收起 理由
奇秘幽诡 + 20 很给力!
半听可乐 + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-8-1 11:26 | 显示全部楼层
Andyhon 发表于 2012-8-1 08:54
样本对象导引着思路来建立代码片断....
是以要能涵盖实务所需,用以避免造成状况外 Try again

这下更强大了,真给力!谢谢!
回复

使用道具 举报

发表于 2012-8-1 20:22 | 显示全部楼层
学习~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-5 00:51 , Processed in 0.242932 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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