找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1665|回复: 22

[求助] [求助]:如何用lisp让直线和圆相关联

[复制链接]
发表于 2004-7-7 13:39:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
有一条line直线和一个圆,直线一端在圆外,一端在圆上,但直线延伸后会通过圆心。现在用stretch命令选择圆和一端直线,后变动圆的位置,结果直线在圆上的端点跟随圆一起移动,直线另一端不动,此时直线延伸后不再经过圆心。如何让直线总是通过圆心呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-7-7 13:48:29 | 显示全部楼层
先把直线延伸到圆心然后在拉伸不就行了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-7 22:53:41 | 显示全部楼层
楼主具体说说看,在什么情况下使用这样的功能,频率高么?
如果只是十分偶尔的用用的话,没有必要编写程序的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-8 08:08:37 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-8 12:50:38 | 显示全部楼层
应该说应用频率还是比较高的。大家都知道有很多组装图纸中需要拉件号,而且有一种件号形式就是直线一端是箭头,另一端是圆,圆中是件号数字。因为我们拉件号时,放圆的位置时不一定合适,我们经常遇到修改件号圆的位置,以便布置的更合理更好看一些,所以用stretch 来改变件号圆的位置,还有存在箭头的方向也偏移了直线方向,每变换一次件号圆的位置,都要调整箭头和圆对直线的相对位置,比较麻烦的,所以想开发一下,箭头和直线和圆相关联。另外可以发现,cad中引线命令qleader可以让直线和箭头相关联,当用stretch对直线一端操作时,另一端箭头会跟着方向的变化,不知是怎样办到的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-8 13:16:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
这个不用编了,有现成的,你用AutoCAD Mechanical,里面什么都有,功能强大着呢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-7-9 08:33:51 | 显示全部楼层

Re: [求助]:如何用lisp让直线和圆相关联

最初由 yanxinbo67 发布
[B]有一条line直线和一个圆,直线一端在圆外,一端在圆上,但直线延伸后会通过圆心。现在用stretch命令选择圆和一端直线,后变动圆的位置,结果直线在圆上的端点跟随圆一起移动,直线另一端不动,此时直线延伸后不再经?.. [/B]

