明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1493|回复: 20

[提问] (求助)请教各位大神,是否有插件可以实现矩形变单线

[复制链接]
发表于 2021-12-24 21:56:07 | 显示全部楼层 |阅读模式
10明经币
求助各位大神,是否可以帮忙实现矩形变中心单线的插件,,以矩形的最长的两边生成中心线
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

试试看,以您的能力加个批量应该不是问题的
发表于 2021-12-24 21:56:08 | 显示全部楼层
本帖最后由 夏生生 于 2021-12-26 16:28 编辑
999999 发表于 2021-12-25 23:21
感谢大神的杰作,效果杠杆的,谢谢大神,请问大神可以增加个批量框选生成的吗

试试看,以您的能力加个批量应该不是问题的
  1. (defun c:tt (/ xty-tr-ss2lst getmid lst en dis pt obj1 obj2)
  2.   (defun xty-tr-ss2lst (ss form / n en lst)
  3.     (repeat (setq n (sslength ss))
  4.       (setq en (ssname ss (setq n (1- n))))
  5.       (setq lst (cons en lst))
  6.     )
  7.     (setq lst (reverse lst))
  8.     (if        form
  9.       lst
  10.       (mapcar (function vlax-ename->vla-object) lst)
  11.     )
  12.   )
  13.   (defun getmid        (en)
  14.     (vlax-curve-getpointatparam
  15.       en
  16.       (* 0.5
  17.          (+ (vlax-curve-getstartparam en)
  18.             (vlax-curve-getendparam en)
  19.          )
  20.       )
  21.     )
  22.   )
  23.   (setq        ss  (ssget '((0 . "lwpolyline") (90 . 4)))
  24.         lst (xty-tr-ss2lst ss nil)
  25.   )
  26.   (foreach en lst
  27.     (setq en   (vl-catch-all-apply
  28.                  (function vlax-safearray->list)
  29.                  (list (vlax-variant-value (vla-explode en)))
  30.                )
  31.           en   (mapcar
  32.                  '(lambda (x)
  33.                     (list
  34.                       (vlax-curve-getdistatparam x (vlax-curve-getendparam x))
  35.                       (getmid x)
  36.                       x
  37.                     )
  38.                   )
  39.                  en
  40.                )
  41.           en   (vl-sort en '(lambda (a b) (< (car a) (car b))))
  42.           dis  (* 0.5 (caar en))
  43.           pt   (mapcar '(lambda (x y) (* 0.5 (+ x y)))
  44.                        (cadr (caddr en))
  45.                        (cadr (last en))
  46.                )
  47.           obj1 (car (vl-catch-all-apply
  48.                       (function vlax-safearray->list)
  49.                       (list (vlax-variant-value
  50.                               (vla-offset (last (last en)) dis)
  51.                             )
  52.                       )
  53.                     )
  54.                )
  55.           obj2 (car (vl-catch-all-apply
  56.                       (function vlax-safearray->list)
  57.                       (list (vlax-variant-value
  58.                               (vla-offset (last (last en)) (- dis))
  59.                             )
  60.                       )
  61.                     )
  62.                )
  63.     )
  64.     (if        (equal pt (getmid obj1) 1e-4)
  65.       (progn (vla-delete obj2)
  66.              (vla-put-layer obj1 (getvar "clayer"))
  67.       )
  68.       (progn (vla-delete obj1)
  69.              (vla-put-layer obj2 (getvar "clayer"))
  70.       )
  71.     )
  72.     (foreach n en (vla-delete (last n)))
  73.   )
  74. )

评分

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

查看全部评分

回复

使用道具 举报

发表于 2021-12-25 12:05:26 | 显示全部楼层
这个除了圆弧要用到凸度意外  另两个都是比较简单
回复

使用道具 举报

发表于 2021-12-25 12:06:56 | 显示全部楼层
提供一个李迈克的代码   
;;;;已知弧线起点、终点及凸度,求圆心坐标
;; Bulge Centre  -  Lee Mac   
;; p1 - start vertex  p2 - end vertex b  - bulge
;; Returns the centre of the arc described by the given bulge and vertices
;(LM:bulgecentre (setq p1(getpoint))(setq p2(getpoint)) b)
(defun LM:bulgecentre (p1 p2 b)
  (polar p1
         (+ (angle p1 p2) (- (/ pi 2) (* 2 (atan b))))
         (/ (* (distance p1 p2) (1+ (* b b))) 4 b)
  )
)
回复

使用道具 举报

发表于 2021-12-25 17:30:45 | 显示全部楼层
本帖最后由 夏生生 于 2021-12-25 17:35 编辑

仅适用于本例
  1. (defun c:tt (/ getmid en dis pt obj1 obj2)
  2.   (defun getmid    (en)
  3.     (vlax-curve-getpointatparam
  4.       en
  5.       (* 0.5
  6.      (+ (vlax-curve-getstartparam en)
  7.         (vlax-curve-getendparam en)
  8.      )
  9.       )
  10.     )
  11.   )
  12.   (setq    en (vl-catch-all-apply
  13.          (function vlax-safearray->list)
  14.          (list (vlax-variant-value
  15.              (vla-explode
  16.                (vlax-ename->vla-object (car (entsel "\n选取:")))
  17.              )
  18.            )
  19.          )
  20.        )
  21.     en (mapcar
  22.          '(lambda (x)
  23.         (list
  24.           (vlax-curve-getdistatparam x (vlax-curve-getendparam x))
  25.           (getmid x)
  26.           x
  27.         )
  28.           )
  29.          en
  30.        )
  31.   )
  32.   (if (= 4 (length en))
  33.     (progn
  34.       (setq en    (vl-sort en '(lambda (a b) (< (car a) (car b))))
  35.         dis    (* 0.5 (caar en))
  36.         pt    (mapcar    '(lambda (x y) (* 0.5 (+ x y)))
  37.             (cadr (caddr en))
  38.             (cadr (last en))
  39.         )
  40.       )
  41.       (setq obj1 (car (vl-catch-all-apply
  42.             (function vlax-safearray->list)
  43.             (list (vlax-variant-value
  44.                 (vla-offset (last (last en)) dis)
  45.                   )
  46.             )
  47.               )
  48.          )
  49.         obj2 (car (vl-catch-all-apply
  50.             (function vlax-safearray->list)
  51.             (list (vlax-variant-value
  52.                 (vla-offset (last (last en)) (- dis))
  53.                   )
  54.             )
  55.               )
  56.          )
  57.       )
  58.       (if (equal pt (getmid obj1) 1e-4)
  59.     (progn(vla-delete obj2)(vla-put-layer obj1(getvar"clayer")))
  60.     (progn(vla-delete obj1)(vla-put-layer obj2(getvar"clayer")))
  61.       )
  62.       (foreach n en (vla-delete (last n)))
  63.     )
  64.     (progn(foreach n en (vla-delete (last n)))(alert"非四边"))
  65.   )
  66. )

本帖子中包含更多资源

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

x

点评

感谢大师,就是不能批量框选,  发表于 2021-12-25 19:50
回复

使用道具 举报

 楼主| 发表于 2021-12-25 23:18:59 | 显示全部楼层
guosheyang 发表于 2021-12-25 12:05
这个除了圆弧要用到凸度意外  另两个都是比较简单

您说的简单,我却感觉太难了
回复

使用道具 举报

 楼主| 发表于 2021-12-25 23:20:09 | 显示全部楼层
guosheyang 发表于 2021-12-25 12:06
提供一个李迈克的代码   
;;;;已知弧线起点、终点及凸度,求圆心坐标
;; Bulge Centre  -  Lee Mac   

世界上最遥远的距离就是,你把代码摆在我的面前,我却不知道怎么样使用
回复

使用道具 举报

 楼主| 发表于 2021-12-25 23:21:10 | 显示全部楼层

感谢大神的杰作,效果杠杆的,谢谢大神,请问大神可以增加个批量框选生成的吗

点评

思路很简单,根据图元特性,四条边,两条边等长且边长最小,炸开,排序,取最小边长一半为偏移距离,取最大边长边双向偏移,得出两个结果,中点与两个长边中点连线中点重合的就是你想要的  发表于 2021-12-26 10:40
回复

使用道具 举报

发表于 2021-12-26 11:47:06 | 显示全部楼层
夏生生 发表于 2021-12-26 10:37
试试看,以您的能力加个批量应该不是问题的

有批量的了吗????
回复

使用道具 举报

发表于 2021-12-26 11:52:14 | 显示全部楼层
夏生生 发表于 2021-12-26 10:37
试试看,以您的能力加个批量应该不是问题的

提示错误; 错误: no function definition: nil

点评

楼修改了,有个函数没给  发表于 2021-12-26 16:29
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 01:30 , Processed in 0.183129 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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