找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2566|回复: 5

[已解决] 求多义线直线段变弧线段代码

[复制链接]
发表于 2014-7-5 18:56:07 | 显示全部楼层 |阅读模式
悬赏100D豆已解决
本帖最后由 清风明月10 于 2014-7-5 19:15 编辑

我想求高手写一个插件,将轻多义线、二维多义线、三维多义线(只对轻多义线有效亦可)的鼠标指定的某直线段改为弧线段,这样多义线就可以和样条曲线一样可以圆滑过渡了。
它的反插件,即将多义线弧线段变直线段请朋友顺手也写一个。

最佳答案

查看完整内容

点弧线段直接变直线,点直线段拉伸为弧线(模拟高版本的变弧线段) 没有加错误处理,中断后命令行输入 (xdrx_pointmonitor) 中断点监视
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-7-5 18:56:08 | 显示全部楼层
本帖最后由 csharp 于 2014-7-6 11:06 编辑
清风明月10 发表于 2014-7-6 08:00
谢谢提醒!但我的专业软件限定在低版本,高版本不能用

点弧线段直接变直线,点直线段拉伸为弧线(模拟高版本的变弧线段)
没有加错误处理,中断后命令行输入 (xdrx_pointmonitor) 中断点监视
  1. (defun c:tt (/ e ent p pam seg tf bp sp ep pmid an1 _pi2 p3 )
  2.   (defun CallBack (dynpt / d mpind1 p4 pcen van)
  3.     (setq d (xdrx_point_dist2line dynpt sp ep))
  4.     (cond
  5.       ((minusp d)
  6.        (setq pmid1 (xdrx_line_midp sp dynpt)
  7.              p4           (polar pmid1 (+ (angle sp dynpt) _pi2) 1.)
  8.              pcen  (inters pmid p3 pmid1 p4 nil)
  9.              van   (xdrx_vector_angle (mapcar '- sp pcen) (mapcar '- ep pcen))
  10.        )
  11.        (xdrx_polyline_setbulgeat
  12.          ent
  13.          seg
  14.          (- (xdrx_math_tan (/ van 4.)))
  15.        )
  16.       )
  17.       ((> d 0.)
  18.        (setq pmid1 (xdrx_line_midp sp dynpt)
  19.              p4           (polar pmid1 (+ (angle sp dynpt) _pi2) 1.)
  20.              pcen  (inters pmid p3 pmid1 p4 nil)
  21.              van   (xdrx_vector_angle (mapcar '- sp pcen) (mapcar '- ep pcen))
  22.        )
  23.        (xdrx_polyline_setbulgeat
  24.          ent
  25.          seg
  26.          (xdrx_math_tan (/ van 4.))
  27.        )
  28.       )
  29.       ((zerop d)
  30.        (xdrx_polyline_setbulgeat ent seg 0.)
  31.       )
  32.       (t)
  33.     )
  34.   )
  35.   (if (setq e (xdrx_entsel "\nPick Polyline: " '((0 . "*Polyline"))))
  36.     (progn
  37.       (setq ent        (car e)
  38.             p        (apply 'vlax-curve-getclosestpointto e)
  39.             pam        (vlax-curve-getparamatpoint ent p)
  40.             seg        (fix pam)
  41.             tf        (xdrx_polyline_segtype ent seg)
  42.       )
  43.       (if (= tf "kArc")
  44.         (xdrx_polyline_setbulgeat ent seg 0.)
  45.         (progn
  46.           (setq        bp   (vlax-curve-getpointatparam ent (+ seg 0.5))
  47.                 _pi2 (* pi 0.5)
  48.           )
  49.           (mapcar 'set '(sp ep) (xdrx_polyline_getlinesegat ent seg))
  50.           (setq        an1  (angle sp ep)
  51.                 pmid (xdrx_line_midp sp ep)
  52.                 p3   (polar pmid (+ an1 _pi2) 1.)
  53.           )
  54.           (xdrx_pointmonitor "CallBack" ent)
  55.           (getpoint bp)
  56.           (xdrx_pointmonitor)
  57.         )
  58.       )
  59.     )
  60.   )
  61.   (princ)
  62. )

点评

试了好久,一点效果都没有。你是针对哪种多段线有效啊?最好是对各类多段线都有效,否则我没法用。 也不知道是不是因为我的晓东函数库不是新的  详情 回复 发表于 2014-7-6 11:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-7-5 21:24:02 来自手机 | 显示全部楼层
高版本已经内置此功能,右键菜单中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-7-6 08:00:01 | 显示全部楼层
谢谢提醒!但我的专业软件限定在低版本,高版本不能用

点评

点弧线段直接变直线,点直线段拉伸为弧线(模拟高版本的变弧线段)  详情 回复 发表于 2014-7-6 11:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-7-6 11:20:55 | 显示全部楼层
本帖最后由 清风明月10 于 2014-7-6 11:46 编辑
csharp 发表于 2014-7-6 11:04
点弧线段直接变直线,点直线段拉伸为弧线(模拟高版本的变弧线段)
没有加错误处理,中断后命令行输入 ( ...

试好了,是我搞错了,对直线动作,才没有效果。

点评

没有用到 xd-lisp-lib.vlx 函数,只需要 API,加上 (xd::begin) 和 (xd::end) 后中断后自动取消 pointmonitor 了  详情 回复 发表于 2014-7-6 11:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-7-6 11:46:53 | 显示全部楼层
本帖最后由 csharp 于 2014-7-6 12:35 编辑
清风明月10 发表于 2014-7-6 11:20
试了好久,一点效果都没有。你是针对哪种多段线有效啊?最好是对各类多段线都有效,否则我没法用。
也不 ...


没有用到 xd-lisp-lib.vlx 函数,只需要 API,加上 (xd::begin) 和 (xd::end) 中断后自动取消 pointmonitor 了
plseg.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 05:51 , Processed in 0.439463 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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