REFER TO :
鼠标拖动序号球
http://p4.xdcad.net/forum/showthread.php?s=&threadid=209190
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-9 11:50:24 | 显示全部楼层
鼠标拖动序号球是不错的,可是另一端的箭头方向怎么办。如果将这条直线换成QLEADER的带箭头的线就好了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-12 11:43:57 | 显示全部楼层

  1. ;;序號球加反應器早已放出(在”某”個網站---不在明經&也不在曉東)
  2. ;;有一條line直線和一個圓,直線一端在圓外,一端在圓上,但直線延伸後會通過圓心。
  3. ;;現在用stretch命令選擇圓和一端直線,後變動圓的位置,結果直線在圓上的端點跟隨
  4. ;;圓一起移動,直線另一端不動,此時直線延伸後不再經過圓心。如何讓直線總是通過圓心?

  5. ;;試試以下的程序,使用永久反應裝置
  6. ;;進行"undo"操作,也不會有錯誤
  7. ;;By 龍龍仔(LUCAS)

  8. (defun C:LINE_REACTOR (/ HOLDECHO L1 C1)
  9.   (vl-load-com)
  10.   (setq HOLDECHO (getvar "CMDECHO"))
  11.   (setvar "CMDECHO" 1)
  12.   (command "_.LINE" PAUSE PAUSE "")
  13.   (setq L1 (entlast))
  14.   (command "_.CIRCLE" (getvar "LASTPOINT") PAUSE)
  15.   (setq C1 (vlax-ename->vla-object (entlast)))
  16.   (setvar "CMDECHO" 0)
  17.   (command "_.TRIM"
  18.            (entlast)
  19.            ""
  20.            (list L1 (getvar "LASTPOINT"))
  21.            ""
  22.   )
  23.   (setq L1 (cdr (assoc 5 (entget L1))))
  24.   (vlr-pers
  25.     (vlr-object-reactor
  26.       (list C1)
  27.       L1
  28.       '((:vlr-modified . LI))
  29.     )
  30.   )
  31.   (setvar "CMDECHO" HOLDECHO)
  32.   (princ)
  33. )
  34. (prompt "\nType LINE_REACTOR")

  35. (defun LI (NOTIFIER-OBJECT             REACTOR-OBJECT
  36.            PARAMETER-LIST             /                  PTC
  37.            PTR                L1             SPT          ANG
  38.            DIST
  39.           )
  40.   (vl-load-com)
  41.   (if (not (vlax-erased-p NOTIFIER-OBJECT))
  42.     (progn
  43.       (setq
  44.         PTC (vlax-safearray->list
  45.               (vlax-variant-value (vla-get-center NOTIFIER-OBJECT))
  46.             )
  47.       )
  48.       (setq PTR (vla-get-radius NOTIFIER-OBJECT))
  49.       (if (entget (setq L1 (handent (vlr-data REACTOR-OBJECT))))
  50.         (progn
  51.           (setq L1 (vlax-ename->vla-object L1))
  52.           (setq
  53.             DIST (- (distance (setq SPT        (vlax-safearray->list
  54.                                           (vlax-variant-value
  55.                                             (vla-get-startpoint L1)
  56.                                           )
  57.                                         )
  58.                               )
  59.                               PTC
  60.                     )
  61.                     PTR
  62.                  )
  63.           )
  64.           (setq ANG (angle SPT PTC))
  65.           (vla-put-endpoint L1 (vlax-3d-point (polar SPT ANG DIST)))
  66.         )
  67.       )
  68.     )
  69.   )
  70.   (princ)
  71. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-12 12:45:08 | 显示全部楼层
不懂了,为什么不用快速引线+块参照?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-12 13:27:24 | 显示全部楼层
最初由 lzh741206 发布
[B]不懂了,为什么不用快速引线+块参照? [/B]


可以的話寫出來看看是否能讓直線總是通過圓心-----變動圓的位置!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-12 13:34:18 | 显示全部楼层
这个不用写程序的呀!
快速引线本来就可以关联块参照
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-12 14:26:17 | 显示全部楼层
最初由 lzh741206 发布
[B]这个不用写程序的呀!
快速引线本来就可以关联块参照 [/B]

楼主的意思是拖动或延伸时引线的延长线始终过圆心, 恐怕不编程序办不到吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-12 14:38:01 | 显示全部楼层
明白了,是我没完全理解楼主的意思,:)
挺好玩的,贴个VBA的,:)
Sub tt()
On Error GoTo ErrHandle
Dim pLine As AcadLine
Dim pCircle As AcadCircle
p1 = ThisDrawing.Utility.GetPoint(, "输入第一点:")
p2 = ThisDrawing.Utility.GetPoint(p1, "输入第二点:")
Set pLine = ThisDrawing.ModelSpace.AddLine(p1, p2)
pdis = ThisDrawing.Utility.GetDistance(p2, "输入圆半径:")
Set pCircle = ThisDrawing.ModelSpace.AddCircle(p2, pdis)
Dim xt(1) As Integer, xd(1)
xt(0) = 1001: xd(0) = "TlsCadXHQ"
xt(1) = 1000: xd(1) = pLine.Handle
pCircle.SetXData xt, xd
ErrHandle:
End Sub

Private Sub AcadDocument_ObjectModified(ByVal Object As Object)
On Error GoTo ErrHandle
Dim pObj As AcadLine
Dim pStart, pEnd
Dim c As AcadCircle
Object.GetXData "TlsCadXHQ", xt, xd
If IsArray(xd) Then
Set pObj = ThisDrawing.HandleToObject(xd(1))
pStart = pObj.StartPoint
pEnd = Object.Center
pAngle = ThisDrawing.Utility.AngleFromXAxis(pStart, pEnd)
pdis = ((pStart(0) - pEnd(0)) ^ 2 + (pStart(1) - pEnd(1)) ^ 2) ^ 0.5 - Object.radius
pObj.EndPoint = ThisDrawing.Utility.PolarPoint(pStart, pAngle, pdis)
End If
ErrHandle:
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-16 15:31:01 | 显示全部楼层
我用过9楼的LISP,不错。可是能否改进一下,当第二次打开图纸进行STRETCH的时候,不好用了,只有再画一个后所有的又好用了。另外能否在直线另一端加上箭头,具备同样方向跟随功能
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 06:55 , Processed in 0.306830 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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