找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 13093|回复: 23

(完成 8.2 更新)[编程申请]:可否编将文字与线齐平功能拓展,选中块的某一边将他与

  [复制链接]
发表于 2004-6-24 10:19:28 | 显示全部楼层 |阅读模式

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

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

×
这两天在做村规,以保留改造为主,现状房子基本都不平行,要见缝插针的布置规划民宅,我在用align命令对齐,感觉还是很麻烦,想要更简便的方法见下图,即选中套型块A的一边,在选中要与之平行的线,块马上就能与线平行(块中带圆圈的线与参照线齐平)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-6-24 11:22:32 | 显示全部楼层
你说的不充分,CAD中的线有起始点之分,你点两个线能对齐但有可能反向。

  1. ;; 单一实体(块、多义线)某一曲线对齐,相当于 align 中的两点对齐
  2. ;; 现在只要选择两个线就可以,对齐基准为鼠标临近点
  3. (defun c:xdtb_align (/ $getpoint e1 e2 pt1 pt2 tf an mat mat0 v v1 v2)
  4.   (defun $getpoint (e          /        p     blk   mat          p1        etyp  ptl
  5.                     sp          ep        p2    pam   index1        index2
  6.                     lst          blk        e1
  7.                    )
  8.     (setq p  (cadr e)
  9.           e1 (car e)
  10.     )
  11.     (if        (= (length e) 4)                ;Insert
  12.       (setq blk        (last (last e))                ;Block
  13.             mat        (xdrx_matrix_block2wcs blk)
  14.             p1        (xdrx_point_transform p (xdrx_matrix_inverse mat))
  15.                                         ;WCS->OCS
  16.       )
  17.     )
  18.     (xdrx_setenttodb e1)
  19.     (setq etyp (xdrx_getentdxf 0)
  20.           ptl  (xdrx_curve_getpoint e1)
  21.     )
  22.     (cond
  23.       ((= etyp "LINE")
  24.        (setq sp        (car ptl)
  25.              ep        (last ptl)
  26.        )
  27.       )
  28.       ((wcmatch etyp "*POLYLINE")
  29.        (setq p2            (xdrx_curve_getclosestpoint
  30.                       e1
  31.                       (if p1
  32.                         p1
  33.                         p
  34.                       )
  35.                     )
  36.              pam    (xdrx_curve_getparamatpoint e1 p2)
  37.              index1 (fix pam)
  38.        )
  39.        (if (< index1 pam)
  40.          (setq index2 (1+ index1))
  41.          (setq index2 (1- index1))
  42.        )
  43.        (setq sp        (xdrx_polyline_getpointAt e1 index1)
  44.              ep        (xdrx_polyline_getpointat e1 index2)
  45.        )
  46.        (if (not ep)
  47.          (setq ep (last ptl))
  48.        )
  49.       )
  50.       (t)
  51.     )
  52.     (if        sp
  53.       (progn
  54.         (if blk
  55.           (setq        sp (xdrx_point_transform sp mat)
  56.                 ep (xdrx_point_transform ep mat)
  57.           )
  58.         )
  59.         (if (<= (distance p sp) (distance p ep))
  60.           (setq lst (list sp ep))
  61.           (setq lst (list ep sp))
  62.         )
  63.       )
  64.     )
  65.   )
  66.   (setq tf t)
  67.   ;;main
  68.   (while tf
  69.     (if        (and (setq e1 (nentsel "\n拾取目标实体的对齐线: "))
  70.              (setq e2 (nentsel "\n拾取源实体的对齐线: "))
  71.              (setq pt1 ($getpoint e1))
  72.              (setq pt2 ($getpoint e2))
  73.         )
  74.       (progn
  75.         (setq v1   (mapcar '- (car pt1) (cadr pt1))
  76.               v2   (mapcar '- (car pt2) (cadr pt2))
  77.               v           (mapcar '- (car pt1) (car pt2))
  78.               an   (- (angle '(0. 0.) v1) (angle '(0. 0.) v2))
  79.               mat  (xdrx_matrix_identity 3)
  80.               mat0 (xdrx_matrix_Product
  81.                      (xdrx_matrix_settranslation mat v)
  82.                      (xdrx_matrix_setrotation mat an '(0. 0. 1.) (car pt2))
  83.                    )
  84.         )
  85.                                         ;(xdrx_entity_transformedcopy
  86.         (xdrx_entity_transform
  87.           (if (= (length e2) 2)
  88.             (car e2)
  89.             (last (last e2))
  90.           )
  91.           mat0
  92.         )
  93.       )
  94.       (setq tf nil)
  95.     )
  96.   )
  97.   (princ)
  98. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-25 23:45:51 | 显示全部楼层
ea试了一下,总感觉还模不到规律
用一个带缺口的长方形块做试验,想让缺口边线和目标线对齐,结果相反,碰见了一个奇怪的现象,将线条设置颜色做成的块运行命令后跑到很远去了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-6-26 00:20:25 | 显示全部楼层
试试这个程序,可以完成平行,当然房子必须是一个整体!
图中1-2方向为参照方向,3-4,5-6为要旋转的轴!打开捕捉,用点选,1、2、3、4、5、6。。。这样连续选下去,选完所有要旋转的房子后,回车,OK!程序有点乱,也没写错误处理,等有时间再完善!:)

Option Explicit

Sub rott()
On Error Resume Next
Dim sset As AcadSelectionSet
Dim czfx As Double
Dim pnt() As Variant
Dim zds As Integer
'Dim pnt2 As Variant
Dim czfx1 As Double
Dim fxc As Double
Dim i As Integer
Dim j As Integer
i = 0
On Error GoTo 1
Do
ReDim Preserve pnt(i)
pnt(i) = ThisDrawing.Utility.GetPoint(, "choose")
'    For j = 0 To 2
'    Debug.Print pnt(i)(j)
'    Next

i = i + 1
zds = i
Loop



1:

Set sset = ThisDrawing.SelectionSets.Add("t111t1")

'MsgBox zds
czfx = ThisDrawing.Utility.AngleFromXAxis(pnt(0), pnt(1))
On Error Resume Next
For i = 2 To zds - 1 Step 2
    sset.SelectAtPoint (pnt(i))
    czfx1 = ThisDrawing.Utility.AngleFromXAxis(pnt(i), pnt(i + 1))
    fxc = czfx1 - czfx
        If fxc > 0 Then
            sset.Item(0).Rotate pnt(i), -fxc
            Else
            sset.Item(0).Rotate pnt(i), fxc
        End If
    sset.Clear
Next
sset.Delete

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-6-26 16:40:42 | 显示全部楼层
最初由 心竹 发布
[B]ea试了一下,总感觉还模不到规律
用一个带缺口的长方形块做试验,想让缺口边线和目标线对齐,结果相反,碰见了一个奇怪的现象,将线条设置颜色做成的块运行命令后跑到很远去了。 [/B]

是块内实体的的坐标转换问题,解决中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-27 21:13:15 | 显示全部楼层
;;发个用命令的。可连续选择.
[php]
(defun c:xal (/ e1 p1 p1s p1m e2 p2 p2s p2m pt )
  (vl-cmdf ".undo" "be")
  (arxload "geom3d")
  (setq e1 (nentsel "\n选align参照实体/<退出>:"))
  (setq p1  (trans (cadr e1) 2 1)
        p1s (osnap p1 "end")
        p1m (osnap p1 "nea"))
  (princ "\n选align目标实体/<退出>:")
  (while (setq pt (getpoint))
    (if
      (and(setq e2 (nentselp pt))
          (setq ss (ssget pt)
                p2 (trans (cadr e2) 2 1)
               p2m (osnap p2 "nea")
               p2s (osnap p2 "end"))
          (and p1s p1m p2s p2m ss)
      )
      ;(vl-cmdf ".move" ss "" p2s p1s ".rotate" ss "" p1s "r" p2s p2m p1m)
       (align ss p2s p1s p2m p1m "" "")
    )
  )
  (vl-cmdf ".undo" "e")
  (princ)
)
[/php]
演示中有些点取实体的关键贞没捕捉到:(
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-6-27 21:26:55 | 显示全部楼层
最初由 陌生人 发布
[B];;发个用命令的。可连续选择.
[php]
(defun c:xal (/ e1 p1 p1s p1m e2 p2 p2s p2m pt )
  (vl-cmdf ".undo" "be")
  (setq e1 (nentsel "\n选align参照实体/<退出>:"))
  (setq p1  (trans (cadr e1) 2 1)
        p... [/B]

既然点都有了,还可以使用 align 命令
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-28 08:28:28 | 显示全部楼层
鱼儿和陌生银,俺好感动哦,你门太瞧得起俺了,可俺是菜鸟级,你门贴的这些东东怎么用?拷贝下来存成什么格式的文件?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 14:05:34 | 显示全部楼层
最初由 心竹 发布
[B]鱼儿和陌生银,俺好感动哦,你门太瞧得起俺了,可俺是菜鸟级,你门贴的这些东东怎么用?拷贝下来存成什么格式的文件? [/B]


下载附件的lsp文件
在acad里面加载,命令名我改成ag了,简单点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 18:23:18 | 显示全部楼层
最初由 心竹 发布
[B]鱼儿和陌生银,俺好感动哦,你门太瞧得起俺了,可俺是菜鸟级,你门贴的这些东东怎么用?拷贝下来存成什么格式的文件? [/B]


vba程序COPY下来,在CAD命令行中输入vbaide,然后把代码贴进去,保存成DVB文件!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-31 12:14:49 | 显示全部楼层
ea,这个命令有没有最新的改进版本?感觉用起来还不是很好,不稳定,我没法掌握他的规律,有时要出错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-8-1 01:31:05 | 显示全部楼层
我用rectang创建的矩形在对齐的时候也是出错,只是将角上的端点对齐了,点选的边没有对齐
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-2 22:14:46 | 显示全部楼层
谢谢ea的修改,程序现在已经很好用了,感兴趣的朋友可以将二楼的内容复制存成lisp,用appload加载。
——ea还有个小小请求,现在的对齐一次只能对齐一个物体,能不能选择多个物体?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-20 11:22 , Processed in 0.212245 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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