找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1099|回复: 14

(完成)[编程申请]:延伸多义线局部线段

[复制链接]
发表于 2003-9-9 15:52:33 | 显示全部楼层 |阅读模式

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

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

×
窗选交点,在窗选范围内的交点向外延伸一个长度,原来的线可能是一根多义线,也可能是多根多义线!
看运行效果图!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-9-9 18:55:51 | 显示全部楼层

Re: [编程申请]:延伸多义线

最初由 coolzhb 发布
[B]窗选交点,在窗选范围内的交点向外延伸一个长度,原来的线可能是一根多义线,也可能是多根多义线!
看运行效果图! [/B]

只需要 多义线,不会有line ?延伸的长度是输入还是一个定值?
多义线中有圆弧吗?


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

使用道具 举报

 楼主| 发表于 2003-9-9 20:12:01 | 显示全部楼层
eachy,我用了,但是没有能达到我的要求,在框选中的交点延长,而不是所有的都延长,如果能兼容line线最好了,要求如果是line,则先变成pline线,再执行同样的操作!
圆弧的就不要了,一般碰不到这种情况!谢谢!请eachy再修改一下!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-9-10 11:51:49 | 显示全部楼层
最初由 lsjjm 发布
[B]延伸后还是多义线吗? [/B]


对,延伸后还是多义线!
具体用于结构配筋图中,钢筋的延伸!
请eachy兄和各位大侠帮忙呀。。。对我很有用!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-9-12 16:28:07 | 显示全部楼层
最初由 liweinc 发布
[B]这是画配筋图的一个问题,我一直是用LEN-DE做的 [/B]


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

使用道具 举报

发表于 2003-9-12 16:50:27 | 显示全部楼层
最初由 coolzhb 发布
[B]

LEN-DE是什么?能发上来共享吗? [/B]



我是指“拉长”命令lengthen,选择“增量(DE)”方式,可以将直线增加一个指定长度(多一线要先炸成直线)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-9-12 21:02:38 | 显示全部楼层
最初由 lsjjm 发布
[B]请问8楼: 炸开延伸后如何再变成多义线? [/B]

炸开之前

  1. (xdrx_setmark)
复制代码

延伸之后用

  1. (command ".pedit" "m" (xdrx_getss) "" "Y" "j" "0.001" "")

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

使用道具 举报

发表于 2003-9-13 05:43:05 | 显示全部楼层
(xdrx_setmark)?
(xdrx_getss)?
是工具箱的函数吧? 可我公司不许下载, 能否展示一下函数的程序码?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-9-13 08:58:56 | 显示全部楼层
最初由 lsjjm 发布
[B](xdrx_setmark)?
(xdrx_getss)?
是工具箱的函数吧? 可我公司不许下载, 能否展示一下函数的程序码? [/B]

