xj6019 发表于 2020-10-31 18:11:12

start4444 发表于 2020-10-30 23:14
其实很简单,一般选对象都是想提取对象图元名,entsel是单选个体,ssget是选集,选集的话要多一步提取个 ...

再请教一下centsel这个函数是不是不能按照你这个法改呀
我直接用你的那个套上
(setq ent(ssname (ssget ":S" '((0 . "DIMENSION"))) 0))
和套到我手里的那个代码上
(or(setq ent(ssname(ssget "i"'((0 . "DIMENSION")))0)) (and(princ "\n選擇要拆分的尺寸")(setq ent(ssname(ssget ":S" '((0 . "DIMENSION")))0))))

这两种方式都不行呢,你再帮我看一下行吗,看看应该怎么改呀。
我把那个DDR等分代码,贴到下面,见下一楼,你整体看一下,那个代码也是你以前帮我改的。
看看怎么也改成可以先选择,再执行,这样我把几个代码再组合起来就完美了,

xj6019 发表于 2020-10-31 18:12:08

本帖最后由 xj6019 于 2020-10-31 18:13 编辑

start4444 发表于 2020-10-30 23:14
其实很简单,一般选对象都是想提取对象图元名,entsel是单选个体,ssget是选集,选集的话要多一步提取个 ...
这个是整体的代码,麻烦你再帮我看看,谢谢了。
(vl-load-com)
(defun c:ddr (/ n x ent entL p2 p3 px1 px2 py1 py2 ptdd xl sa pt0 ppt ptdd)
(command "Selectioncycling" "0");ctrl/w關閉
      (setvar "cmdecho" 0)
      (command "undo" "be")
      (setq entL '())
      (while
                (if
                ;(setq ent (centsel "\n>>>選擇要拆分的尺寸 或 <按 ESC 退出>:" "DIMENSION")) 这个是原始可用的
      (setq ent(ssname (ssget ":S" '((0 . "DIMENSION"))) 0))   这样改了不行       
      (or(setq ent(ssname(ssget "i"'((0 . "DIMENSION")))0)) (and(princ "\n選擇要拆分的尺寸")(setq ent(ssname(ssget ":S" '((0 . "DIMENSION")))0))))      这样改了也不行
                        (progn
                              (setq x (entget ent)
                                        entL (cons ent entL)
          p2 (dxfxj 13 x)
          p3 (dxfxj 14 x)
          px1 (list (car p2) (/ (+ (cadr p2)(cadr p3)) 2.0))
          px2 (list (car p3) (/ (+ (cadr p2)(cadr p3)) 2.0))
          py1 (list (/ (+ (car p2)(car p3)) 2.0) (cadr p2))
          py2 (list (/ (+ (car p2)(car p3)) 2.0) (cadr p3))
          ptdd (list p2 p3)
          XL (entget (dxfxj -2 (tblsearch "block" (dxfxj 2 x))))
          SA (abs (sin (angle (dxfxj 10 xl) (dxfxj 11 xl)))))
                              (while (setq pt0 (getpoint "\n>>>左鍵点取拆分点 或 <右鍵選擇其他尺寸>:"))
                                        (command ".copy" ent "" "0,0" "@")
                                        (setq entL (cons (entlast) entL))
                                        (cond
                                                ((equal SA 1 1e-6) ;;水平
                                                      (setq ptdd (cons pt0 ptdd)
                                                                ppt (Lsort ptdd 0))
                                                )
                                                ((equal SA 0 1e-6) ;;垂直
                                                      (setq ptdd (cons pt0 ptdd)
                ppt (Lsort ptdd 1))
                                                )
                                                (t (setq ptdd (cons (ptper pt0 p2 p3) ptdd)
                                                               ppt (Lsort ptdd 2)))
                                        )
                                        (setq ppL (mapcar 'list ppt (cdr ppt))
                                                n 0)
                                        (repeat (length ppL)
                                                (setq xf (entget (nth n entL))
                                                      nxf (subst (cons 13 (car(nth n ppL)))(assoc 13 xf) xf)
                                                      wxf (subst (cons 14 (cadr (nth n ppL)))(assoc 14 nxf) nxf)
                                                      n (1+ n))
                                                (entmod wxf)                                                                                       
                                        )
                              ))
                        (princ "\n退出")
                ))
(command "undo" "e" ) (setvar "cmdecho" 1 )
(princ)
)

start4444 发表于 2020-10-31 18:57:00

ssget要放最前面才能先选对象

xj6019 发表于 2020-10-31 21:53:04

start4444 发表于 2020-10-31 18:57
ssget要放最前面才能先选对象

完美,漂亮,又完美解决了一个愿望,非常感谢!!
页: 1 [2]
查看完整版本: 求一个标注能断开的代码