明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2748|回复: 8

lsp如何实现以各自的中点画圆

[复制链接]
发表于 2006-12-22 08:53:00 | 显示全部楼层 |阅读模式
以各自的中点画圆
怎样用lisp写如下程序,等待高手出手
选择一些图元后,执行一个命令后,其中的线段长度≥50cm的线段,则以各自中点(中点重复的仅画一次)画一个半径为1cm的圆。
搞了半天没有搞出来,只好请高手赐教!先谢了

发表于 2006-12-22 11:55:00 | 显示全部楼层
本帖最后由 作者 于 2006-12-22 11:57:51 编辑

  1. (defun C:test (/ oldmode oce ss en i ssl)
  2.   (setq oldmode (getvar "osmode"))
  3.   (setq oce (getvar "cmdecho"))
  4.   (command ".ucs" "W")
  5.   (setvar "cmdecho" 0)
  6.   (setvar "osmode"  0)
  7.   (if (setq ss (ssget))
  8.     (progn
  9.       (setq ssl (sslength ss) i 0)
  10.       (repeat ssl
  11.         (setq en (ssname ss i))
  12.         (judge en)
  13.         (setq i (1+ i))
  14.       )
  15.     )
  16.   )
  17.   (command ".ucs" "p")
  18.   (setvar "cmdecho" oldmode)
  19.   (setvar "cmdecho" oce)
  20.   (princ)
  21. )
  22. (defun judge (ename / elist p1 p2 l midp12)
  23.   (setq elist (entget ename))
  24.   (if (setq p1 (cdr (assoc 10  elist))
  25.             p2 (cdr (assoc 11  elist))
  26.       )
  27.     (progn
  28.       (setq l (distance p1 p2))
  29.       (setq midp12 (polar p1 (angle p1 p2) (* l 0.5)))
  30.       (if (>= l 500.0)
  31.         (entmake
  32.           (append
  33.             '((0 . "CIRCLE")(100 . "AcDbEntity")(100 . "AcDbCircle"))
  34.             (list (cons 10 midp12))
  35.             (list (cons 40 10.0))
  36.           )
  37.         )
  38.       )
  39.     )
  40.   )
  41. )
没什么困难的啊 ,编了一个看适合不(注意是毫米为单位的),没有考虑重复和错误的情况,请自行检查。
 楼主| 发表于 2006-12-22 14:12:00 | 显示全部楼层

我试了试,怎么不行啊,能不能吧重复的只花一次啊highflybir大侠!!

发表于 2006-12-22 15:16:00 | 显示全部楼层

关于消重的问题,你可以查阅相关的lisp程序。(网站上有很多的这个程序,但是有效算法的不多,规模不大的话就用他们吧!)

如果没有的话,直接用天正的消除重元功能。

发表于 2020-5-16 19:56:44 | 显示全部楼层
highflybir 发表于 2006-12-22 11:55
没什么困难的啊 ,编了一个看适合不(注意是毫米为单位的),没有考虑重复和错误的情况,请自行检查。

高飞老师您好,您这个程序能适用LINE,但是不能适用于Pline,能不能修改下,既能适用于LINE,又能适用于PLINE,同时圆太小,半径最好自己设置输入。谢谢
发表于 2020-5-19 13:30:18 | 显示全部楼层
本帖最后由 lee50310 于 2020-5-19 13:36 编辑
但是不能适用于Pline,能不能修改下,既能适用于LINE,又能适用于PLINE,同时圆太小,半径最好自己设置输入。谢谢

      執行指令: tt                     
           1.支援線型長度: line,pline,spline ,arc
           2.畫半徑可輸入
           3.中點長度畫圓限制條件可輸入
           4.有重消功能  (注意: 重消圓半徑必須一致才可)




本帖子中包含更多资源

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

x
发表于 2020-5-19 16:12:18 来自手机 | 显示全部楼层
把多段线先移开,炸成直线,运行,然后把重新生成多段线
发表于 2020-5-19 18:31:38 | 显示全部楼层
本帖最后由 lee50310 于 2020-5-19 18:42 编辑
把多段线先移开,炸成直线,运行,然后把重新生成多段

這也是一個方法,但還有更好更快的方式使用高級函數就可解決了
发表于 2020-5-20 02:54:28 | 显示全部楼层
(setq e (vlax-curve-getDistAtParam en (vlax-curve-getEndParam en)))
(setq p0 (vlax-curve-getendpoint (VLAX-Ename->VLA-Object en))
            p2 (vlax-curve-getstartpoint (VLAX-Ename->VLA-Object en))
            p1 (vlax-curve-getPointAtDist en (* e 0.5))
      )
P1为中点。
批量时,P1列表。重复的点忽略。
以列表点生成园。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 01:53 , Processed in 0.206349 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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