乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 104|回复: 10

[编程交流] 如何在3D Pline/3D Spl上标记

[复制链接]

5

主题

45

帖子

40

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 15:06:57 | 显示全部楼层 |阅读模式
感谢JohnM的LISP,我刚刚创建了一条三维多段线和三维样条曲线,但我不知道如何在三维多段线和三维样条曲线上标记点到点的指定距离(或变化)。是否需要LISP例程来支持解决此问题?有关详细信息,请参见附图,但请注意,所有点和尺寸均不正确,仅供展示。请帮忙,谢谢。
 

                               
登录/注册后可看大图


                               
登录/注册后可看大图

标记距离。图纸
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 15:18:51 | 显示全部楼层
这将在距离曲线起点指定距离处放置一个点
为我个人使用而写,无错误检查。。。。
  1. ;places point at specified station along a polyline, measured from start LPS 2008
  2. (defun c:pop ()
  3. (vl-load-com)
  4. (setq oldosnap (getvar "osmode"))
  5. (setvar "osmode" 0)
  6. (command "ucs" "w")
  7. (if (/= (getvar "pdmode") 3)(setvar "pdmode" 3))
  8. (setq ob (entsel "Select curve: "))
  9. (setq p2 (getreal "\n Specify Distance : "))
  10. (setq obj (vlax-ename->vla-object (car ob)))
  11. (setq pt1 (vlax-curve-getPointAtDist Obj p2))
  12. (command "Point" pt1)
  13. (command "ucs" "p")
  14. (setvar "osmode" oldosnap)
  15. (princ)
  16. )
回复

使用道具 举报

5

主题

45

帖子

40

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 15:19:08 | 显示全部楼层
感谢Lpsifert,但指定的距离必须是点到点的对齐尺寸,而不是沿曲线的长度。
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 15:29:30 | 显示全部楼层
以尺寸的起点为中心绘制一个半径为所需距离的圆。
回复

使用道具 举报

5

主题

45

帖子

40

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 15:33:21 | 显示全部楼层
您好,请注意,它们是三维多段线和三维样条曲线,那么哪些UCS将用于绘制该圆?
 

                               
登录/注册后可看大图


                               
登录/注册后可看大图
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:38:58 | 显示全部楼层
试试这个:
 
  1. (defun c:dimcurve  (/ vLst oVar cEnt sDis pt cnt pt2 pt3)
  2. (setq    vLst (list "PDMODE" "OSMODE" "CMDECHO")
  3.    oVar (mapcar 'getvar vLst))
  4. (mapcar 'setvar vLst (list 3 0 0))
  5. (if (and (setq cEnt (car (entsel "\nSelect Curve >  ")))
  6.       (member (cdadr (entget cEnt)) '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE" "ARC" "CIRCLE" "ELLIPSE"))
  7.       (not (initget 7))
  8.       (setq sDis (getreal "\nSpecify Spacing >  ")))
  9.    (progn
  10.      (command "_ucs" "_w")
  11.      (setq cnt 0)
  12.      (while (>= (distance (setq pt (vlax-curve-GetPointAtDist cEnt (* sDis cnt))) (vlax-curve-GetEndPoint cEnt)) sDis)
  13.    (command "_point" pt)
  14.    (setq pt2 (polar pt (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv cEnt (vlax-curve-GetParamAtPoint cEnt pt)))) 5.0))
  15.    (command "_dimaligned" pt (setq pt3 (vlax-curve-GetPointAtDist cEnt (* sDis (setq cnt (1+ cnt))))) pt2)
  16.    (command "_point" pt3))
  17.      (command "_ucs" "_P"))
  18.    (princ "\n<!> Nothing Selected <!>"))
  19. (mapcar 'setvar vLst oVar)
  20. (princ))

 
由于您所做工作的性质,DimAligned的精度仅通过在更直的直线上使用较小的增量来提高。
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 15:46:12 | 显示全部楼层
在我看来,李的代码也可以测量曲线上的距离,而不是“点到点”距离。手动绘制一个半径为所需距离的球体,圆心位于点1,其中曲线与曲面相交是所需的点2。
 
我的想法是lisp需要递增地检查点之间的距离,调整沿曲线的位置,直到曲线上的点位于所需的距离,在一定的公差范围内。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:54:20 | 显示全部楼层
是的,我认为这需要公差-因为我们使用的是“dimaligned”,这是一个线性尺寸,当使用“GetPointatDist”函数时,测量的距离可能与直线距离有所不同,因为曲率较高。
回复

使用道具 举报

5

主题

45

帖子

40

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 16:00:56 | 显示全部楼层
是的,这是需要解决的主要问题。那么,如何在直线(或样条线或样条曲线)和曲面之间的交点插入点?
当我们沿着样条线/样条线插入所有正确的点时,我们可以使用自动对齐的尺寸来显示这些距离->从点到点。
回复

使用道具 举报

5

主题

45

帖子

40

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 16:02:20 | 显示全部楼层
谢谢李,但是所有对齐的DIM都必须在(=15)上找到
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 21:23 , Processed in 0.637404 second(s), 84 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表