samifox 发表于 2022-7-6 06:23:12

使用lisp扩展线

你好
我有一个交叉点钢筋线,我需要在其中延伸。我痛苦地通过“扩展”所有交点来重复这项任务
如何扩展所有选定的线?我如何限制投影?
我需要我的例行程序来做以下事情
 
[列表=1]
[*]拾取闭合多段线
[*]向内偏移3个单位
[*]将偏移线移动到名为“CONS”的层
[*]将多段线分解为直线
[*]扩展所有线(仅考虑“CONS”中的线和/或投影不超过x个单位)
[/列表]
在图中,我从右向左走了几步
 
谢谢
谢伊

pBe 发表于 2022-7-6 06:28:11

这只是一个简单的数学问题。
 
可以使用钢筋和混凝土之间的间隙以及混凝土板的宽度来创建线。

samifox 发表于 2022-7-6 06:32:07

 
我不确定我是否在跟踪你,
 
你的意思是用polar()画图?如果是这样的话,我该如何判断何时延长和何时不延长?

pBe 发表于 2022-7-6 06:33:04

这就是问题所在。您不需要延伸,而是“绘制”一条线,参考柱脚线的左下角和右上角。
 
伪代码:
选择外部多段线
选择内部多边形
获取板的宽度
将外部多段线向内偏移3个单位
获取最后一条实体线的坐标
是的。。polar用于确定新线的点。

MSasu 发表于 2022-7-6 06:37:57

我相信你的素描是从右到左的,对吗?
您可能感兴趣的另一个功能是INTERS。

pBe 发表于 2022-7-6 06:39:23

 
不确定inters是如何在这里发挥作用的?你能用这种方法发布一个伪代码吗。
 
无论如何。。。我要走了,这是一个演示
 
(Defun c:demo ( / om pl pl2 dist ref mn mx h w a b c d)
(setq om (getvar 'osmode))
(if (and
       (setq pl(entsel "\nSelect Outer rim: "))
       (setq pl2 (entsel "\nSelect Inner rim: "))
       (setq dist (distance
                  (vlax-curve-getClosestPointTo (car pl) (Cadr pl))
                  (vlax-curve-getClosestPointTo (car pl2) (Cadr pl)))
       )
   )
(progn
       (command "_offset" 3 (Car pl) (Cadr pl2) "")
(vla-getboundingbox (setq e (vlax-ename->vla-object (entlast))) 'mn 'mx)
       (setq mn(vlax-safearray->list mn)
             mx(vlax-safearray->list mx)
             w (- (car mx) (car mn))
             h (- (cadr mx) (cadr mn))
          dist (- dist 6))
(foreach seg (list
                 (list (setq a (polar mn 0 dist)) (polar a (/ pi 2.0) h))
               (list (setq b (polar mn (/ pi 2.0) dist)) (polar b 0 w))
               (list (setq c (polar mx pi dist)) (polar c (* pi 1.5) h))
               (list (setq d (polar mx (* pi 1.5) dist)) (polar d pi w)))
          (entmakex (list (cons 0 "LINE")
                          (cons 10 (Car seg))
                          (cons 11 (Cadr seg))
                                 '(8 . "CONS")))
         )
       (vla-put-layer e "CONS")
       )
   )(princ)
)

MSasu 发表于 2022-7-6 06:44:02

很高兴!
考虑到以下草图中的符号:
 
 
(setq point1st (polar pointITL (* 0.5 pi) theGap)
   point3rd (polar pointITR (* 0.5 pi) theGap))

(setq point2nd (inters point1st point3rd pointETL pointEBL nil)
   point4th (inters point1st point3rd pointETR pointEBR nil))

pBe 发表于 2022-7-6 06:48:19

我现在明白了。
(inters point1st point3rd pointETL pointEBL nil)
 
好吧,我被说服了。
 
干杯MSasu

samifox 发表于 2022-7-6 06:50:53

PbE,您的代码仅适用于矩形,im在结构级解决方案之后
 
这是一个草图(也包括dwg)

 
我想在墙壁旁边提取钢筋副本,
如果我想办法收集顶点1和10,我可以提取柱的钢筋,
如果我收集顶点1和6,我可以为这部分墙生成钢筋
 
黄色圆圈是生成钢筋所需的坐标,这些钢筋无法提取为法线顶点m,如6,7,8,9的钢筋,为了提取它,我需要得到6和9的投影(正如MSasu给我的思考食物)
 
希望它有意义
有办法编码吗?
 
谢谢
谢伊
积分。图纸

pBe 发表于 2022-7-6 06:54:34

我想我很快就知道怎么做了。但这次您将编写代码:
 
下面是一个伪代码:
选择pline。
创建临时点[点图元]
通过一次选择两个“点”实体来查找点。
示例:基于图表
(同时。。。。。
在点1和10处选择2个点实体,将得到左下角和右上角的点[绘制线]
在点5和2处选择2个点实体将在左上角和右下角为您提供点[绘制线]
17 & 22, 17 & 21, 20 & 22.... [注意,这些数字并不代表实数点,仅用于讨论目的]
 
现在,第6、7、8和9点需要另一种方法。
如果所选点大于2,则表示全部四个点。。通过使用grread上下拖动指针,例程将“确定”下两个点的投影位置。。。
); while结束
 
删除创建的所有点图元。
 
现在,对于一种更“自动化”的方法,我需要就此回复您。我相信我能想出一些办法。。也许不是。
页: [1] 2
查看完整版本: 使用lisp扩展线