tender138 发表于 2018-7-12 10:10:09

如图,请教各位老师多边形如何单向缩放?

请教各位老师多边形如何单向缩放?

masterlong 发表于 2018-7-12 10:37:07

做成块以后改x或y比例

tender138 发表于 2018-7-12 10:51:29

谢谢!请问具体怎么操作?

masterlong 发表于 2018-7-12 20:12:18

你应该是会lsp的
结合command命令
实现要求应该不难吧

tender138 发表于 2018-7-12 22:08:41

非常感谢各位,东拼西凑如下,请各位老师指正,谢谢!!!

(defun c:tt ( / Vosmode ent pts pt1 pt2 cpt1 cpt2 clen xlen bl blna ss tmp)
(setq Vosmode (getvar "osmode"))
(setq ent (entsel "\n多边形底边:"))
(setq cpt1 (getpoint "\n多边形顶点:"))
(if (= PoGaoDu nil) (setq PoGaoDu 2000))
(setq tmp (getint (strcat "\n抬起高度(mm)<" (itoa PoGaoDu) ">:")))
(if tmp (setq PoGaoDu tmp) (setq PoGaoDu PoGaoDu))
(setq pts (selpt ent))
(setq pt1 (car pts))
(setq pt2 (cadr pts))
(setq cpt2 (perPoint cpt1 pt1 pt2))
(setq clen (distance cpt1 cpt2))
(setq xlen (sqrt (+ (* clen clen) (* PoGaoDu PoGaoDu))))
(setq bl (/ xlen clen))
(command ".UNDO" "BE")
(if ent
    (progn
      (setvar "osmode" 0)
      (setq blna "BlockName")
      (if (= (tblsearch "BLOCK" blna) nil)
        (command "-block" blna pt1 ent "")
        (command "-block" blna "Y" pt1 ent "")
      )
    )
)
(command "-insert" blna pt1 "" "" "")
(setq ent (entlast))
(if (= (fix (car pt1)) (fix (car pt2)))
    (entmod (append (entget ent) (list (cons 41 bl))))
    (entmod (append (entget ent) (list (cons 42 bl))))
)
(command "explode" ent "")
(setq ss (ssget "p"))
(command "._Pedit" "M" SS "" "J" "1" "")
(command "_.chprop" (entlast) "" "_la" (getvar "clayer") "_c"(getvar "cecolor") "")
(if (= (fix (car pt1)) (fix (car pt2)))
    (progn
      (if (> (fix (car pt1)) (fix (car cpt1)))
        (command "_move" (entlast) "" pt1 (strcat "@" (rtos (- xlen clen) 2 5) ",0"))
        (command "_move" (entlast) "" pt1 (strcat "@" (rtos (- clen xlen) 2 5) ",0"))
      )
    )
    (progn
      (if (> (fix (cadr pt1)) (fix (cadr cpt1)))
        (command "_move" (entlast) "" pt1 (strcat "@0," (rtos (- xlen clen) 2 5)))
        (command "_move" (entlast) "" pt1 (strcat "@0," (rtos (- clen xlen) 2 5)))
      )
    )
)
(command ".UNDO" "E")
(if Vosmode (setvar "osmode" Vosmode))
(princ)
)

tender138 发表于 2018-7-12 22:09:32

需要这么复杂吗?

masterlong 发表于 2018-7-12 22:45:29

跟我想像的有点不太一样啊

masterlong 发表于 2018-7-12 22:48:50

做块插块缩放改比例炸开应该没几句代码才对

tender138 发表于 2018-7-13 07:06:26

masterlong 发表于 2018-7-12 22:48
做块插块缩放改比例炸开应该没几句代码才对

这就是高手跟菜鸟的区别:'(

masterlong 发表于 2018-7-13 10:29:33

其实你的程序也不差了
缩放倍数是计算得来的
最后的移动也是计算出来的
因为不知道你最终要求的结果是啥
所以没法对这两部分点评

下面代码仅供参考
(defun c:tt()
        (if (and
                                (setq pt (getpoint))
                                (setq ss (ssget))
               )
               (progn
                               (setvar "cmdecho" 0)
                               (setvar "qaflags" 0)
                               (command "undo" "g")
                               (setq blknm (menucmd "M=$(edtime,$(getvar,date),自动块__YYMODDhhmmss)"))
                               (command "block" blknm "non" pt ss "")
                               (command "insert" blknm "non" pt 1 1 0)
                               (setq ent (entlast))
                               (command "scale" ent "" "non" pt "r" "non" pt pause pause)
                               (entmod (list (cons -1 ent)(cons 41 1)))
                               (entupd ent)
                               (command "explode" ent)
                               (setq ss (ssget "p"))
                               (command "pedit" "m" ss "" "y" "j" 1 "")
                               (command "undo" "e")
               )
        )
(princ)
)
页: [1] 2
查看完整版本: 如图,请教各位老师多边形如何单向缩放?