明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2070|回复: 7

[函数] 求助-求自动画两个面夹角及角平分线的lsp

[复制链接]
发表于 2011-7-9 17:06 | 显示全部楼层 |阅读模式
本帖最后由 feizheng 于 2011-7-9 17:14 编辑

各位大虾,我LSP还未入门,能看简单的,现在遇到一个东东,需要画两个三维面的夹角(图中红色线),并画角平分线(图中紫色线),

因为每次操作要好几个步骤(转UCS及画直线),而我有好多这样的面需要重复标的,所以求哪位能帮忙编个lsp,这样每次只需要选择四个点,相关的三条线就通过LSP来画。

先谢谢了。


本帖子中包含更多资源

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

x
发表于 2011-7-9 23:09 | 显示全部楼层
本帖最后由 ljpnb 于 2011-7-10 07:41 编辑

一直以来只处理二维的问题,对三维了解很少,程序也未作优化,对点的处理一定有更简单的方法.程序基本能实现要求.....

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-7-10 00:52 | 显示全部楼层
谢谢ljpnb,辛苦你了。

功能基本能实现了,可以画两条垂直于面的交线的直线了,但好像角平分线没有画。

还有就是运行这个lsp之前好像要把坐标改为世界坐标,否则直线会跑掉。

呵呵,比我想象中的程序长。

发表于 2011-7-10 07:41 | 显示全部楼层
feizheng 发表于 2011-7-10 00:52
谢谢ljpnb,辛苦你了。

功能基本能实现了,可以画两条垂直于面的交线的直线了,但好像角平分线没有画。

修改过了,你再试试....
 楼主| 发表于 2011-7-10 10:38 | 显示全部楼层
本帖最后由 feizheng 于 2011-7-10 10:50 编辑

谢谢,功能完全实现了,可以画角平分线了。试了一下,旋转坐标后也线不会跑了。


继续探讨,因组成两个面的不一定是直线,可能是多义线或多面网格,所以我之前的想法是利用直线上点来画:
1. 三点确定UCS,依次选1,2,3三个点 ,再以点1为端点,Y向为正向画直线。
2. 三点确定UCS,依次选1,2,4三个点 ,再以点1为端点,Y向为正向画直线。
3. 三点确定UCS,依次选点1和刚刚两条直线上的点 ,再以点1为端点,角平分线方向画直线
(或者是刚刚两个直线的端点连线的中点到点1画线)。

第1,2部感觉可以用下面类似的lsp实现,但下面这个是拿别的改的,语法什么的不对,运行不了。

(DEFUN C:aa(/ hp1 hp2 hp3 hp4 )
  (SETQ hp1 (GETPOINT "\nFirst Point :")
         hp2 (GETPOINT "\nSecond Point :")
           hp3 (GETPOINT "\nthird Point :")
             hp4 (GETPOINT "\nforth Point :")
)

(command ".ucs" "_3" hp1 hp2 hp3 "")
(COMMAND "line" hp1 "500" "")
(command ".ucs" "_3" hp1 hp2 hp4 "")
(COMMAND "line" hp1 "-500" "")
(PRINC)
)



发表于 2014-7-12 20:58 | 显示全部楼层
本帖最后由 sunnylhj 于 2014-7-12 21:02 编辑

