明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4269|回复: 22

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

[复制链接]
发表于 2013-12-27 14:21 | 显示全部楼层 |阅读模式
本帖最后由 434939575 于 2013-12-27 14:26 编辑
  1. (defun c:tt();批量把图元旋转至水平、有问题、                                    
  2.     (princ " \n 点选图元 ")
  3. (setvar "CMDECHO" 0);_关闭命令提示
  4. (Setvar "osmode" 0);_关闭捕捉
  5. (Setq osmode_bak (getvar "osmode"));_记录捕捉
  6.   (if (setq ss (ssget))
  7.     (progn
  8.       (setq i 0)
  9.       (repeat (sslength ss)
  10. ;;;;;;;;;;;;;;;;;
  11.   (setq ss0  (ssname ss i)
  12.         en   (entget ss0)
  13.                i (1+ i)
  14.           )
  15. ;-----------------------------------------------------------------------------------------------------------------------
  16. (progn
  17. (setq  pt1   (cdr  (nth  14  en)));调取pline的0点坐标。
  18. (setq  pt2   (cdr  (nth  18  en)));调取pline第1点坐标。
  19. (setq  ang  (angle  pt1 pt2 ))
  20. ;;;;--------------pline的0点坐标--与1点坐标的角度------
  21. (setq  ang-ok (angtos ang 0 4)  )                    
  22. (setq  angint(atof  ang-ok));转弧度数据为实数角度值
  23. ;********************************************************
  24.   ;;;;--------------pline的0点坐标--与1点坐标的中点------
  25. (setq  long  (distance  pt1  pt2 ));两点间距离
  26.   (setq   pt12-cen  (polar   pt1  ang (/  long  2 )));中点
  27.   ;*******************************************************
  28. (command "ROTATE" ss "" pt12-cen (- angint    ) "");
  29.    (and o_cmd (setvar "CMDECHO" o_cmd));恢复更改的变量值s
  30. (and o_os (setvar "osmode" o_os));恢复更改的变量值
  31.   (princ)
  32. );progn
  33. ;---------------------------------------------------------------------------------------------------------------------------------
  34.       )  ;repeat
  35.     );progn        
  36. );if


  37.   

  38. )


















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-5-4 10:38 | 显示全部楼层
顶出高版本的来
 楼主| 发表于 2013-12-27 14:27 | 显示全部楼层
自己顶下。因为比较懒惰。所以想批量处理哈
发表于 2013-12-27 15:52 | 显示全部楼层
  1. ;批量把图元旋转至水平、有问题、
  2. ;简单修改 2013-12-27 15:49:33
  3. ;modfiy by edata@mjtd
  4. (defun c:tt(/ ANG ANG-OK ANGINT EN I LONG OSMODE_BAK O_CMD O_OS PT1 PT12-CEN PT2 PTLST SS SS0 SS2)                             
  5.     (princ " \n 点选图元 ")
  6. (setvar "CMDECHO" 0);_关闭命令提示
  7. (Setvar "osmode" 0);_关闭捕捉
  8. (Setq osmode_bak (getvar "osmode"));_记录捕捉
  9.   (if (setq ss (ssget))
  10.     (progn
  11.       (setq i 0)
  12.       (repeat (sslength ss)
  13. ;;;;;;;;;;;;;;;;;
  14.   (setq ss0  (ssname ss i)
  15.         en   (entget ss0)
  16.                i (1+ i)
  17.           )
  18. ;-----------------------------------------------------------------------------------------------------------------------
  19. (if (and (= (cdr(assoc 8 en)) "layer1" ) ;图层限制=layer1
  20.    (= (cdr(assoc 0 en)) "LWPOLYLINE" );图元限制=LWPOLYLINE
  21.    (= (cdr(assoc 70 en)) 1 );闭合限制=1
  22.    )
  23.   (progn
  24. (setq  pt1   (cdr  (nth  14  en)));调取pline的0点坐标。
  25. (setq  pt2   (cdr  (nth  18  en)));调取pline第1点坐标。
  26. (setq  ang  (angle  pt1 pt2 ))
  27. ;;;;--------------pline的0点坐标--与1点坐标的角度------
  28. (setq  ang-ok (angtos ang 0 4)  )                    
  29. (setq  angint(atof  ang-ok));转弧度数据为实数角度值
  30. ;********************************************************
  31.   ;;;;--------------pline的0点坐标--与1点坐标的中点------
  32. (setq  long  (distance  pt1  pt2 ));两点间距离
  33.   (setq   pt12-cen  (polar   pt1  ang (/  long  2 )));中点
  34.   ;*******************************************************
  35. (setq ptlst(vertexs ss0))
  36. (command "_.zoom" "a")
  37. (and ptlst (setq ss2(ssget "cp" ptlst)))
  38. (command "_.zoom" "p")
  39. (command "_.ROTATE" ss2 "" pt12-cen (- angint    ) "");
  40.    (and o_cmd (setvar "CMDECHO" o_cmd));恢复更改的变量值s
  41. (and o_os (setvar "osmode" o_os));恢复更改的变量值
  42.   (princ)
  43. );progn
  44.   )
  45. ;---------------------------------------------------------------------------------------------------------------------------------
  46.       )  ;repeat
  47.     );progn        
  48. );if
  49. )
  50. ;;返回多段线顶点表
  51. (defun vertexs (ename / plist pp n)        
  52.   (setq obj (vlax-ename->vla-object ename))
  53.   (setq plist (vlax-safearray->list
  54.   (vlax-variant-value
  55.     (vla-get-coordinates obj))))
  56.   (setq n 0)
  57.   (repeat (/ (length plist) 2)
  58.     (setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)))))
  59.     (setq n (+ n 2))
  60.   )
  61.   pp
  62. )
发表于 2013-12-27 16:08 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2013-12-27 17:49 | 显示全部楼层
朋友们出手真快。多谢,好像edata的不能运行。
发表于 2013-12-27 18:39 | 显示全部楼层
  1. ;; 需要e派工具箱(XCAD)的支持:http://yunpan.cn/QXQKsW9gAPmpF
  2. ;; 旋转测试
  3. (defun c:tt ()
  4.   (xyp-CMDLA0)
  5.   (setq i -1)
  6.   (if (setq ss (ssget '((0 . "LWPOLYLINE") (8 . "layer1"))))
  7.     (while (setq s1 (ssname ss (setq i (1+ i))))
  8.       (setq ptn        (xyp-get-Vertexs s1 0)
  9.             p1        (car ptn)
  10.             ang        (xyp-r2d (angle (cadr ptn) p1))
  11.             ss1        (ssadd s1 (ssget "wp" ptn))
  12.       )
  13.       (xyp-SubUpd ss1 8 (xyp-DXF 8 s1))
  14.       (xyp-rotate ss1 p1 ang)
  15.     )
  16.   )
  17.   (xyp-CMDLA1)
  18. )

评分

参与人数 1明经币 +1 收起 理由
edata + 1 很给力!

查看全部评分

 楼主| 发表于 2013-12-27 19:10 | 显示全部楼层
感谢院长再次光临!
发表于 2013-12-27 19:16 | 显示全部楼层
434939575 发表于 2013-12-27 17:49
朋友们出手真快。多谢,好像edata的不能运行。

估计是vl组件未加载
程序中加一句即可
(vl-load-com)
发表于 2014-6-19 15:32 | 显示全部楼层
学习思路一
发表于 2014-6-19 16:01 | 显示全部楼层
edata 发表于 2013-12-27 15:52

E大,怎么用了没有反应?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-13 14:28 , Processed in 0.166694 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表