乐筑天下

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

重新创建路径曲线。。。

[复制链接]

72

主题

738

帖子

75

银币

中流砥柱

Rank: 25

铜币
957
发表于 2018-10-28 11:53:40 | 显示全部楼层 |阅读模式
我想在这个网站上也讨论这个问题:
https://www.cadtutor.net/forum/topic/66077-recreat-path-of-object-array-path/
除了阵列路径对象之外,还必须考虑扫掠或路径拉伸三维实体…
我开始觉得这是在地毯下…
。。。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

72

主题

738

帖子

75

银币

中流砥柱

Rank: 25

铜币
957
发表于 2018-10-28 20:20:17 | 显示全部楼层
我想出了数组路径匿名块...
  1. (defun c:extractarraypathcurve ( / refgeom mxv mxm trp arraypth n on ospc met e ip p pl )
  2.   ;; RefGeom (gile)
  3.   ;; Returns a list whose first item is a 3x3 transformation matrix and
  4.   ;; second item the object insertion point in its parent (xref, block or space)
  5.    
  6.   (defun refgeom ( ent / ang enx mat ocs )
  7.       (setq enx (entget ent)
  8.             ang (cdr (assoc 050 enx))
  9.             ocs (cdr (assoc 210 enx))
  10.       )
  11.       (list
  12.           (setq mat
  13.               (mxm
  14.                   (mapcar '(lambda ( v ) (trans v 0 ocs t))
  15.                      '(
  16.                           (1.0 0.0 0.0)
  17.                           (0.0 1.0 0.0)
  18.                           (0.0 0.0 1.0)
  19.                       )
  20.                   )
  21.                   (mxm
  22.                       (list
  23.                           (list (cos ang) (- (sin ang)) 0.0)
  24.                           (list (sin ang) (cos ang)     0.0)
  25.                          '(0.0 0.0 1.0)
  26.                       )
  27.                       (list
  28.                           (list (cdr (assoc 41 enx)) 0.0 0.0)
  29.                           (list 0.0 (cdr (assoc 42 enx)) 0.0)
  30.                           (list 0.0 0.0 (cdr (assoc 43 enx)))
  31.                       )
  32.                   )
  33.               )
  34.           )
  35.           (mapcar '- (trans (cdr (assoc 10 enx)) ocs 0)
  36.               (mxv mat (cdr (assoc 10 (tblsearch "block" (cdr (assoc 2 enx))))))
  37.           )
  38.       )
  39.   )
  40.   ;; Matrix x Vector  -  Vladimir Nesterovsky
  41.   ;; Args: m - nxn matrix, v - vector in R^n
  42.    
  43.   (defun mxv ( m v )
  44.       (mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
  45.   )
  46.    
  47.   ;; Matrix x Matrix  -  Vladimir Nesterovsky
  48.   ;; Args: m,n - nxn matrices
  49.    
  50.   (defun mxm ( m n )
  51.       ((lambda ( a ) (mapcar '(lambda ( r ) (mxv a r)) m)) (trp n))
  52.   )
  53.    
  54.   ;; Matrix Transpose  -  Doug Wilson
  55.   ;; Args: m - nxn matrix
  56.    
  57.   (defun trp ( m )
  58.       (apply 'mapcar (cons 'list m))
  59.   )
  60.   (while
  61.     (or
  62.       (not (setq arraypth (car (entsel "\nPick ARRAYPATH BLOCK..."))))
  63.       (if arraypth
  64.         (or
  65.           (/= (cdr (assoc 0 (entget arraypth))) "INSERT")
  66.           (not (wcmatch (cdr (assoc 2 (entget arraypth))) "`*U*"))
  67.         )
  68.       )
  69.     )
  70.     (prompt "\nMissed or picked wrong entity type...")
  71.   )
  72.   (initget 6)
  73.   (setq n (getint "\nSpecify density of array - precision of curve recreation  : "))
  74.   (if (null n)
  75.     (setq n 25)
  76.   )
  77.   (setq on (getpropertyvalue arraypth "Items"))
  78.   (setq ospc (getpropertyvalue arraypth "ItemSpacing"))
  79.   (setq met (getpropertyvalue arraypth "Method"))
  80.   (vl-cmdf "_.ARRAYEDIT" arraypth "_M" "_D" "_I" n)
  81.   (while (
  82.     (vl-cmdf "")
  83.   )
  84.   (setq e (tblobjname "BLOCK" (cdr (assoc 2 (entget arraypth)))))
  85.   (while (setq e (entnext e))
  86.     (setq ip (cadr (refgeom e)))
  87.     (setq p (apply '(lambda ( mat vec ) (mapcar '+ (mxv mat ip) vec)) (refgeom arraypth)))
  88.     (setq pl (cons p pl))
  89.   )
  90.   (setq pl (reverse pl))
  91.   (vl-cmdf "_.SPLINE")
  92.   (foreach p pl
  93.     (vl-cmdf "_non" (trans p 0 1))
  94.   )
  95.   (while (
  96.     (vl-cmdf "")
  97.   )
  98.   (if (= met 0)
  99.     (vl-cmdf "_.ARRAYEDIT" arraypth "_M" "_D" "_I" on)
  100.     (vl-cmdf "_.ARRAYEDIT" arraypth "_M" "_M" "_I" on ospc)
  101.   )
  102.   (while (
  103.     (vl-cmdf "")
  104.   )
  105.   (princ)
  106. )

3D SOLIDS 仍然保留 - 通过路径和扫描进行挤压...我不知道如何获得表示横截面的区域的质心...我基本上不知道如何生成横截面...
问候, M.R.
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2018-10-29 04:04:33 | 显示全部楼层
我认为不可能准确地重现路径阵列的路径。例如,如果原始路径在阵列项目之间包含一个小之字形。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2018-10-29 17:32:54 | 显示全部楼层
我用曲线来求管子的路径。但当然,这有一个非常有限的用途
回复

使用道具 举报

72

主题

738

帖子

75

银币

中流砥柱

Rank: 25

铜币
957
发表于 2018-10-30 07:21:54 | 显示全部楼层

抱歉,曲面的surfv等值线并不完全遵循主中心路径曲率…
顺便说一句。我用扫地的方法做到了这一点,但这很复杂,需要人工干预;通过NETLOAD使用DLL;一些短的LSP文件,它以我在上面发布的例程中使用的方式重新创建形状…基本上,我得到闭合的三维多段线截面,然后将其转换为区域,并将其仅拉伸1e-3,以从参考拉伸中获得WCS中的质心,然后将起点/终点添加到质心的点列表中-扫描是打开的,因此没有起点/终点三维多段线横截面-必须手动创建它们,并获得附加到点列表的质心,最后是样条线命令-通过所有点…我已经检查过,我可以清楚地说,只有这种方式才有一定的正确性-沿与横截面相反的方向复制提取的曲线将其放置在扫描路径的开始位置是错误的。。。
回复

使用道具 举报

72

主题

738

帖子

75

银币

中流砥柱

Rank: 25

铜币
957
发表于 2018-10-30 10:09:52 | 显示全部楼层
然而,罗伊有道理...我认为重新创建路径的准确性很重要...所以我的方法很糟糕,但话又说回来,我不知道该怎么做 - 直接从复杂对象中提取精确的曲线......似乎来自曲线的主要数据存储在复杂对象内部的某个地方......因此,如果其他人有不同的东西,请告诉我们,如果这不是机密的......
回复

使用道具 举报

72

主题

738

帖子

75

银币

中流砥柱

Rank: 25

铜币
957
发表于 2018-10-30 18:50:50 | 显示全部楼层
嗨,我知道了如何获得精确的扫掠和路径拉伸路径…首先,主形状不能是圆-你必须将其转换为lwpolyline-还必须将椭圆转换为pellipse(lwpolyline)-也可以将样条线转换为LW Polyline-具有密集的直线段…然后你将这些形状的扫掠或按路径拉伸到任何曲线路径…生成3DSOLID时,移除路径曲线,然后进行实验…沿X或Y方向将3DSOLID复制一些单位,然后缩放到实验3DSOLID…然后单击3DSOLID,将显示夹点-路径质心中有来自形状基础的夹点和夹点,这是虚构的-但夹点存在…然后单击形状中的一个夹点,直到与路径夹点重叠,就是这样…现在只需执行此操作SOLIDEDIT->边->复制边,然后单击沿路径的所有边-3DSOLID的一个包络边必须与路径曲线重叠…将所有接触的路径边复制到新位置的X和Y方向,然后缩放到位置-最后应用连接命令,即路径已重新创建…现在将路径复制回-将X和Y方向反转2倍距离,它应该是起始路径曲线的精确副本…因此只需将圆转换为lwpolyline:
  1. (defun c:ci2lw ( / ss i ent dxf_ent pt_cen radius fst_pt opp_pt new_ep )
  2.   (princ "\nSelect a circles to be converted into a donuts - LWPOLYLINES...")
  3.   (while (null (setq ss (ssget "_:L" '((0 . "CIRCLE")))))
  4.     (princ "\nEmpty sel.set... Try again...")
  5.   )
  6.   (princ "\nThickness of donut
  7.   (princ (getvar "PLINEWID"))
  8.   (princ ">: ")
  9.   (initget 68)
  10.   (setq new_ep (getdist))
  11.   (if new_ep (setvar "PLINEWID" new_ep))
  12.   (repeat (setq i (sslength ss))
  13.     (setq
  14.       ent (ssname ss (setq i (1- i)))
  15.       dxf_ent (entget ent)
  16.       pt_cen (cdr (assoc 10 dxf_ent))
  17.       radius (cdr (assoc 40 dxf_ent))
  18.       fst_pt (polar pt_cen 0.0 radius)
  19.       opp_pt (polar pt_cen pi radius)
  20.     )
  21.     (entmake
  22.       (vl-remove nil
  23.         (list
  24.           '(0 . "LWPOLYLINE")
  25.           '(100 . "AcDbEntity")
  26.           (assoc 67 dxf_ent)
  27.           (assoc 410 dxf_ent)
  28.           (assoc 8 dxf_ent)
  29.           (if (assoc 6 dxf_ent) (assoc 6 dxf_ent) '(6 . "BYLAYER"))
  30.           (if (assoc 62 dxf_ent) (assoc 62 dxf_ent) '(62 . 256))
  31.           (if (assoc 420 dxf_ent) (assoc 420 dxf_ent))
  32.           (if (assoc 370 dxf_ent) (assoc 370 dxf_ent) '(370 . -3))
  33.           (if (assoc 48 dxf_ent) (assoc 48 dxf_ent) '(48 . 1.0))
  34.           '(100 . "AcDbPolyline")
  35.           '(90 . 2)
  36.           '(70 . 1)
  37.           (cons 43 (getvar "PLINEWID"))
  38.           (cons 38 (caddr pt_cen))
  39.           (if (assoc 39 dxf_ent) (assoc 39 dxf_ent) '(39 . 0.0))
  40.           (cons 10 (list (car fst_pt) (cadr fst_pt)))
  41.           '(40 . 0.0)
  42.           '(41 . 0.0)
  43.           '(42 . 1.0)
  44.           (cons 10 (list (car opp_pt) (cadr opp_pt)))
  45.           '(40 . 0.0)
  46.           '(41 . 0.0)
  47.           '(42 . 1.0)
  48.           (assoc 210 dxf_ent)
  49.         )
  50.       )
  51.     )
  52.     (entdel ent)
  53.   )
  54.   (princ)
  55. )
  56. (defun c:lwc ( / cmd ent dxf_ent pt_cen radius fst_pt opp_pt new_ep )
  57.   (setq cmd (getvar 'cmdecho))
  58.   (setvar 'cmdecho 1)
  59.   (vl-cmdf "_.CIRCLE")
  60.   (while (> (getvar 'cmdactive) 0) (vl-cmdf "\"))
  61.   (setq
  62.     ent (entlast)
  63.     dxf_ent (entget ent)
  64.     pt_cen (cdr (assoc 10 dxf_ent))
  65.     radius (cdr (assoc 40 dxf_ent))
  66.     fst_pt (polar pt_cen 0.0 radius)
  67.     opp_pt (polar pt_cen pi radius)
  68.   )
  69.   (entmake
  70.     (vl-remove nil
  71.       (list
  72.         '(0 . "LWPOLYLINE")
  73.         '(100 . "AcDbEntity")
  74.         (assoc 67 dxf_ent)
  75.         (assoc 410 dxf_ent)
  76.         (assoc 8 dxf_ent)
  77.         (if (assoc 6 dxf_ent) (assoc 6 dxf_ent) '(6 . "BYLAYER"))
  78.         (if (assoc 62 dxf_ent) (assoc 62 dxf_ent) '(62 . 256))
  79.         (if (assoc 420 dxf_ent) (assoc 420 dxf_ent))
  80.         (if (assoc 370 dxf_ent) (assoc 370 dxf_ent) '(370 . -3))
  81.         (if (assoc 48 dxf_ent) (assoc 48 dxf_ent) '(48 . 1.0))
  82.         '(100 . "AcDbPolyline")
  83.         '(90 . 2)
  84.         '(70 . 1)
  85.         (cons 43 (getvar "PLINEWID"))
  86.         (cons 38 (caddr pt_cen))
  87.         (if (assoc 39 dxf_ent) (assoc 39 dxf_ent) '(39 . 0.0))
  88.         (cons 10 (list (car fst_pt) (cadr fst_pt)))
  89.         '(40 . 0.0)
  90.         '(41 . 0.0)
  91.         '(42 . 1.0)
  92.         (cons 10 (list (car opp_pt) (cadr opp_pt)))
  93.         '(40 . 0.0)
  94.         '(41 . 0.0)
  95.         '(42 . 1.0)
  96.         (assoc 210 dxf_ent)
  97.       )
  98.     )
  99.   )
  100.   (entdel ent)
  101.   (setvar 'cmdecho cmd)
  102.   (princ)
  103. )

对于椭圆-使用PELLIPSE sys var,当设置为1时,使用ELLIPSE命令创建Pelipse…
现在,当您有多边形扫掠和路径拉伸时,您不需要路径-您可以重新创建它并使用它修改现有3DSOLID,或使用相同的路径参考指南创建类似的3DSOLID…或阵列路径,或者,…任何您想要的…
请记住,为了将来-不要使用圆或椭圆-基本实体需要可拉伸形状。。。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2018-10-31 19:44:15 | 显示全部楼层
当然,SURFEXTRACTCURVE确实需要您找到2条曲线之间的中位数。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:08 , Processed in 0.819327 second(s), 68 queries .

© 2020-2025 乐筑天下

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