明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: caocaosasd

[提问] 新人想不明白呀……怎么获得两点多段线的终点呢?

[复制链接]
发表于 2021-6-29 16:08 | 显示全部楼层
查看组码可以试试这个:http://bbs.mjtd.com/forum.php?mo ... 9%C2%EB%B2%E9%BF%B4
不算是实时的,但是开发的时候还挺好用的
 楼主| 发表于 2021-7-3 00:57 | 显示全部楼层
masterlong 发表于 2021-6-29 10:13
送你几个提取数据的函数

;;返回包含每一出现在列表中的指定键的cdr(点对的后部分)的列表

非常感谢您的指点!massoc这个函数解决了实际问题!
 楼主| 发表于 2021-7-3 01:01 | 显示全部楼层
wyl219 发表于 2021-6-29 16:00
;纯lisp获取所有顶点
(setq ed  (entget (setq en (car (entsel)))))  ;获取关联表

感谢大佬!正在拜读您写的新手入门教程,还在学习中~这几天太忙了,这会儿才仔细学习了这个疑问下各位大佬的解答
顺便您教程里第一个例子的变量end有问题,需要改一下名……

可否借帖子请教一下,如何用ssget "x" 选择图层共同点为XXX的所有图元呢?比如我想选择图层信息为非打印的所有块,应该如何写选择集呢?没找到相关案例,照着dxf码表试着写也没有成功……
发表于 2021-7-3 13:04 | 显示全部楼层
caocaosasd 发表于 2021-7-3 01:01
感谢大佬!正在拜读您写的新手入门教程,还在学习中~这几天太忙了,这会儿才仔细学习了这个疑问下各位大 ...

因为是否打印存在于图层的信息表,而ssget筛选的是对象的信息表,所以应该是没办法直接利用.
我能想到的办法是先遍历图层,找到所有不打印的图层名,然后用于ssget的筛选.
 楼主| 发表于 2021-7-11 23:09 | 显示全部楼层
wyl219 发表于 2021-7-3 13:04
因为是否打印存在于图层的信息表,而ssget筛选的是对象的信息表,所以应该是没办法直接利用.
我能想到的办 ...

大佬,再请教个问题呗,如果输UCS改了一下坐标,entmake创建的图元就跑偏了,就不是点哪画哪了,这种情况咋处理呢?
举个例子,以下是一个画双线的小lisp,我输ucs,然后随便点两个点,把鼠标指针的坐标改歪了,然后我发现,这个时候用这个小lisp画出来的双线是跑偏的,

如何规避这种情况呢?就是正常ucs也能指哪画哪,歪了的UCS也能指哪画哪

(defun c:hsxa (/ L1 L2 KU PT1 PT2 PT3 PT4 ZX ENT13 ENT24)

  (setq L1 (getpoint))
  (setq L2 (getpoint L1))
  (setq KU (angle L1 L2))
  (setq PT1 (polar L1 (+ KU (* 0.5 pi)) 100))
  (setq PT2 (polar L1 (+ KU (* 1.5 pi)) 100))
  (setq PT3 (polar L2 (+ KU (* 0.5 pi)) 100))
  (setq PT4 (polar L2 (+ KU (* 1.5 pi)) 100))

  (setq
    ENT13 (entmakex (list '(0 . "LINE") (cons 10 pt1) (cons 11 pt3)))
  )
  (setq
    ENT24 (entmakex (list '(0 . "LINE") (cons 10 pt2) (cons 11 pt4)))
  )

)
发表于 2021-7-12 03:21 | 显示全部楼层
caocaosasd 发表于 2021-7-11 23:09
大佬,再请教个问题呗,如果输UCS改了一下坐标,entmake创建的图元就跑偏了,就不是点哪画哪了,这种情况 ...

有个函数trans是用来解决这个问题的,当你写的程序涉及到ucs和wcs时,相关的坐标点需要用该函数转换成一致的.
更多的可以看葵花宝典里的介绍

trans

将一个点(或位移量)从一个坐标系转换成另一个坐标系

(trans pt from to [disp])   
参数

pt

三维实数列表,既可以被解释成一个三维点,又可以被解释成一个三维位移(矢量)。

from

整数代码、图元名或三维拉伸矢量,指定 pt 的坐标系。整数代码可以为如下值:

0 世界坐标系(WCS)

1 用户坐标系(当前 UCS)

2 与代码 0 或代码 1 一起使用时,表示当前视口的显示坐标系 (DCS)。与代码 3 一起使用时,表示当前模型空间视口的 DCS。

3 图纸空间 DCS(仅用于代码 2)

to

整数代码、图元名或三维拉伸矢量,指定返回点的坐标系。有效的整数代码取值请参见 from 参数。

disp

如果存在且不为 nil,则将 pt 作为三维位移而不是三维点看待。
发表于 2021-7-12 03:27 | 显示全部楼层
caocaosasd 发表于 2021-7-11 23:09
大佬,再请教个问题呗,如果输UCS改了一下坐标,entmake创建的图元就跑偏了,就不是点哪画哪了,这种情况 ...

对于你这个程序,应该只需要处理L1和L2两个点的坐标就行了,类似下面这样

  (setq L1 (trans  (getpoint) 0 1))
  (setq L2 (trans  (getpoint L1) 0 1))

这个函数我用的比较少,你可以自己测试一下看看
 楼主| 发表于 2021-7-13 00:43 | 显示全部楼层
本帖最后由 caocaosasd 于 2021-7-13 00:44 编辑
wyl219 发表于 2021-7-12 03:27
对于你这个程序,应该只需要处理L1和L2两个点的坐标就行了,类似下面这样

  (setq L1 (trans  (getpoint ...

我这会儿试了一下,这个还不行,无法实现改了UCS以后依然指哪画哪,
然后我又搜集了一下资料,发现这样做可以
就是定义一边L1,L2以后,再定义一遍,我也不知道为啥这样就可以……

  (setq L1 (getpoint))
  (setq L2 (getpoint L1))

  (setq L1 (trans L1 1 0))
  (setq L2 (trans L2 1 0))

  (setq KU (angle L1 L2))


启发源于这个帖子
http://bbs.mjtd.com/forum.php?mo ... amp;highlight=trans

发表于 2021-7-13 08:16 | 显示全部楼层
caocaosasd 发表于 2021-7-13 00:43
我这会儿试了一下,这个还不行,无法实现改了UCS以后依然指哪画哪,
然后我又搜集了一下资料,发现这样 ...

  (setq L1 (trans  (getpoint) 0 1))
  (setq L2 (trans  (getpoint L1) 0 1))

  (setq L1 (trans  (getpoint) 1 0))
  (setq L2 (trans  (getpoint L1) 1 0))

后面1和0的顺序不一样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-29 07:46 , Processed in 0.144894 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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