CADWORKER 发表于 2022-7-5 16:49:07

在多个多边形上对齐块

大家好,
 
有什么方法可以一次性在不同长度、角度的多段线上对齐块。
我已附上样本文件供参考。。。该块可以是任何名称,大多为矩形或类似于dwg中的块。
 
谢谢
测验图纸

fan_zh 发表于 2022-7-5 16:54:07

注意,对齐是一个单独的功能,不要将“命令”功能放在前面。

Roy_043 发表于 2022-7-5 16:59:04

在样例文件中,块是对称的。如果不是这样,会发生什么?
如果pline有两个以上的顶点,会发生什么?
如果一段是弯曲的,会发生什么?
是否应修改现有的块参照(与“对齐”命令一样),还是由程序创建?
 
在我看来,如果块定义中对象的最大X坐标恰好为1,则更有意义。

CADWORKER 发表于 2022-7-5 17:02:59

 
我对你的问题的答复如下。
*我的方块都是对称的
*大多数情况下都是否定的,如果是的话,我会采取极端的做法
*没有曲线,只有两个顶点的直线或多段线
*使用当前选择的现有。

Grrr 发表于 2022-7-5 17:05:02

好的,在Roy提出了一些有用的问题之后,我们从这里开始:
 

(defun C:test ( / SS i e pts b enx )
(if
   (setq SS
   (ssget "_:L-I"
       '(
         (-4 . "<OR")
         (-4 . "<AND") (0 . "LINE") (-4 . "AND>")
         (-4 . "<AND") (0 . "LWPOLYLINE") (90 . 2) (70 . 0) (-4 . "AND>")
         (-4 . "OR>")
       )
   )
   )
   (repeat (setq i (sslength SS))
   (setq e (ssname SS (setq i (1- i))))
   (setq pts (list (vlax-curve-getStartPoint e) (vlax-curve-getEndPoint e)))
   (and
       (setq b (ssget "F" pts '((0 . "INSERT") (2 . "G-BIG"))))
       (setq b (ssname b 0))
       (setq enx (entget b))
       (setq enx (subst (cons 10 (apply 'mapcar (cons '(lambda (a b) (/ (+ a b) 2.)) pts))) (assoc 10 enx) enx))
       (setq enx (subst (cons 50 (apply 'angle pts)) (assoc 50 enx) enx))
       (entmod enx)
   )
   )
)
(princ)
);| defun |; (vl-load-com) (princ)

 
只需计算出块的比例。

BIGAL 发表于 2022-7-5 17:08:58

Grr研究了pline上点的角度的“一阶导数”,适用于曲线等。链测长度就是一个很好的例子。lsp。
PL.lsp上的链测长度

Grrr 发表于 2022-7-5 17:14:24

 
谢谢BIGAL,
这里面有很多有趣的东西。lsp。如果OP没有包括以下内容,我会使用它:

BIGAL 发表于 2022-7-5 17:17:29

Grr水晶球建议我另一个帖子请求想要曲线。很多时候你只会看到“哦,我能吃吗?”

CADWORKER 发表于 2022-7-5 17:20:57

 
谢谢GRR,我尝试了你的代码,但无法找出问题所在。。
选择后不进行任何插入,插入块时,直线和多段线保持不变。
 
非常感谢

Grrr 发表于 2022-7-5 17:24:18

 
你回答的时候要小心:
 
 
页: [1] 2
查看完整版本: 在多个多边形上对齐块