j_spawn_h 发表于 2022-7-6 07:07:14

多行

有人能帮我吗。如果我使用ssget选择多行。如何让它知道哪一行是选择的第一行和最后一行?有Lisp程序的人已经在这样做了吗?我有检测点的代码,只需要知道确定第一个和最后一个的代码。

Tharwat 发表于 2022-7-6 07:19:42

例如
 

(if (setq ss (ssget '((0 . "LINE"))))
(progn
   (setq first-line (ssname ss 0))
   (setq last-line (ssname ss (1- (sslength ss))))
   )
)

j_spawn_h 发表于 2022-7-6 07:29:14

谢谢塔瓦。这是我要求的,但似乎我没有我想的那么好。我找不到第一条线的中点。你能给我一个建议或帮助吗。以下是我试图做的。
 
(defun c:matt (/)
(setq ss (ssget "_:L" '((0 . "LINE"))))

(setq first-line (ssname ss 0))
(setq last-line (ssname ss (1- (sslength ss))))
(command "select" last-line "")
(setq ed (entget en))
         (setq p10 (cdr (assoc 10 ed)))
         (setq p11 (cdr (assoc 11 ed)))
         (setq mpt (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11))
         (setq d2d (distance (cdr (reverse p10)) (cdr (reverse p11))))
         (setq d1d (/ d2d 12.))

(command "_dimlinear" last-line "-mid")


)

Tharwat 发表于 2022-7-6 07:36:48

 
不客气。。
 
看看这个。。。
 

(if (setq ss (ssget '((0 . "LINE"))))
(progn
   (setq first-line (ssname ss 0))
   (setq mid-point (mapcar '(lambda (q p) (/ (+ q p) 2.))
                           (cdr (assoc 10 (entget first-line)))
                           (cdr (assoc 11 (entget first-line)))
                   )
   )
)
)

marko_ribar 发表于 2022-7-6 07:40:33

抱歉打扰了,但是(ssname(ssget“_X”)0等同于(entlast),因此如果您想要上次创建的对象,可以使用索引0,如果您想要首次使用:((sslength(ssget))1)作为ssname函数中的索引。。。
 
M、 R。

Lee Mac 发表于 2022-7-6 07:48:50

 
如果您在一个选择中的一组行上打开窗口,您将什么分类为选择中的“第一个”和“最后一个”?
离窗户边缘最近的那条线?
x/y/z坐标最低/最高的线?
在数据库中按顺序排列的行?
 
当使用选择模式字符串而不是扫描整个数据库(“U X”模式)时,不能依赖选择集中图元的顺序-“U X”模式将按图元在图形数据库中的显示顺序检索图元,即按图元在图形中的创建顺序。

BIGAL 发表于 2022-7-6 07:58:09

关于数据库顺序的回答很好,还记得最后一个实际上是第一个,非常确定选择集是通过将实体推到列表中来创建的,所以有时需要使用反向选项来获得列表中的实际数字0(是0不是1),这样有时就更容易不必向后思考。

j_spawn_h 发表于 2022-7-6 08:04:58

这是一个很好的观点,李,但现在不管谁是第一个或最后一个。很高兴知道我是否需要设置某些行。你们中有谁知道在lisp中读一篇关于改变维度的文章吗。

BIGAL 发表于 2022-7-6 08:12:50

J_spawn_h可能最好开始一个新的线程,并详细阐述有关暗淡的东西,这是你行问题的一部分吗?自动标注尺寸?如果发布dwg,则图像中的尺寸仅通过拾取两个点来完成。
 
页: [1]
查看完整版本: 多行