434939575 发表于 2013-12-27 14:21:07

一个旋转图元底边至水平。不能批量,望朋友赐教!

本帖最后由 434939575 于 2013-12-27 14:26 编辑

(defun c:tt();批量把图元旋转至水平、有问题、                                    
    (princ " \n 点选图元 ")
(setvar "CMDECHO" 0);_关闭命令提示
(Setvar "osmode" 0);_关闭捕捉
(Setq osmode_bak (getvar "osmode"));_记录捕捉
(if (setq ss (ssget))
    (progn
      (setq i 0)
      (repeat (sslength ss)
;;;;;;;;;;;;;;;;;
(setq ss0(ssname ss i)
      en   (entget ss0)
               i (1+ i)
          )
;-----------------------------------------------------------------------------------------------------------------------
(progn
(setqpt1   (cdr(nth14en)));调取pline的0点坐标。
(setqpt2   (cdr(nth18en)));调取pline第1点坐标。
(setqang(anglept1 pt2 ))
;;;;--------------pline的0点坐标--与1点坐标的角度------
(setqang-ok (angtos ang 0 4))                  
(setqangint(atofang-ok));转弧度数据为实数角度值
;********************************************************
;;;;--------------pline的0点坐标--与1点坐标的中点------
(setqlong(distancept1pt2 ));两点间距离
(setq   pt12-cen(polar   pt1ang (/long2 )));中点
;*******************************************************
(command "ROTATE" ss "" pt12-cen (- angint    ) "");
   (and o_cmd (setvar "CMDECHO" o_cmd));恢复更改的变量值s
(and o_os (setvar "osmode" o_os));恢复更改的变量值
(princ)
);progn
;---------------------------------------------------------------------------------------------------------------------------------
      );repeat
    );progn      
);if




)


















bai2000 发表于 2019-5-4 10:38:44

顶出高版本的来

434939575 发表于 2013-12-27 14:27:32

自己顶下。因为比较懒惰。所以想批量处理哈

edata 发表于 2013-12-27 15:52:35

;批量把图元旋转至水平、有问题、
;简单修改 2013-12-27 15:49:33
;modfiy by edata@mjtd
(defun c:tt(/ ANG ANG-OK ANGINT EN I LONG OSMODE_BAK O_CMD O_OS PT1 PT12-CEN PT2 PTLST SS SS0 SS2)                           
    (princ " \n 点选图元 ")
(setvar "CMDECHO" 0);_关闭命令提示
(Setvar "osmode" 0);_关闭捕捉
(Setq osmode_bak (getvar "osmode"));_记录捕捉
(if (setq ss (ssget))
    (progn
      (setq i 0)
      (repeat (sslength ss)
;;;;;;;;;;;;;;;;;
(setq ss0(ssname ss i)
      en   (entget ss0)
               i (1+ i)
          )
;-----------------------------------------------------------------------------------------------------------------------
(if (and (= (cdr(assoc 8 en)) "layer1" ) ;图层限制=layer1
   (= (cdr(assoc 0 en)) "LWPOLYLINE" );图元限制=LWPOLYLINE
   (= (cdr(assoc 70 en)) 1 );闭合限制=1
   )
(progn
(setqpt1   (cdr(nth14en)));调取pline的0点坐标。
(setqpt2   (cdr(nth18en)));调取pline第1点坐标。
(setqang(anglept1 pt2 ))
;;;;--------------pline的0点坐标--与1点坐标的角度------
(setqang-ok (angtos ang 0 4))                  
(setqangint(atofang-ok));转弧度数据为实数角度值
;********************************************************
;;;;--------------pline的0点坐标--与1点坐标的中点------
(setqlong(distancept1pt2 ));两点间距离
(setq   pt12-cen(polar   pt1ang (/long2 )));中点
;*******************************************************
(setq ptlst(vertexs ss0))
(command "_.zoom" "a")
(and ptlst (setq ss2(ssget "cp" ptlst)))
(command "_.zoom" "p")
(command "_.ROTATE" ss2 "" pt12-cen (- angint    ) "");
   (and o_cmd (setvar "CMDECHO" o_cmd));恢复更改的变量值s
(and o_os (setvar "osmode" o_os));恢复更改的变量值
(princ)
);progn
)
;---------------------------------------------------------------------------------------------------------------------------------
      );repeat
    );progn      
);if
)
;;返回多段线顶点表
(defun vertexs (ename / plist pp n)      
(setq obj (vlax-ename->vla-object ename))
(setq plist (vlax-safearray->list
(vlax-variant-value
    (vla-get-coordinates obj))))
(setq n 0)
(repeat (/ (length plist) 2)
    (setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)))))
    (setq n (+ n 2))
)
pp
)

cable2004 发表于 2013-12-27 16:08:09

434939575 发表于 2013-12-27 17:49:45

朋友们出手真快。多谢,好像edata的不能运行。

xyp1964 发表于 2013-12-27 18:39:58

;; 需要e派工具箱(XCAD)的支持:http://yunpan.cn/QXQKsW9gAPmpF
;; 旋转测试
(defun c:tt ()
(xyp-CMDLA0)
(setq i -1)
(if (setq ss (ssget '((0 . "LWPOLYLINE") (8 . "layer1"))))
    (while (setq s1 (ssname ss (setq i (1+ i))))
      (setq ptn        (xyp-get-Vertexs s1 0)
          p1        (car ptn)
          ang        (xyp-r2d (angle (cadr ptn) p1))
          ss1        (ssadd s1 (ssget "wp" ptn))
      )
      (xyp-SubUpd ss1 8 (xyp-DXF 8 s1))
      (xyp-rotate ss1 p1 ang)
    )
)
(xyp-CMDLA1)
)

434939575 发表于 2013-12-27 19:10:41

感谢院长再次光临!

edata 发表于 2013-12-27 19:16:38

434939575 发表于 2013-12-27 17:49 static/image/common/back.gif
朋友们出手真快。多谢,好像edata的不能运行。

估计是vl组件未加载
程序中加一句即可
(vl-load-com)

qyming 发表于 2014-6-19 15:32:05

学习思路一

lucas_3333 发表于 2014-6-19 16:01:30

edata 发表于 2013-12-27 15:52 static/image/common/back.gif


E大,怎么用了没有反应?
页: [1] 2 3
查看完整版本: 一个旋转图元底边至水平。不能批量,望朋友赐教!