真遗憾,不能下载,如果你需要我可以给你发过去。
上面说的两个函数是 Xdrx_api 中的函数,如果是方便自己用,XDRX_API + VLisp  写程序是再顺手不过的了,Vl 中对实体要进行转换,api 则不用,而且api 的速度也比 VL 快。
下面是多线延伸到代码,我加了些注释,如果把其中的 API 函数用Lisp 代码来改写,程序将变大很多。
如果你替换好了一并发上来大家探讨下,谢谢。

  1. ($xdrx_load "xdlsp.lsp");;判断xdlsp.lsp是否加载,否,加载;是,不加
  2. ;;延伸多义线局部线段
  3. (defun c:XDTB_PlineEXT (/        $ea_ptinbox        $ea_list1
  4.                         $ea_list2        ss        dis        pts        e
  5.                         ptl        pw        ptl1        ptl0        tf        nt
  6.                         pl        ss1        b p1 p2
  7.                        )
  8.   ;;判断点是否在一个Box内
  9.   (defun $ea_ptinbox (p0 pt1 pt2)
  10.     (and
  11.       (and (> (car p0) (min (car pt1) (car pt2)))
  12.            (< (car p0) (max (car pt1) (car pt2)))
  13.       )
  14.       (and (> (cadr p0) (min (cadr pt1) (cadr pt2)))
  15.            (< (cadr p0) (max (cadr pt1) (cadr pt2)))
  16.       )
  17.     )
  18.   )
  19.   ;;获取表内指定位置之间的原子
  20.   (defun $ea_list1 (lst st ed / l)
  21.     (while (<= st ed)
  22.       (setq l  (cons (nth st lst) l)
  23.             st (1+ st)
  24.       )
  25.     )
  26.     (reverse l)
  27.   )
  28.   ;;获取表中指定位置以后的表
  29.   (defun $ea_list2 (lst n / l)
  30.     (repeat (- (length lst) n)
  31.       (setq b (nth n lst))
  32.       (setq l (cons b l))
  33.       (setq n (1+ n))
  34.     )
  35.     (reverse l)
  36.   )
  37.   (princ "\n选择要多义线或多义线顶点...")
  38.   (if (and (setq p1 (getpoint "\n第一角点: "))
  39.            (setq p2 (getcorner p1 "\n第二角点: "))
  40.            (setq ss (ssget "c" p1 p2 '((0 . "*polyline"))))
  41.            ($xdlsp_pickset_redraw ss 3);;亮显选择集
  42.            (setq dis (getdist "\n延伸长度: "))
  43.       )
  44.     (progn
  45.       (xdrx_begin);;标记程序开始
  46.       (xdrx_sysvar_push "osmode" "plinewid");;保存系统变量
  47.       (setvar "osmode" 0)
  48.       ;|;处理 Line
  49.       (setq ss1 (ssget "c" p1 p2 '((0 . "line"))))
  50.       (xdrx_setmark)
  51.       (vl-cmdf ".pline" "m" ss1 "" "y" "")
  52.       (setq ss (xdrx_PickSet_Union ss (xdrx_getss)))
  53.       |;
  54.       (xdrx_setsstodb ss 0);;选择集放进内部数据库
  55.       (while (setq e (xdrx_getentdata 0))
  56.         (if (not (xdrx_polyline_hasBulges e));;判断是否含有圆弧
  57.           (progn
  58.             (setq ptl  ($XDLSP_PLine_Vertex e);;获取多义线的顶点表
  59.                   pw   (xdrx_polyline_getConstantWidth e);;获取多义线的全局宽度
  60.                   ptl1 (mapcar '(lambda (x) ($ea_ptinbox x p1 p2)) ptl);;判断多义线的顶点是否在选择的Box内
  61.                   ptl0 (apply;;重新构造一个表,在Box内的点变为延伸后的两点,中间以 T 分隔,最后变为一个
  62.                          'append;;已 T 分隔的数段多义线的顶点表
  63.                          (mapcar
  64.                            '(lambda (x y / pos)
  65.                               (if (= x T)
  66.                                 (progn
  67.                                   (setq pos (vl-position y ptl))
  68.                                   (cond
  69.                                     ((= pos 0)
  70.                                      (list (polar y (angle y (car ptl)) dis)
  71.                                      )
  72.                                     )
  73.                                     ((= pos (1- (length ptl)))
  74.                                      (list (polar
  75.                                              y
  76.                                              (angle (cadr (reverse ptl))
  77.                                                     (last ptl)
  78.                                              )
  79.                                              dis
  80.                                            )
  81.                                      )
  82.                                     )
  83.                                     (t
  84.                                      (list
  85.                                        (polar y
  86.                                               (angle (nth (1- pos) ptl) y)
  87.                                               dis
  88.                                        )
  89.                                        T
  90.                                        (polar y
  91.                                               (angle (nth (1+ pos) ptl) y)
  92.                                               dis
  93.                                        )
  94.                                      )
  95.                                     )
  96.                                   )
  97.                                 )
  98.                                 (list y)
  99.                               )
  100.                             )
  101.                            ptl1
  102.                            ptl
  103.                          )
  104.                        )
  105.             )
  106.             (setq tf t)
  107.             (while tf
  108.               (setq nt (vl-position T ptl0))
  109.               (if nt
  110.                 (setq pl ($ea_list1 ptl0 0 (1- nt)))
  111.                 (progn
  112.                   (setq pl ptl0)
  113.                   (setq tf nil)
  114.                 )
  115.               )
  116.               (setvar "plinewid" pw)
  117.               ($xdlsp_draw_pline pl nil);;以点表绘制多义线

  118.               (if nt
  119.                 (setq ptl0 ($ea_list2 ptl0 (1+ nt)))
  120.               )
  121.               (setq pl nil
  122.                     nt nil
  123.               )
  124.             )
  125.             (xdrx_entity_delete e);;删除多义线
  126.             (mapcar 'set
  127.                     '(ptl ptl0 ptl1)
  128.                     '(nil nil nil)
  129.             )
  130.           )
  131.         )
  132.       )
  133.       (xdrx_sysvar_pop);;恢复系统变量
  134.       (xdrx_end);;程序结束
  135.       (princ)
  136.     )
  137.   )
  138.   (princ)
  139. )

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

使用道具 举报

发表于 2003-9-13 10:45:35 | 显示全部楼层
谢谢, 太多的xdrx_函数, 只能"断章取义"了, 我琢磨琢磨再说.
延伸后再变成多义线, 那多义线在延伸点的 "顶点" 不就不是一个了? 有点不太明白, 有这样的多义线吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-9-13 12:15:29 | 显示全部楼层
最初由 lsjjm 发布
[B]谢谢, 太多的xdrx_函数, 只能"断章取义"了, 我琢磨琢磨再说.
延伸后再变成多义线, 那多义线在延伸点的 "顶点" 不就不是一个了? 有点不太明白, 有这样的多义线吗? [/B]

程序中的 api 函数用 Lisp/Vlisp 替换的话要增加很多代码,当然了你用纯Lisp完成上面的程序也就体会到 XDRX_API 的妙处。

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-20 12:23 , Processed in 0.224055 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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