k1nger 发表于 2021-9-15 08:10:45

大家看看这程序得怎么写?

;;;编一个功能的程序
;;;创造动态图块选择集,获取选择集的基点坐标,图块的旋转角度,选择集图元的规格值
;;;如果角度是0 180,取坐标X值, 将所有坐标X(list)相减,得到一个值。将选择集图元移动x
;;;如果角度是90 270,取坐标y值, 将所有坐标y(list)相减,得到一个值。将选择集图元移动y
;;;下段代码功能,读取动态块的自定义属性!
;;;附件中附有动态块
(defun c:tt (/ obj pros proslst)
(setq obj (vlax-ename->vla-object (car (entsel))))
(setq Pros (vlax-invoke obj 'GetDynamicBlockProperties))
(setq      Proslst
         (mapcar
         '(lambda (X)
            (cons (vlax-get X 'PropertyName) (vlax-get X 'Value))
            )
         Pros
         )
)
(princ proslst)
(princ)
)



k1nger 发表于 2021-9-18 15:17:22

没有大神试试么,速度来了哈,自己顶一下

k1nger 发表于 2021-9-18 15:34:06

附上段院长的代码,自定义函数部分没有研究明白
defun c:tt () ;tt(动态块排版)
(xyp-Start)
(defun abc (s1 / ob dp a)
    (setq ob (vlax-ename->vla-object s1)
          dp (vla-getdynamicblockproperties ob)
          a(car (vlax-safearray->list (vlax-variant-value dp)))
          a(distof (vlax-get a 'Value))
    )
)
(if (setq ss (ssget '((0 . "insert"))))
    (progn
      (setq lst        (vl-sort (xyp-Ss2List ss)
                       '(lambda (x y) (< (car (xyp-9pt x 1)) (car (xyp-9pt y 1))))
                )
          p0        (xyp-DXF 10 (car lst))
      )
      (foreach s1 lst
        (xyp-move s1 (xyp-DXF 10 s1) p0)
        (setq p0 (xyp-Pt2X p0 (abc s1)))
      )
    )
)
(xyp-End)
)
页: [1]
查看完整版本: 大家看看这程序得怎么写?