找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2512|回复: 17

[求助]:求根据梁线自动生成轴线的LISP

[复制链接]
发表于 2005-9-23 16:21:48 | 显示全部楼层 |阅读模式

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

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

×
1。选择梁线(梁线图层为beam或者beam_con),生成一条对中的轴线(轴线图层为dote),轴线出梁的线长1米。
2。注意如果是连续梁,即被多根梁打断的梁,轴线一定要延伸成下图这样:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-17 17:54:17 | 显示全部楼层
随层的图层线,在图中未注明,不知要加粗哪种线。
梁线生轴线的问题目前未能找到好办法。
信箱已满,无法发短信。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-10-18 01:01:46 | 显示全部楼层
尚未完善:
  1. [FONT=courier new](load "xyp_lib")
  2. ;|加载通用函数(可在签名栏直接下载)
  3. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  4. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  5. ★1·在acad.lsp中增加(load"xyp_lib")
  6. ■2·在每个程序内增加(load"xyp_lib")
  7. ■3·在command下,输入(load"xyp_lib")
  8. ■4·在菜单.mnl中增加(load"xyp_lib")
  9. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  10. [COLOR=red] ★通用函数下载地址:[/COLOR]
  11. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  12. [url]http://www.mjtd.com/bbs/dispbbs.asp?boardID=3&ID=37554&page=1[/url]|;

  13. (defun c:test ()
  14.   (CMDLA0)
  15.   (setvar "osmode" 0)
  16.   (mkla "AXIS" 1)
  17.   (while (setq e1 (entsel "\n选择墙线 : "))
  18.     (setq s1 (car e1))
  19.     (if        (= (dxf 0 (entget s1)) "LINE")
  20.       (progn
  21.         (setq startpt (dxf 10 (entget S1))
  22.               endpt   (dxf 11 (entget S1))
  23.               a1      (angle startpt endpt)
  24.               p1a     (_midp startpt endpt)
  25.               p1      (osnap (cadr e1) "near")
  26.               lyrnm   (dxf 8 (entget S1))
  27.         )
  28.         (setvar "aperture" 50)
  29.         (entdel S1)
  30.         (setq temp2 (osnap p1 "near"))
  31.         (entdel S1)
  32.         (setvar "aperture" 4)
  33.         (setq s2 (ssname (ssget temp2) 0))
  34.         (if
  35.           (and
  36.             (= (dxf 0 (entget S2)) "LINE")
  37.             (/= (dxf 8 (entget S2)) "AXIS")
  38.             (or        (= (vla-get-angle (vlax-ename->vla-object s2)) a1)
  39.                 (= (- (vla-get-angle (vlax-ename->vla-object s2)) pi) a1)
  40.                 (= (+ (vla-get-angle (vlax-ename->vla-object s2)) pi) a1)
  41.             )
  42.           )
  43.            (progn
  44.              (setq a2          (angle p1 temp2)
  45.                    leng          (/ (distance p1 temp2) 2.0)
  46.                    pts-s2 (dxf 10 (entget s2))
  47.                    pte-s2 (dxf 11 (entget s2))
  48.                    dist1  (distance startpt endpt)
  49.                    dist2  (distance pts-s2 pte-s2)
  50.              )
  51.              (if (> dist1 dist2)
  52.                (command        "LINE"
  53.                         (polar startpt a2 leng)
  54.                         (polar endpt a2 leng)
  55.                         ""
  56.                )
  57.                (command        "LINE"
  58.                         (polar pts-s2 a2 (* leng -1.0))
  59.                         (polar pte-s2 a2 (* leng -1.0))
  60.                         ""
  61.                )
  62.              )
  63.              (setq s0 (entlast))
  64.              (et-s1 s0)
  65.            )
  66.            (princ "\n不存在平行线!")
  67.         )
  68.       )
  69.     )
  70.   )
  71.   (CMDLA1)
  72. )
  73. ;;BEAM
  74. (defun et-s1 (ename)
  75.   (setq        ss (ssget "X" '((0 . "LINE") (8 . "BEAM,AXIS")))
  76.         j  -1
  77.   )
  78.   (while (setq s1 (ssname ss (setq j (1+ j))))
  79.     (setq pt-int (X_INTERS ename s1 1))
  80.     (if        pt-int
  81.       (progn
  82.         (setq pt-int (car pt-int)
  83.               pt-s   (vlax-curve-getstartpoint ename)
  84.               pt-e   (vlax-curve-getendpoint ename)
  85.         )
  86.         (if (< (distance pt-int pt-s)
  87.                (distance pt-int pt-e)
  88.             )
  89.           (command "extend" s1 "" (list ename pt-s) "")
  90.           (command "extend" s1 "" (list ename pt-e) "")
  91.         )
  92.       )
  93.     )
  94.   )
  95.   (setq        pt-s (vlax-curve-getstartpoint ename)
  96.         pt-e (vlax-curve-getendpoint ename)
  97.         rad  (angle pt-s pt-e)
  98.         pt10 (polar pt-s rad -1500)
  99.         pt11 (polar pt-e rad 1500)
  100.   )
  101.   (sub_upd ename 10 pt10)
  102.   (sub_upd ename 11 pt11)
  103. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-18 09:13:11 | 显示全部楼层
xyp1964兄,使用了一下发现有以下几个问题。
1。平行线的图层是墙线,能不能扩展为只要是同一图层的平行线就能生成轴线,没有图层限制,(且生成的轴线的图层为DOTE,)
2。如下图所示:墙线相交时就不能生成轴线了。
3。如下图所示:墙线生成的轴线是否可以出相交的墙线1000mm.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-18 10:30:41 | 显示全部楼层
5楼:
1、本身就是扩展的,生成的轴线的图层已改为DOTE。
2、可能两线不平行,以后可以加上偏差处理。
3、已改为伸出1000。

  1. [FONT=courier new];;;生成轴线
  2. (defun c:test ()
  3.   (CMDLA0)
  4.   (setq lts(getvar"ltscale"))
  5.   (setvar "osmode" 0)
  6.   (setvar"ltscale"1)
  7.   (mkla "DOTE" 1)
  8.   (JZXX "center" "ACADISO")
  9.     (while (setq e1 (entsel "\n选边线 : "))
  10.     (setq s1 (car e1))
  11.     (if        (= (dxf 0 (entget s1)) "LINE")
  12.       (progn
  13.         (setq startpt (dxf 10 (entget S1))
  14.               endpt   (dxf 11 (entget S1))
  15.               a1      (angle startpt endpt)
  16.               p1a     (_midp startpt endpt)
  17.               p1      (osnap (cadr e1) "near")
  18.               lyrnm   (dxf 8 (entget S1))
  19.         )
  20.         (setvar "aperture" 50)
  21.         (entdel S1)
  22.         (setq temp2 (osnap p1 "near"))
  23.         (entdel S1)
  24.         (setvar "aperture" 4)
  25.         (setq s2 (ssname (ssget temp2) 0))
  26.         (if
  27.           (and
  28.             (= (dxf 0 (entget S2)) "LINE")
  29.             (/= (dxf 8 (entget S2)) "DOTE")
  30.             (or        (= (vla-get-angle (vlax-ename->vla-object s2)) a1)
  31.                 (= (- (vla-get-angle (vlax-ename->vla-object s2)) pi) a1)
  32.                 (= (+ (vla-get-angle (vlax-ename->vla-object s2)) pi) a1)
  33.             )
  34.           )
  35.            (progn
  36.              (setq a2          (angle p1 temp2)
  37.                    leng          (/ (distance p1 temp2) 2.0)
  38.                    pts-s2 (dxf 10 (entget s2))
  39.                    pte-s2 (dxf 11 (entget s2))
  40.                    dist1  (distance startpt endpt)
  41.                    dist2  (distance pts-s2 pte-s2)
  42.              )
  43.              (if (> dist1 dist2)
  44.                (command        "LINE"
  45.                         (polar startpt a2 leng)
  46.                         (polar endpt a2 leng)
  47.                         ""
  48.                )
  49.                (command        "LINE"
  50.                         (polar pts-s2 a2 (* leng -1.0))
  51.                         (polar pte-s2 a2 (* leng -1.0))
  52.                         ""
  53.                )
  54.              )
  55.              (setq s0 (entlast))
  56.              (et-s1 s0)
  57.              
  58.            )
  59.            (princ "\n不存在平行线!")
  60.         )
  61.       )
  62.     )
  63.   )
  64.   (setvar"ltscale"lts)
  65.   (CMDLA1)
  66. )
  67. ;;BEAM
  68. (defun et-s1 (ename)
  69.   (setq        ss (ssget "X" '((0 . "LINE") (8 . "BEAM,DOTE")))
  70.         j  -1
  71.   )
  72.   (while (setq s1 (ssname ss (setq j (1+ j))))
  73.     (setq pt-int (X_INTERS ename s1 1))
  74.     (if        pt-int
  75.       (progn
  76.         (setq pt-int (car pt-int)
  77.               pt-s   (vlax-curve-getstartpoint ename)
  78.               pt-e   (vlax-curve-getendpoint ename)
  79.         )
  80.         (if (< (distance pt-int pt-s)
  81.                (distance pt-int pt-e)
  82.             )
  83.           (command "extend" s1 "" (list ename pt-s) "")
  84.           (command "extend" s1 "" (list ename pt-e) "")
  85.         )
  86.       )
  87.     )
  88.   )
  89.   (setq        pt-s (vlax-curve-getstartpoint ename)
  90.         pt-e (vlax-curve-getendpoint ename)
  91.         rad  (angle pt-s pt-e)
  92.         pt10 (polar pt-s rad -1000)
  93.         pt11 (polar pt-e rad 1000)
  94.   )
  95.   (sub_upd ename 10 pt10)
  96.   (sub_upd ename 11 pt11)
  97. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-18 10:53:39 | 显示全部楼层
测试了一下:
1。轴线还是没有出相交线1米长。
2。轴线生成了一段一段的,可否如下图的右图所示(轴线是贯通的):
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-18 11:14:06 | 显示全部楼层
最初由 kaishuibaihn 发布
[B]测试了一下:
1。轴线还是没有出相交线1米长。
2。轴线生成了一段一段的,可否如下图的右图所示(轴线是贯通的): [/B]

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

使用道具 举报

 楼主| 发表于 2005-10-18 11:30:18 | 显示全部楼层
可是我的是这样的情况呀。有时候平行线找不到,且出线长1000好像不能正确的判断。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2005-10-18 15:08:23 | 显示全部楼层
xyp1964 兄
测试了一下再提一点看法:
1。能不能窗选平行线,而不要去点选。
2。能不能增加平行弧线生轴线得功能。
3。边线不能靠的太近,程序是怎么控制的?
4。为什么点击不同的平行线生成得轴线长度不一样,如下图:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-18 21:02:07 | 显示全部楼层
最初由 kaishuibaihn 发布
[B]xyp1964 兄
测试了一下再提一点看法:
1。能不能窗选平行线,而不要去点选。
2。能不能增加平行弧线生轴线得功能。
3。边线不能靠的太近,程序是怎么控制的?
4。为什么点击不同的平行线生成得轴线长度不一样,... [/B]

1、2、都不能
3、三条间距相似的平行线在一起会出错。
4、决定于所选的线长、对面线的线长、轴线两侧延伸是否能产生交点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-10-19 01:38:35 | 显示全部楼层
建筑类软件,如天正、理正等好像都有墙生轴线功能,可以窗选。 对线排序,当在某一范围内的如370以内的认为是一组墙。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-21 21:54 , Processed in 0.207222 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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