乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 49|回复: 9

[编程交流] 在上的每个夹点处放置一个挡块

[复制链接]

96

主题

322

帖子

234

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
474
发表于 2022-7-5 18:39:48 | 显示全部楼层 |阅读模式
该代码在pline的每个夹点中添加了圆圈:
  1. (defun c:foo ()
  2.    (vl-load-com)
  3.    (setq *model-space* (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
  4.    (setq obj (vlax-ename->vla-object (car (entsel))))
  5.    (setq c (vlax-get obj "Coordinates") i 0)
  6.    (repeat (/ (length c) 2)
  7.   (setq x (nth i c) y (nth (1+ i) c))
  8.   (vla-addcircle *model-space* (vlax-3d-point (list x y 0.0)) 3.0)
  9.   (setq i (+ i 2))
  10.    )
  11.    (princ)
  12. )

我怎样才能更改放置bloke而不是circle的代码???
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:52:08 | 显示全部楼层
(命令“-insert”您的块(vlax-3d-point(list x y 0.0))1 1 0)而不是线(vla addcircle….)?
 
如果你有2d点,(列表x y)可能就足够了
 
 
gr.Rlx
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 18:58:07 | 显示全部楼层
如果您是指法线块(非属性化)。
 
  1. (defun c:test (/ isattributed blk s i)
  2. ;;        Tharwat 6/9/2015        ;;
  3. (defun isattributed (doc name / yes)
  4.    (vlax-for o (vla-item (vla-get-blocks doc) name)
  5.      (if (eq "AcDbAttributeDefinition" (vla-get-objectname o))
  6.        (setq yes t)
  7.      )
  8.    )
  9.    yes
  10. )
  11. (if (and (/= ""
  12.               (setq blk
  13.                      (getstring
  14.                        t
  15.                        "\nSpecify Block name to place at each coordinates of a LWPolyline :"
  16.                      )
  17.               )
  18.           )
  19.           (tblsearch "BLOCK" blk)
  20.           (if (not (isattributed
  21.                      (vla-get-activedocument (vlax-get-acad-object))
  22.                      blk
  23.                    )
  24.               )
  25.             t
  26.             (progn (princ "\nBlock name is attributed !!") nil)
  27.           )
  28.           (setq s (ssget '((0 . "LWPOLYLINE"))))
  29.      )
  30.    (repeat (setq i (sslength s))
  31.      (foreach p (entget (ssname s (setq i (1- i))))
  32.        (if (eq (car p) 10)
  33.          (entmake (list '(0 . "INSERT") p (cons 2 blk)))
  34.        )
  35.      )
  36.    )
  37.    (princ
  38.      "\nBlock name is not found or selection is not a LWPolyline "
  39.    )
  40. )
  41. (princ)
  42. )(vl-load-com)
回复

使用道具 举报

96

主题

322

帖子

234

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
474
发表于 2022-7-5 18:59:59 | 显示全部楼层
Tharwat你是Greattttttttttttt
所以thanx非常好
若要询问运行代码中块的名称,如何修改??
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:12:48 | 显示全部楼层
第1个(setq blk(getstring“\n输入块名称”))
 
第二个Rlx(命令”-插入“blokc”(vlax-3d-point(list x y 0.0))1 1 0)将出错,因为命令不喜欢vlax-3d-point,只保留为(list x y)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 19:16:32 | 显示全部楼层
 
我更新了上面的代码。
回复

使用道具 举报

96

主题

322

帖子

234

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
474
发表于 2022-7-5 19:25:30 | 显示全部楼层
Thanxxxxxxxxxxxx对Tharwat和Bigal来说太多了
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 19:27:38 | 显示全部楼层
没问题。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:35:42 | 显示全部楼层
FWIW,代码可以压缩为:
  1. (defun c:test ( / blk def enx idx sel vtx )
  2.    (while
  3.        (and (/= "" (setq blk (getstring t "\nBlock name: ")))
  4.            (cond
  5.                (   (null (setq def (tblsearch "block" blk)))
  6.                    (princ "\nBlock not found.")
  7.                )
  8.                (   (= 2 (logand 2 (cdr (assoc 70 def))))
  9.                    (princ "\nBlock is attributed.")
  10.                )
  11.            )
  12.        )
  13.    )
  14.    (if (and (/= "" blk) (setq sel (ssget '((0 . "LWPOLYLINE")))))
  15.        (repeat (setq idx (sslength sel))
  16.            (setq enx (entget (ssname sel (setq idx (1- idx)))))
  17.            (while (setq vtx (assoc 10 enx))
  18.                (entmake (list '(0 . "INSERT") (cons 2 blk) vtx))
  19.                (setq enx (cdr (member vtx enx)))
  20.            )
  21.        )
  22.    )
  23.    (princ)
  24. )
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 19:42:34 | 显示全部楼层
 
 
 
[列表]
  • 你说得对,我太快了,因为我在决定正常插入和vla插入块之间,并决定正常插入是最简单的(很晚了,正要睡觉……)下次尽量保持清醒
    [/列表]
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-12 13:18 , Processed in 0.806200 second(s), 72 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表