我给你发一个!最好能帮我改改代码也发给我一份!我之前也一直找这个,但总找不到,但自己又是菜鸟,只有自己乱搞了一个!使用方法是:选择1、2、3、4就画出角度了!使用之前最好用 ST 命令设置一下文字样式,要不然运行出错! (代码里面有一些可能你用不到,你就直接删除掉吧! )


  1. (defun midpoint (m1 m2)
  2.   (setq ptx (+ (nth 0 m1) (/ (- (nth 0 m2) (nth 0 m1)) 2 )))
  3.   (setq pty (+ (nth 1 m1) (/ (- (nth 1 m2) (nth 1 m1)) 2 )))
  4.   (setq ptz (+ (nth 2 m1) (/ (- (nth 2 m2) (nth 2 m1)) 2 )))
  5.   (list ptx pty ptz)
  6.   )
  7. (defun wtu (pt)
  8.   (trans pt 0 1)
  9.   )
  10. (defun utw (pt)
  11.   (trans pt 1 0)
  12.   )

  13. (defun c:2mj (/ pt1 pt2 pt3 pt4 mpt mp1 mpt-a sp ep mp ang ang1 dang  )
  14.   (command "ucs" "na" "d" "oucs"
  15.            "ucs" "na" "s" "oucs"
  16.            "ucs" "w")
  17.   (setq oldos (getvar "osmode"))
  18.   (setvar "osmode" 1025)
  19.   (setq pt1 (getpoint "\nPlease select AXIS point1:")
  20.         pt2 (getpoint "\nPlease select AXIS point2:")
  21.         pt3 (getpoint "\nPlease select point3:")
  22.         pt4 (getpoint "\nPlease select point4:")
  23.     ;mpt (midpoint pt1 pt2)
  24.     )
  25.   (setvar "osmode" 0)
  26.   (setq mpt (midpoint pt1 pt2) )
  27.   ;(setq mpt (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2))))  
  28.   
  29.   (setq hfp (* 0.2 (distance pt1 mpt)))
  30.   (command "ucs" "3p"  pt1 pt2 pt3 )
  31.   (setq L1 (strcat "@" (rtos hfp) "<-90"))
  32.   (setq Line_1 (ssadd))
  33.   (command "line" (wtu pt3) L1 "")
  34.   (ssadd (entlast) Line_1)
  35.   (setq ent1 (entget (ssname Line_1 0)))
  36.   (setq mp1 (trans (cdr (assoc 11 ent1)) 0 1))
  37.   (setq mpt-a (wtu mpt ))
  38.   (command "move" Line_1 "" mp1 mpt-a)
  39.   (command "ucs" "w"
  40.            "ucs" "3p" pt1 pt2 pt4
  41.        )
  42.   (setq Line_2 (ssadd))
  43.   (command "line" (wtu pt4 ) L1 "")
  44.   (ssadd (entlast) Line_2)
  45.   (setq ent2 (entget (ssname Line_2 0)))
  46.   (setq mp2 (wtu (cdr (assoc 11 ent2)) ))
  47.   (command "move" Line_2 "" mp2 mpt-a)
  48.   ;(setvar "osmode" oldos)

  49.   (command "ucs" "ob" Line_1
  50.            "ucs" "x" "-90")
  51.   (command "Pedit" Line_2 "y" "j" Line_1 "" "x")
  52.   (command "ucs" "w" )
  53.   (setq ent (entlast))
  54.   (setq sp (wtu (vlax-curve-getStartPoint ent))
  55.         ep (wtu (vlax-curve-getEndPoint  ent))
  56.       ;mp mpt
  57.       dd1 (* 0.5 hfp)
  58.     )
  59.   ;(command "line" sp ep "")
  60.   (command "ucs" "3p" sp ep mpt)
  61.   (setq di (* 0.5 (distance sp ep))
  62.         mdn (list di 0 0)
  63.     )      
  64.   (command "ucs" "n" (setq mdn (list di 0 0)))
  65.   (command "line" "0,0" (wtu mpt) "")
  66.   
  67.   (setq test_point (nth 1 (wtu mpt)))  
  68.   (if (< test_point 0)
  69.       (setq fx "@0,50")
  70.     (setq fx "@0,-50")
  71.     )  

  72. ;  (setq nmd (polar sp (angle sp ep) (* 0.5 (distance sp ep))))
  73. ;  (command "point" nmd)
  74. ;  (command "line" mp nmd "")

  75. (if (> (nth 1 (getvar "ucsydir" ) ) 0)   
  76.   (command "ucs" "x" "180")   
  77.   )

  78. (command "DIMANGULAR" "" (wtu mpt) (wtu ep) (wtu sp)  fx)
  79.   (setq jd (entlast))
  80.   (setq angle_data (atof (angtos (vla-get-measurement (vlax-ename->vla-object jd)))))

  81.   (if (> angle_data 180)
  82.       (setq angle_data1 (strcat "O corner:" (rtos angle_data 2 2)  "%%D"))
  83.     (setq angle_data1 (strcat "I corner:" (rtos angle_data 2 2)  "%%D"))
  84.     )
  85.   
  86. ;  (if (> angle_data 180)
  87. ;      (progn
  88. ;        (setq angle_data (- angle_data 180))
  89. ;      (setq angle_data (- 180 angle_data))
  90. ;    )
  91. ;    (setq angle_data (atof (angtos (vla-get-measurement (vlax-ename->vla-object jd)))))
  92. ;    )
  93. ;    (command "text" "j" "mc" "0,0" "0" angle_data1 )
  94. ;  (command "erase" ent jd "")
  95. ;  (command "erase"  jd "")

  96. ;(setq f (open "c:\\temp\\angle.csv " "a"))
  97. (if (= f nil)
  98.   (alert "C:\Temp\angle.csv 被其他程序打開,請關閉再試!!!")
  99. )

  100. ;(write-line (rtos angle_data 2 2) f)
  101. (setq list1 (append list1 (list angle_data)))
  102. (setq max_1 (apply 'max list1))
  103. (setq min_1 (apply 'min list1))
  104. (princ (strcat "\nMax Angle: " (rtos max_1) "°" "       Min Angle: " (rtos min_1) "°"))


  105. ;  (setq vla-ent (vlax-ename->vla-object ent))

  106.   ;(command "ucs" "W")
  107.   (setvar "osmode" oldos)
  108.   (princ)
  109.   )

  110.   (defun prt (/ p1a p2a p3a p4a)
  111.       (setq P1a "PT1" P2a "PT2" P3a "PT3" P4a "PT4" M4 "MPT12")
  112.       (command
  113.              "text" "j" "mc" (trans PT1 0 1) "0" p1a PT1
  114.          "text" "j" "mc" (trans PT2 0 1) "0" p2a PT2
  115.          "text" "j" "mc" (trans PT3 0 1) "0" p3a PT3
  116.          "text" "j" "mc" (trans PT4 0 1) "0" p4a PT4
  117.          "text" "j" "mc" (trans MPT12 0 1) "0" M4 MPT12
  118.          ;(command "-MTEXT" PT1 "H" "10" "W" "0" P1a PT1 ""
  119.           ;        "-MTEXT" PT2 "H" "10" "W" "0" P2a PT2 ""
  120.         ;    "-MTEXT" PT3 "H" "10" "W" "0" P3a PT3 ""
  121.         ;    "-MTEXT" PT4 "H" "10" "W" "0" P4a PT4 ""
  122.         ;    "-MTEXT" MPT  "H" "10" "W" "0" M4 MPT ""
  123.             )
  124.             )

  

本帖子中包含更多资源

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

x
发表于 2015-3-22 18:36 | 显示全部楼层
zenem怎么没有执行命令啊
发表于 2015-3-23 12:42 | 显示全部楼层
麻烦给说下命令吧,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 00:52 , Processed in 0.275860 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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